Gradle не упаковывает gdbserver в apk. Ndk-gdb приводит к ошибке «ОШИБКА: не отлаживаемое приложение, установленное на целевом устройстве»

В Android Studio 0.6 я создал проект тестирования Android с очень простой функцией C, завернутой в JNI. Я установил android:debuggable="true" в AndroidManifest.xml .

Я запустил ndk-build NDK_DEBUG=1 . Это gdbserver и файл gdb.setup в правильном месте.

Введите описание изображения здесь

Однако, когда я построил проект в студии Android и запустил ndk-gdb --debug я получил следующий результат:

 Android NDK installation path: /usr/local/android-ndk-r9d Using default adb command: /Applications/Android Studio.app/sdk/platform-tools/adb ADB version found: Android Debug Bridge version 1.0.31 Using ADB flags: Using JDB command: /usr/bin/jdb Using auto-detected project path: . Found package name: com.example.testndk.app ABIs targetted by application: armeabi-v7a Device API Level: 19 Device CPU ABIs: armeabi-v7a armeabi Compatible device ABI: armeabi-v7a Using gdb setup init: ./libs/armeabi-v7a/gdb.setup Using toolchain prefix: /usr/local/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi- Using app out directory: ./obj/local/armeabi-v7a Found debuggable flag: true Found gdb.setup under libs/armeabi-v7a, assuming app was built with NDK_DEBUG=1 Found data directory: '/data/data/com.example.testndk.app' ERROR: Non-debuggable application installed on the target device. Please re-install the debuggable version! 

Я заглянул внутрь градиента apk, чтобы убедиться, что gdbserver был там, но я не мог найти файлы gdbserver или gdb.setup ! Куда они делись?? Похоже, что град не упаковывает их в мой апк!

Вот мой build.gradle :

 apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.1.0" defaultConfig { applicationId "com.example.testndk.app" minSdkVersion 9 targetSdkVersion 19 versionCode 1 versionName "1.0" } sourceSets.main { jniLibs.srcDir 'src/main/libs' // use the jni .so compiled from the manual ndk-build command jni.srcDirs = [] //disable automatic ndk-build call } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:19.+' } 

Как я могу получить град, чтобы правильно упаковать gdbserver в моем apk? Если вы хотите попробовать сами, я поставил полный источник на github. https://github.com/cypressf/testndk

Я экспериментировал с той же проблемой. Установка этого параметра:

 android{ buildTypes { debug { jniDebuggable true } } } 

Не помогло бы, так как вы не полагаетесь на интеграцию NDK с плагином Android.

Одно (не очень хорошее) решение – вручную скопировать файлы gdbserver и gdb.setup в каталог nativeLibraryPath вашего приложения на устройстве после установки apk.

Я также получаю ту же проблему.

= Путь 1 =

Из-за gdbserver называется «gdbserver», но не «gbdserver.so», он не будет установлен в APK. Мы можем сделать что-то вроде этого: http://ivansotof.com/2013/12/including-native-so-libraries-in-android/ , наконец, мы можем убедиться, что APK содержит gdbserver в APK / lib / [ABI ] / gdbserver.

= Путь 2 =

Ответ @ ph0b полезен для моего проекта, и он работает! Мой град – v1.2, com.android.tools.build:gradle:0.10.+ «Удачи моему другу.

Некоторая полезная ссылка: http://ph0b.com/android-studio-gradle-and-ndk-integration/

Я столкнулся с такой же проблемой и решил ее, изменив задачу «package [ProductFlavor] [BuildType] JniLibs» (после раздела Android в build.gradle):

 Sync packageTask = project.getTasks().findByName("packageDebugJniLibs") packageTask.include(['**/gdbserver', '**/gdb.setup']) 

Если вы используете вкусы продукта, например: demo, full – вам нужно изменить две задачи с именами packageDemoDebugJniLibs и packageFullDebugJniLibs.

// EDIT: вы также должны добавить импорт:

 import org.gradle.api.tasks.Sync 

Но, возможно, он также будет работать, если вы напишете def packageTask = …

Я столкнулся с одной и той же проблемой в двух разных случаях.

1) Если вы используете Samsung для отладки. Они не совместимы с собственной отладкой с gdb. Проверьте это: http://developer.samsung.com/forum/thread/ndk-debugging-with-gdb/77/178834

2) Если вы используете любой другой телефон (Sony xperia Z в моем случае), убедитесь, что ваш телефон позволяет отлаживать ваше приложение. Это означает перейти к вариантам разработчика> выбрать приложение для отладки: xyz.app

Существует еще один способ, используя apktool :

✓ Декомпилируйте свой .apk используя apktool d path/to/your.apk

✓ Скопируйте gdbserver и gdb.setup в папку your.apk/libs

✓ Восстановите свой .apk с помощью apktool b -o out.apk path/to/decompiled

✓ Сдать свой apk с:

 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore your.apk androiddebugkey 

✓ Установите apk с помощью adb install -r your.apk