run-as Пакет ‘abc’ неизвестен – Galaxy S4 Jellybean или Android 4.3
Я не могу запустить run-as (или ndk-gdb) для Galaxy S4, работающего с Jellybean 4.2.2.
~ $ adb shell [email protected]:/ $ run-as abc ls run-as: Package 'abc' is unknown
Для этой проблемы есть несколько ответов для устройств с предварительной ICS, но они, похоже, были исправлены в ICS.
Обновление – август 2013: после появления на Galaxy S4 с Jellybean 4.2.2, проблема с запуском теперь, кажется, на всех 4.3 устройствах. Посмотрите эту ошибку Android .
- Попытка удалить fragment из представления дает мне NullPointerException на mNextAnim
- Android YouTubePlayer с несанкционированным наложением поверх проигрывателя
- android: actionBarStyle требует уровня API 11
- setPluginsEnabled не существует для WebView
- Кнопка перехвата назад с мягкой клавиатуры
См. Подтвержденную проблему с Android.
Обновление – ноябрь 2013: Google опубликовал исправления , исправляющие запуск, как в Android 4.4.
- Android Webview - веб-страница должна соответствовать экрану устройства
- Как установить связь с Android-службой
- Как использовать методы setArguments () и getArguments () во Фрагментах?
- Отправьте запрос POST с данными JSON, используя Volley
- Как прокрутить до нижней части RecyclerView? scrollToPosition не работает
- Можно ли разместить эти папки в другом месте?
- Как создать заставку?
- Как установить Spannable object font с пользовательским шрифтом
Нашел успех, добавив это к активности:
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"); } }
Затем я завернул startGdbServer в службе Android и обновил сценарий ndk-gdb, чтобы запустить сервер вместо команды run-as.
Вот дополнение манифеста:
Вот соответствующие изменения ndk-gdb (в 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)
Одна вещь, которая закончилась тем, что я установил Nexus 7 из этого, устанавливает разные драйверы ADB. Я также перезапустил устройство (хотя я не уверен, действительно ли это было исправлено). Как упоминалось в другом ответе (мой), было бы необходимо, чтобы укоренение было необходимо – когда на самом деле это тоже не помогло в моем случае.
В моем случае это была проблема основного приложения:
[email protected]:/ $ run-as com.android.phone transfer_bugreport ls run-as: Package 'com.android.phone' is unknown
Пакет, который в AndroidManifest.xml
в coreApp="true"
исключен из /data/system/packages.list
и, таким образом, неизвестен для run-as
.
Существует известная проблема с последней версией Nexus 7. Просто перейдите на 4.2 (или получите 4.3 без мини-обновления), и все должно быть в порядке. Здесь обсуждается: