Gradle不会将gdbserver打包到apk中。 ndk-gdb导致“错误:目标设备上安装了不可debugging的应用程序”

在Android Studio 0.6中,我创build了一个包含JNI的非常简单的C函数的androidtesting项目。 我在AndroidManifest.xml设置了android:debuggable="true"

我运行ndk-build NDK_DEBUG=1 。 这会在正确的位置生成一个gdbserver和一个gdb.setup文件。

在这里输入图像说明

但是,当我在Android Studio中build立项目,并运行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 gradle,以确保gdbserver在那里,但我找不到gdbservergdb.setup文件! 他们去了哪里? 它看起来像gradle不包装在我的apk!

这是我的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.+' } 

我怎么才能得到gradle正确的打包gdbserver在我的apk? 如果你想自己尝试,我把完整的源代码放在github上。 https://github.com/cypressf/testndk

Solutions Collecting From Web of "Gradle不会将gdbserver打包到apk中。 ndk-gdb导致“错误:目标设备上安装了不可debugging的应用程序”"

我已经尝试了同样的问题。 设置这个:

 android{ buildTypes { debug { jniDebuggable true } } } 

不会帮助,因为你不依赖于Android插件NDK集成。

一个(不是很好)的解决scheme是在您的apk安装完毕后,手动将gdbserver和gdb.setup文件复制到设备上的应用程序的nativeLibraryPath目录中。

我也遇到同样的问题。

=方式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的答案对我的项目是有用的,它的工作原理! 我的gradle是v1.2,com.android.tools.build:gradle:0.10.+“祝你好运我的朋友。

一些有用的链接: http : //ph0b.com/android-studio-gradle-and-ndk-integration/

我遇到了同样的问题,并通过修改“package [ProductFlavor] [BuildType] JniLibs”任务这样的方式来解决它(在build.gradle中的android部分之后):

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

如果您使用产品口味,例如demo,full – 您必须修改名为packageDemoDebugJniLibs和packageFullDebugJniLibs的两个任务。

//编辑:你也应该添加一个导入:

 import org.gradle.api.tasks.Sync 

但可能它也将工作,如果你写def packageTask = …

我在两个不同的情况下面临同样的问题。

1)如果您正在使用三星手机进行debugging。 它们与gdb的本机debugging不兼容。 选中此项: http : //developer.samsung.com/forum/thread/ndk-debugging-with-gdb/77/178834

2)如果您正在使用任何其他手机(在我的情况下是Sony xperia Z),请确保您的手机允许它debugging您的应用程序。 这意味着去开发人员选项>selectdebugging应用程序:xyz.app

还有另一种方法,使用apktool

✓使用apktool d path/to/your.apk反编译你的.apk

✓将gdbservergdb.setup复制到your.apk/libs文件夹中

✓使用apktool b -o out.apk path/to/decompiled重build您的.apk

✓用你的APK辞职

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

✓使用adb install -r your.apk安装apk