我需要访问没有设置调试标志的应用程序的文件 - 我认为“am set-debug-app”应该这样做 - 不幸的是我得到了:
1|shell@android:/data $ am set-debug-app --persistent -w org.foo.bar
shell@android:/data $ run-as org.foo.bar
run-as: Package 'org.foo.bar' is not debuggable
答案 0 :(得分:0)
这是因为它在清单中没有权限android:debuggable =" true"。
如果您使用gradle检查:
android {
buildTypes {
debug {
debuggable true
}
答案 1 :(得分:0)
如果标记为不可调试,我认为你不能让run-as
忽略已安装应用的清单;但是,还有另一种方法可以使用Android的内置备份功能来访问应用数据。
首先,使用
创建应用数据的备份adb backup -f mybackup.ab com.my.app
您的设备会要求确认以开始备份;除非你想让生活更艰难,否则不要输入备用密码。这将创建一个仅包含您应用数据的.ab
文件。然后,做
dd if=mybackup.ab bs=24 skip=1 | zlib-flate -uncompress | tar -xvf -
您可能必须使用以下某个
替换zlib-flate -uncompress
openssl zlib -d
python -c "import zlib,sys;sys.stdout.write(zlib.decompress(sys.stdin.read()))"
我的Ubuntu的OpenSSL不支持zlib;但是,它安装了zlib-flate
,所以我使用了它。如果需要,您也可以使用Python。
现在,您应该在当前工作目录中留下包含所有应用数据的apps/
目录。如果需要,您可以编辑数据,然后使用以下内容将其恢复到设备:
head -c24 mybackup.ab > edited.ab
tar -cvf - apps/ | zlib-flate -compress >> edited.ab
adb restore edited.ab
在我的情况下,我想编辑一个游戏的偏好文件,用从我的越狱iOS设备中提取的内部用户ID替换内部用户ID。但是,既然你说你有应用程序的源代码,如果你想编辑数据(你只想说你想在问题中访问它),我建议你备份数据,用可调试的版本构建和替换你的应用程序per @ isma3l的答案,然后恢复备份,这样你甚至不必触摸它。