Just posting this here in case it is useful to someone. I wanted to restore my app settings piecemeal after a wipe. I did a nandroid backup, installed the 1.6 firmware, then did adp install for all my apps (taken from nandroid backup)
I then unyaffs'd my data.img, and ran this from my unpacked /data/data path. It reads a list of app names from stdin. It requires the app in question to be installed so that it can get the uid of the app. It also requires a busybox install in /data/busybox. That can be changed depending on your busybox location. It tries to not upload non configuration stuff, like lib/ (-exclude lib).
It worked for me, I wouldn't try using it on apps that are part of the phone firmware, since they probably changed substantially. If the following code block is greek to you, you probably don't want to run it.
I then unyaffs'd my data.img, and ran this from my unpacked /data/data path. It reads a list of app names from stdin. It requires the app in question to be installed so that it can get the uid of the app. It also requires a busybox install in /data/busybox. That can be changed depending on your busybox location. It tries to not upload non configuration stuff, like lib/ (-exclude lib).
It worked for me, I wouldn't try using it on apps that are part of the phone firmware, since they probably changed substantially. If the following code block is greek to you, you probably don't want to run it.
Code:
#!/bin/bash
set -e
while read name; do
echo $name...
userid=$(adb shell /data/busybox/stat -c %u /data/data/$name | fromdos)
echo userid $userid
find $name -mindepth 1 -type d -not -name lib | while read dir; do
adb shell su -c "/data/busybox/mkdir -p /data/data/$dir"
adb shell su -c "/data/busybox/chown $userid:$userid /data/data/$dir"
done
find $name -mindepth 1 -type f -not -name lib | while read file; do
adb push $file /sdcard/Download/$(basename $file)
adb shell su -c "/data/busybox/cp /sdcard/Download/$(basename $file) /data/data/$file"
adb shell su -c "/data/busybox/rm /sdcard/Download/$(basename $file)"
adb shell su -c "/data/busybox/chown $userid:$userid /data/data/$file"
adb shell su -c "/data/busybox/chmod 660 /data/data/$file"
done
echo
done