run-as Package 'a.b.c' is unknown - Galaxy S4 Jellybean or Android 4.3
Found success by adding this to the activity:
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"); }}
Then I wrapped startGdbServer in an Android service and updating the ndk-gdb script to start the server instead of the run-as command.
Here's the manifest addition:
<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>
Here are the relevant ndk-gdb changes (in 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)
One thing that ended up fixing my Nexus 7 from doing this, is installing different ADB drivers. I also re-flashed the device (though I am not sure if this was indeed what fixed it). As mentioned in another answer (mine) was that rooting would be required - when in fact, it did not help in my case either.
In my case it was a problem of core app:
shell@android:/ $ run-as com.android.phone transfer_bugreport lsrun-as: Package 'com.android.phone' is unknown
Package which have in AndroidManifest.xml
in <maninfest>
tag coreApp="true"
are excluded from /data/system/packages.list
and thus really unknown for run-as
.