run-as Package 'a.b.c' is unknown - Galaxy S4 Jellybean or Android 4.3

后端 未结 4 1880
我寻月下人不归
我寻月下人不归 2020-11-29 04:11

I cannot run run-as (or ndk-gdb) for the Galaxy S4 running Jellybean 4.2.2.

~  $ adb shell
shell@android:/ $ run-as a.b.c ls
run-as: Package \'a.b.c\' is un         


        
4条回答
  •  时光说笑
    2020-11-29 04:45

    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:

    
        
            
        
    
    

    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)
    

提交回复
热议问题