作为包运行';a、 b.c';未知-Galaxy S4 Jellybean或Android 4.3

作为包运行';a、 b.c';未知-Galaxy S4 Jellybean或Android 4.3,android,android-ndk,gdb,android-4.3-jelly-bean,ndk-gdb,Android,Android Ndk,Gdb,Android 4.3 Jelly Bean,Ndk Gdb,对于运行Jellybean 4.2.2的Galaxy S4,我无法以运行身份(或ndk gdb)运行 ~ $ adb shell shell@android:/ $ run-as a.b.c ls run-as: Package 'a.b.c' is unknown 对于ICS之前的设备,这个问题有多种答案,但这些答案似乎已经在ICS中得到了解决 更新-2013年8月:在最初使用Jellybean 4.2.2出现在Galaxy S4上之后,运行方式问题现在似乎出现在所有4.3设备上。看这个

对于运行Jellybean 4.2.2的Galaxy S4,我无法以运行身份(或ndk gdb)运行

~  $ adb shell
shell@android:/ $ run-as a.b.c ls
run-as: Package 'a.b.c' is unknown
对于ICS之前的设备,这个问题有多种答案,但这些答案似乎已经在ICS中得到了解决

更新-2013年8月:在最初使用Jellybean 4.2.2出现在Galaxy S4上之后,运行方式问题现在似乎出现在所有4.3设备上。看这个

请参阅公认的Android问题


更新-2013年11月:谷歌发布了与安卓4.4一样运行的修复程序。

通过将此添加到活动中获得成功:

private void startGdbServer() {   
    try {
        new ProcessBuilder()
        .command(getFilesDir().getParent() + "/lib/gdbserver", "tcp:5039", "--attach" ,"" + android.os.Process.myPid())
        .redirectErrorStream(true)
        .start();
    } catch (IOException e) {
        Log.e(TAG, "IOException failed to start gdbserver");
    }
}
然后,我将startGdbServer包装在一个Android服务中,并更新ndk gdb脚本以启动服务器,而不是runas命令

以下是添加的清单:

<service android:enabled="true" android:name="com.apportable.activity.GdbServerService"
    android:label="@string/app_name" android:icon="@drawable/icon">
    <intent-filter >
        <action android:name="apportable.FoundationTests.GdbServerService" />
    </intent-filter>
</service>

有一件事最终解决了Nexus7的问题,那就是安装不同的ADB驱动程序。我还重新刷新了设备(尽管我不确定这是否真的是修复它的原因)。正如另一个答案(我的答案)中提到的那样,需要根目录,而事实上,它对我的情况也没有帮助。

最新版本的Nexus 7存在一个已知问题。只需降级到4.2(或者在没有小更新的情况下获得4.3),您就可以了。这里有一个关于它的讨论:


就我而言,这是核心应用程序的问题:

shell@android:/ $ run-as com.android.phone transfer_bugreport ls
run-as: Package 'com.android.phone' is unknown

标签
coreApp=“true”
中有in
AndroidManifest.xml
的包被排除在
/data/system/packages.list
之外,因此对于
来说确实是未知的,只是为了完整性起见,

。。。设备上是否安装了该软件包?是。我可以在启动应用程序时使用adb shell am start-n a.b.c/{activity}线索,但不清楚如何更改非根设备的ndk gdb。让应用程序从ssh服务器上分叉,作为其用户id运行,可能会为您提供一定程度的灵活性,以便在以后独立于应用程序状态启动gdbserver。谢谢Chris。最后,我将startGdbServer包装到一个Android服务中,并更新ndk gdb脚本来启动服务器,而不是runas命令。到目前为止,这似乎使有缺陷的三星设备与其他设备一样可调试。当你说“将此添加到活动中”时,你的意思是将此添加到应用程序中的现有活动中?或者您创建了一个新的应用程序只是为了启动GDB服务器?你能澄清一下你是如何在Android服务中包装它的,以及你对
ndk-gdb
脚本做了哪些更改吗?等等,我在ndk-gdb.py中没有看到这样的行。这就是我们应该修改的文件,对吗?还是我遗漏了什么?在当前的SDK版本(1.1.03)中,代码序列从.apportable/SDK/site_scons/android/SDK.py的第770行开始
shell@android:/ $ run-as com.android.phone transfer_bugreport ls
run-as: Package 'com.android.phone' is unknown