前言
這一段時間都在做換膚功能,遇到很多問題,解決後又有新的問題,這裡分享一則,想在不使用shareUserId來實現多APK共用資源,也建議謹慎使用shareUserId。
聲明 歡迎轉載,但請保留文章原始出處:) 部落格園:http://www.cnblogs.com 農民伯伯: http://over140.cnblogs.com
本文
一、關鍵步驟
主要是run-as命令: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
代碼說明:
注意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之嫌,方法分享給你,至於你用來做什麼我可以管不了了 也算是一種駭客精神,提醒大家開發應用時切勿對重要的資料明文存放。