前言
這一段時間都在做換膚功能,遇到很多問題,解決后又有新的問題,這里分享一則,想在不使用shareUserId來實現多APK共享資源,也建議謹慎使用shareUserId。
聲明
歡迎轉載,但請保留文章原始出處:)
博客園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com
正文
一、關鍵步驟
over@over-ThinkPad-R52:~$ adb shell
$ run- as com.package
$ cd /data/data/com.package
$ ls
databases
lib
$ cd databases
$ ls
preferences.db
$ cat preferences.db > /mnt/sdcard/preferences1.db
$ run- as com.package
$ cd /data/data/com.package
$ ls
databases
lib
$ cd databases
$ ls
preferences.db
$ cat preferences.db > /mnt/sdcard/preferences1.db
代碼說明:
注意com.package換成自己的完整包名,關鍵是run-as命令,最后使用cat命令把數據庫拷貝到sd卡下面。
二、補充
同事分享/data/data/package/lib這個目錄是可以直接訪問的,也就是說adb shell后雖然無法讀取/data目錄,但是可以直接訪問這個目錄下的文件,可以通過上面的run-as命令看得出其權限與其他目錄的權限是不同的,為system權限,這為多apk共享so提供了便利,這也是Vitamio所使用的方式。
2012-6-14
如果簽名了並且指定設置了android:debuggable="false"將無法使用該命令。
2012-7-13
感謝網友分享(見評論),注意不要把adb shell 和 run-as作為一條命令一起執行,例如:adb shell run-as com.pack
三、參考文件
android上使用手機跑adb存取data資料夾[blogspot]
Why do I get access denied to data folder when using adb?
結束
關於共享數據也可以研究一下/data/data/package/files,使用openFileOutput的第二個參數來指定訪問權限。事物總有其多面性,本文有鼓勵窺視apk之嫌,方法分享給你,至於你用來做什么我可以管不了了 :) 也算是一種黑客精神,提醒大家開發應用時切勿對重要的數據明文存放。