Android am设置调试应用程序不允许以运行方式运行

Android am设置调试应用程序不允许以运行方式运行,android,Android,我需要访问未设置调试标志的应用程序的文件-我认为“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

我需要访问未设置调试标志的应用程序的文件-我认为“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

这是因为它在清单android:debuggable=“true”中没有权限

如果您使用gradle检查:

android {
buildTypes {
    debug {
        debuggable true
    }

更多信息:

如果已安装的应用程序被标记为不可调试,则我认为您不能让
作为
运行,而忽略该应用程序的清单;然而,通过使用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;然而,它安装了
zlibflate
,所以我使用了它。如果您愿意,也可以使用Python来实现

现在,您的当前工作目录中应该有一个
apps/
目录,其中包含所有应用程序的数据。如果需要,可以编辑数据,然后使用以下方法将其还原到设备:

head -c24 mybackup.ab > edited.ab
tar -cvf - apps/ | zlib-flate -compress >> edited.ab
adb restore edited.ab

在我的例子中,我想编辑一个游戏的首选项文件,用从越狱的iOS设备中提取的用户ID替换一个内部用户ID。但是,既然你说你有应用程序的源代码,如果你想编辑数据(你只是在问题中说你想访问它),我建议你备份数据,按照@isma3l的回答,用可调试的版本构建并替换你的应用程序,然后还原备份,这样您甚至不必触摸它。

我知道这一点-不幸的是,这不是一个选项-我需要为已安装的应用程序执行此操作。您有应用程序的源吗?如果您没有源代码,您可以使用apktool提取清单并对其进行修改是-该应用程序是我的应用程序-但我无法重新安装-需要访问当前状态下的文件