run-as Paquete ‘abc’ no se conoce – Galaxy S4 Jellybean o Android 4.3

No puedo ejecutar run-as (o ndk-gdb) para el Galaxy S4 con Jellybean 4.2.2.

~ $ adb shell shell@android:/ $ run-as abc ls run-as: Package 'abc' is unknown 

Hay varias respuestas para este problema para dispositivos pre-ICS, pero parece que se han corregido en ICS.

Actualización – agosto de 2013: después de aparecer inicialmente en el Galaxy S4 con Jellybean 4.2.2, el problema de ejecutar parece ahora en todos los dispositivos 4.3. Mira este error de Android .

Vea el problema reconocido de Android aquí .

Actualización: noviembre de 2013: Google publicó los parches que corren run-as en Android 4.4.

Éxito encontrado al agregar esto a la actividad:

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

Luego envolví startGdbServer en un servicio Android y actualicé el script ndk-gdb para iniciar el servidor en lugar del comando run-as.

Aquí está la sum manifiesta:

      

Aquí están los cambios relevantes de ndk-gdb (en python):

  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) 

Una cosa que terminó arreglando mi Nexus 7 al hacer esto, es instalar diferentes controladores ADB. También volví a flashear el dispositivo (aunque no estoy seguro de si esto fue realmente lo que lo solucionó). Como mencioné en otra respuesta (la mía) fue que se requeriría enraizamiento, cuando en realidad tampoco ayudó en mi caso.

En mi caso, era un problema de la aplicación principal:

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

Los paquetes que tienen en AndroidManifest.xml en la etiqueta coreApp="true" están excluidos de /data/system/packages.list y, por lo tanto, son realmente desconocidos para run-as .

Existe un problema conocido con la última versión de Nexus 7. Simplemente descárguelo a 4.2 (o obtenga 4.3 sin la mini-actualización) y debería estar bien. Hay una discusión aquí al respecto:

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