[HOW-TO] Manually backup 3rd-party application settings and data--by cyricc - Droid Eris General

From the original post by cyricc in the G1 Android Development forum:
HOW TO: Manually backup 3rd-party application settings and data
I just didn't want to be the guy posting only a link. Please post any questions, comments, or thanks in the original thread I deserve NO CREDIT for this post.
##############################
This tutorial will explain how to backup application data and settings for 3rd-party apps that do not have an export/import settings feature. Looking to upgrade your ROM but don't want to lose your todos/highscores/whatnots after a data wipe? Then read on..
(I've never used apps to SD, so I'm not completely sure how the data is stored with that. I'm assuming the entire data partition is moved to the SD though, so the procedures outlined in this guide are not necessary / do not apply to apps2sd)
Tools needed:
adb
Backing up settings
Run a adb shell in the command prompt and navigate to /data/data
Code:
c:\android-sdk-windows-1.5_r1\tools> adb shell
# cd /data/data
Find the folder of the app whose settings you want to backup. In android 1.5, M/SMS are stored in com.android.providers.telephony and bookmarks are in com.android.browser. For third party apps, you can use ls to list all installed apps and find your app folder manually, or use find - say I want to find the app folder for the Astrid todo app:
Code:
# ls
<.....lots of directories....>
com.timsu.astrid
<.....more directories....>
# find *astrid* -maxdepth 0
com.timsu.astrid
Now open a separate command prompt and use adb pull to copy the application's data folder to your computer. This does not copy the app itself, only its saved data and settings. App .apks reside in /data/apps, which you can also adb pull out if you want. In this example I pull out settings for Astrid:
Code:
c:\android-sdk-windows-1.5_r1\tools> adb pull /data/data/com.timsu.astrid d:\desktop\com.timsu.astrid
Feel free to replace d:\desktop with the location of your choice, of course. Repeat the above for each app folder you want to backup.
Restoring settings after a wipe
First thing to do is reinstall the apk, from sdcard, adb install, market, whatever. After the app is installed, you can restore settings in one of two ways: the easy way or the hard but safe (paranoid) way.
The Easy Way:
This quick and dirty method will give everyone full read/write/execute permissions on the application's settings/data. This is normally a Very Bad Idea with a normal linux computer, but realistically there is very little risk of this posing any real security issues on a device like a phone.
First, adb push the settings into the data folder, overwriting the app's stock settings (in this example, the astrid data I backed up) then adb shell into the phone and navigate to /data/data:
Code:
c:\android-sdk-windows-1.5_r1\tools> adb push d:\desktop\com.timsu.astrid /data/data/com.timsu.astrid
Done
c:\android-sdk-windows-1.5_r1\tools> adb shell
# cd /data/data
Now give full permissions to the app's data folder and its contents:
Code:
# chmod 777 com.timsu.astrid
# cd com.timsu.astrid
# chmod 777 * */*
And that's it. Launch the app and your settings/data should be restored.
The Hard Way
I'm not going to go into this in detail because if you're reading this, you probably know the commands to do this anyway. After you reinstall the app, the general idea is to run ls -l on the stock app data directory and its subdirectories to display the owner and permissions of each file/folder as setup by the android system. Write these down then adb push the backup app data folder in, which overwrites everything with directories and files owned by root. Then use chown and chmod to restore the original owners and permissions for each file and directory. Needless to say this can be quite a hassle if you're dealing with more than a few application backups.

i made a script that copies ALL of the applications off of the phone as a backup to a folder on your sd card. the sd card MUST HAVE a folder called "app" in order for this to work.
Code:
@ECHO OFF
adb shell cp data/app/* /sdcard/app
pause
then here is one to reinstall ALL of the apps from that "app" folder back onto your android, keeping the update notifications.
Code:
@ECHO OFF
adb remount
adb shell busybox install sdcard/app/*.apk /data/app
pause
exit
either type those commands into a command prompt or you can make a .bat file and put those commands in.

Related

remove icon

is there a way to remove icons from the start menu? i have a custom rom (modaco and there are a few apps i cant remove i was wondering if i can just remove ther icon? thanks!
I presume you are trying to remove apps that are installed on the system partition. (ie. most of the standard HTC apps).
If so, you can do so from your PC, but follow these instructions in case you remove something you shouldn't (!)
1. Take a Nandroid Backup before starting
2. Connect phone to your PC and set up ADB from the SDK if not already done.
3. Run command
Code:
adb remount
4. Type
Code:
adb shell
5. Type
Code:
su
6. Type
Code:
cd /system/app
7. Type
Code:
ls
8. Now have a look through the list for what you want to remove. Be aware that low-level things like the dialer are listed here, so be careful
9. When you find the app you want to uninstall, type the commands
Code:
exit
adb pull com.name.of.apk.file.apk C:\HTCHeroBackupApps
to copy the apk file to your PC in case you want to put it back
10. Then type
Code:
adb shell
cd /system/app
rm com.name.of.apk.file.apk
11. Application removed. Repeat for other apps you want rid of. Reboot phone when done.
(11.) If you need to restore an app in future for any reason, use the following command:
Code:
adb remount
adb push C:\HTCHeroBackupApps\com.name.of.apk.file.apk /system/app
and reboot the phone.
HTH, and don't go deleting things if you don't know what they are

ADB Push Nautilus Script?

Is there an ADB push nautilus script out there?
That'll be handy, but i'm no scripting expert. I suspect it'll be bit tricky since adb is terminal only, I'm sure someone will have to figure out a way to pipe the output from terminal to GUI pop up dialog box to display progress bar, with success or failure message.
this one seem to work but no progress bar or success/fail message tho. YMMV
Code:
#/bin/sh
adb push $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS /sdcard
save this as adb_push.sh
be sure to set this file with permission:
Code:
chmod a+x adb_push.sh
think of this as rough draft, not perfect. Above code will push straight to sdcard. Suppose you could create few scripts like this..
ADB - Push to System APP
Code:
#/bin/sh
adb remount
adb push $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS /system/app
ADB - Install APK
Code:
#/bin/sh
adb install $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
EDIT: Forgot to mention this, it'll work only if you've already set path to Android's SDK tools folder in .bashrc
awesome, thanks! I'll test it in a minute
Simple scrip to push files to your android device.
Just put it in your Nautilus script dir (HOME/.gnome2/nautilus-scripts) and make it executable (chmod +x Push\ sdcard). also set path for ADB inside script (ADB=...)
I did something similar a while back for both Konqueror and Dolphin in KDE, but I realized, I just don't use a file manager since I prefer the command line instead. I had a working ADB zsh completion script, but somehow forgot to back it up before my previous hard drive failure.
https://code.google.com/p/send-to-android/
this is interesting

Rooted Hero can't delete bootanimation.zip

Hi,
I have rooted my Hero with the tutorial on villainroms page but when I try to delete the bootanimation.zip with astro file manager it doesn't work.
zulu1 said:
Hi,
I have rooted my Hero with the tutorial on villainroms page but when I try to delete the bootanimation.zip with astro file manager it doesn't work.
Click to expand...
Click to collapse
Did you remount the system partition as RW first? The app should let you do this
I have just done what was said in the tutorial so I don't think that I have done what you say and actually I don't quite know what that is.
I made myself a bootscreen and I tried to use that but it didn't work so I downloaded a bootscreen available on the web but that didn't work either.
The bootscreen I have at the moment is from here called drawing-froyo maybe it has to do something with that.
Nah, nothing to do with which one you have.
You need to find out how to remount system in astro (google maybe) and do that.
It will then be easy to overwrite
You could use adb, or downloader a popular root explorer for your pc to browse your phone
MacaronyMax said:
You could use adb, or downloader a popular root explorer for your pc to browse your phone
Click to expand...
Click to collapse
Could you provide the adb command to remount with the proper permissions?
Command prompt:
C:\ ..\> adb devices <-- this will detect your phone connect to pc
C:\ ..\> adb remount <-- remount the phone
C:\ ..\> adb shell <-- command to enter shell command, the drive letter C change to # meaning u have enter shell mode
# su <-- superuser permission
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system <-- changing permission of read/rewrite
# cd /system/media/bootscreen/ <-- change directory to /system/media/bootscreen/
# ls -l <-- list of apps/files in current directory, this is not important, just to ensure the file u seek is there..
# rm any_files_u_wanna_delete <-- remove aka delete command(make sure u already backup or pulled it before doing this)
# exit <-- exit shell command, type it again until the # change back to "C:\>"
C:\ ..\> adb push C:\any_files_u_wanna_push /system/media/bootscreen/ <-- push ur files, with directory of the file to push then directory of where the files should be pushed in
C:\ ..\> adb reboot <-- reboot command, reboots the phone, unplug it and see it runs.. if the bootanimation didn't play/just stalled, try redoing all these steps with the old bootanimation, or do a nandroid restore.
as far as I know, bootanimation in /system/media/bootanimation/ folder is not in zip files, it's in multiple files(in my stock 2.1, it's boot.gif, boot.mp3, boot2.gif, boot_animation.xml and boot_bg.gif). so I bet, u have to extract these files from the zip and push it one by one.
Good luck on adb

Eclipse Android - add superuser permission

Hi, i'm trying to access /system/app/ so i can put apps in there, since i couldt figure out how to install apk files form Eclipse. I'm running Eclipse with the SDK installed, any help or example would be awesome. Thanks
/system is typically read-only (is on every android I know of). On many (most?) devices, the partition containing /system is also write-locked in the eMMC firmware. User apps should be installed into the /data partition.
What do you mean by installing from eclipse? Eclipse uses adb to push the package to the device and launch the package installer.
Please use the Q&A Forum for questions Thanks
Moving to Q&A
There are two ways that may be of help that I know of.
ADB Install:
1. In your Android SDK manager you should have a tool called ADB (Google how to add it to your system path to make life easier)
2. Navigate to your apk file you are trying to install and shift right click in the windows explorer windo and select Open Command line here.
3. then using command line (Console) type in:
Code:
adb install nameofapphere.apk
Note: If the app has spaces in the installer name either take out the spaces or add quotes to the command line as shown below.
Code:
adb install "name of app here.apk"
Second choice is gaining command line root and remounting the system directory with rw permissions.
1. Gain console root access.
2. in console type in:
Code:
adb shell
Note if you see $ you are not in root and # if you are in root.
3. (Please double check)
Code:
mount -o remount,rw /dev/null /system
This will remount your system drive so you have read/write access to it.
4. Push the file to /system/app
5. Set the permissions you want for the application
JavaChips said:
There are two ways that may be of help that I know of.
ADB Install:
1. In your Android SDK manager you should have a tool called ADB (Google how to add it to your system path to make life easier)
2. Navigate to your apk file you are trying to install and shift right click in the windows explorer windo and select Open Command line here.
3. then using command line (Console) type in:
Code:
adb install nameofapphere.apk
Note: If the app has spaces in the installer name either take out the spaces or add quotes to the command line as shown below.
Code:
adb install "name of app here.apk"
Second choice is gaining command line root and remounting the system directory with rw permissions.
1. Gain console root access.
2. in console type in:
Code:
adb shell
Note if you see $ you are not in root and # if you are in root.
3. (Please double check)
Code:
mount -o remount,rw /dev/null /system
This will remount your system drive so you have read/write access to it.
4. Push the file to /system/app
5. Set the permissions you want for the application
Click to expand...
Click to collapse
What i mean i'm writing an app in eclipse. And i have a listview with the apk's, i want when the user clicks on the items, it gets installed. Any ideas?
spxc said:
What i mean i'm writing an app in eclipse. And i have a listview with the apk's, i want when the user clicks on the items, it gets installed. Any ideas?
Click to expand...
Click to collapse
Why did this thread get moved. Took me forever to find it.
Anyway, it seems you want to programmatically install an APK from within an android app, is that correct? Just launch an intent with the package installer as a target:
Code:
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType("/path/to/my/apk","application/vnd.android.package-archive");
startActivity(installIntent);
Moderator: this is definitely development related. Why was it moved to Q&A?
Gene Poole said:
Code:
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType("/path/to/my/apk","application/vnd.android.package-archive");
startActivity(installIntent);
Moderator: this is definitely development related. Why was it moved to Q&A?
Click to expand...
Click to collapse
I'll agree, and secondly I think it was moved to Q&A because the original question was asked in a way that was not clear to it's intents.
So yeah, just pointing the apks to be run by the package installer via intent will launch the installer and install the app selected.

[Q] Accessing files with different owner from App

Background:
I have an App that needs to read files generated by a process outside of its control. These files end up in a folder on the device and they have permissions set so that the App is not allowed to open these files.
The device is rooted and I have access to these files via adb shell and here I can simply do a chmod and the app can read the files. Problem is that these files are generated now and then when the App is running so it is not practical or possible to do the chmod via adb shell. The App needs to be able to operate without being plugged in to adb shell.
So what have I tried so far:
*Searched the internet for answers, YES but no luck
*Searched XDA, Stack Overflow etc YES but no luck
*I have chown the App.apk in /data/app to be root:root and to have the same uid and group id as the files I'm trying to open and read. I have also changed the App userId in /data/system/packages.xml to root.
In all these cases the app is started with its default user id if I check it with ps and the files cannot be opened. Yes I made sure the App was actually off/killed before starting it again after changing these things.
*In java I have tried p = Runtime.getRuntime().exec("sudo chmod 777 /thefolder/*"); but I get IOException same for swapping to "su…" or "sudo su…" Leaving out the superuser returns ok but doesn't do anything to the files in thefolder.
The preferred solution is that this is done in code in either Java or in JNI/C but some sort of one off magic via adb that stays there when device is power cycled is also ok.
Anyone has any good ideas or hints on how these files can be read?
Thanks in advance!

Categories

Resources