2013-06-20 8 views
29

Jellybean 4.2.2を実行しているGalaxy S4にrun-as(またはndk-gdb)を実行できません。run-asパッケージ 'a.b.c'が不明です - Galaxy S4 JellybeanまたはAndroid 4.3

~ $ adb shell 
[email protected]:/ $ run-as a.b.c ls 
run-as: Package 'a.b.c' is unknown 

この問題は、ICS以前のデバイスでは複数の回答がありますが、ICSで修正されているようです。

アップデート - 2013年8月:Jellybean 4.2.2でGalaxy S4に初めて登場した後、run-asの問題はすべての4.3デバイスで発生しているようです。このAndroid bugを参照してください。

承認済みのAndroidの問題hereをご覧ください。

アップデート - 2013年11月:Googleは、Android 4.4でrun-asを修正したpatchesを投稿しました。活動にこれを追加することで、成功が見つかり

+0

完全性のために、そのパッケージがデバイスにインストールされていますか? – CommonsWare

+0

はい。私はadbシェルで起動することができますam start -n abc/{activity} –

+0

手がかりhttp://developer.samsung.com/forum/thread/ndk-debugging-with-gdb/77/178834 root以外のデバイスに対してndk-gdbを変更する方法を明確にしていない。 –

答えて

12

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"); 
    } 
} 

は、その後、私はAndroidのサービスでstartGdbServerを包み、サーバーの代わりのrun-asコマンドを開始するためにNDK-GDBスクリプトを更新します。ここで

は、マニフェスト加えます:これをやってから、私のネクサス7を固定してしまったことの一つは、ある

remote_gdbserver = '/data/data/' + env['APPLICATION_IDENTIFIER'] + '/lib/gdbserver' 

    print "Attaching to pid " + pid 
    # Android 4.2 requires the --user 0 option. Earlier versions cannot have it 

    results = env.Execute([env['ADB'], 'shell', 'am']) 
    if "--user" in results: 
     user_option = "--user 0" 
    else: 
     user_option = "" 

    adb.AsyncShell(env, 'am startservice ' + user_option + ' -a ' + env['APPLICATION_IDENTIFIER'] + '.GdbServerService --es gdbserver_name ' + remote_gdbserver + ' --ei gdbserver_port ' + str(env['ANDROID_REMOTE_DEBUG_PORT'])) 

    # HACK: magic number. ensure the gdb server is actually up and running 
    time.sleep(2) # 1 is usually enough, but not always, like after reboot or with heavy system load 

    adb.Forward(env, env['ANDROID_LOCAL_DEBUG_PORT'], env['ANDROID_REMOTE_DEBUG_PORT']) 

    adb.Pull(env, process_path, '/system/bin/app_process') 

    setup_path = '"' + setup_path + '"' 

    if env['CGDB'] is not None: 
     cmd = [env['CGDB'], '-d', env['GDB'], '--', '-x', setup_path] 
    else: 
     cmd = [env['GDB'], '-x', setup_path] 

    env.RunCommand(cmd) 
+0

ユーザーIDとして実行しているsshサーバーからアプリケーションをフォークすると、アプリケーションの状態に関係なくgdbserverを後で起動するための柔軟性が大幅に向上する可能性があります。 –

+0

Chrisに感謝します。 AndroidサービスでstartGdbServerをラップし、run-asコマンドの代わりにndk-gdbスクリプトを更新してサーバーを起動しました。これまでのところ、これはバギーのサムスンのデバイスをデバッグ可能なものにするものと思われます –

+0

「これをアクティビティに追加する」と言ったら、これをあなたのアプリの既存のアクティビティに追加したということですか?または、GDBサーバーを起動するだけの新しいアプリケーションを作成しましたか? Androidサービスでどのようにラップしたのか、 'ndk-gdb'スクリプトをどのように変更したのかを明確にすることはできますか? –

0

:ここ

<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> 

は(Pythonで)関連NDK-gdbの変化であります異なるADBドライバをインストールする。私はまた、デバイスを再フラッシュしました(しかし、これが本当に修正されたかどうかはわかりませんが)。別の答え(私の)で言われたように、実際には私のケースでも役に立たなかったのです。

-1

Nexus 7の最新バージョンには既知の問題があります。単純に4.2にダウングレードする(またはミニアップデートなしで4.3を取得する)と、問題なく動作します。それについてここでの議論があります:私の場合は

http://code.google.com/p/android/issues/detail?id=58373

+0

すでに質問に記載されています。 –

0

それはコアアプリの問題だった:AndroidManifest.xml<maninfest>でタグcoreApp="true"を持っているが、本当にこれ/data/system/packages.listから除外され、

[email protected]droid:/ $ run-as com.android.phone transfer_bugreport ls 
run-as: Package 'com.android.phone' is unknown 

パッケージ未知数run-as

関連する問題