android android-ndk gdb android-4.3-jelly-bean ndk-gdb

El paquete ''abc'' de ejecución-como es desconocido: Galaxy S4 Jellybean o Android 4.3



android-ndk gdb (4)

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 se encuentran en AndroidManifest.xml en la etiqueta <maninfest> coreApp="true" se excluyen de /data/system/packages.list y, por lo tanto, son realmente desconocidos para run-as .

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

~ $ adb shell shell@android:/ $ run-as a.b.c ls run-as: Package ''a.b.c'' 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 ejecución ahora parece estar en todos los dispositivos 4.3. Ver este error de Android .

Vea el problema de Android reconocido aquí .

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



Se encontró éxito agregando 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 adición de manifiesto:

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

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.