Issue
I am currently working on a library that contains Java and native code.
The build works well, and so does the execution of the code when this lib is used by a client application. But the inline compiler of Android Studio 2.0 beta 2 does no longer recognize my NDK code properly (while this was OK with Studio 1.5):
- All natives appear red in the Java code while they are properly mapped through
JNI_OnLoad():
- The whole C code is highlighted in red as Studio cannot find the includes and symbols:
I didn't have this problem before switching from Android Studio 1.5 to Studio 2.0 beta 2. Studio was able to reverse engineer the code in a way the JNI_OnLoad() mapping between the Java native methods and native C code was detected. #include<> directives and so on were OK too.
I don't know how to restore this behaviour: I investigated in developer.android.com and here in SO but I found nothing about that. I also digged into the Studio Settings with no success. I'm still investigating though.
My Gradle settings follow:
Gradle version: 2.10
gradle.properties:
android.useDeprecatedNdk = trueProject's build.gradle:
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.0.0-beta2' } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }Module's build.gradle:
apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultPublishConfig 'release' publishNonDefault true defaultConfig { minSdkVersion 16 targetSdkVersion 21 } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { ndk { moduleName "mylib" ldLibs "log" } debuggable false jniDebuggable false minifyEnabled false } debug { ndk { moduleName "mylib" ldLibs "log" cFlags "-g" } debuggable true jniDebuggable true minifyEnabled false } } productFlavors { library { } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
As I suspected the debug info to be missing for the IDE to do the reverse engineering properly, I also tried using exactly the same config for debug and release (with the -g flag on, debuggable true, and jniDebuggable true), but this doesn't change anything.
EDIT, 20160212: researches led me to think this is a bug in the NDK integration of Studio 2.0, so I opened a Google Code ticket.
Solution
This has been fixed in Android Studio 2.2, but only for 64 bits. The deprecated NDK toolchain must be replaced by CMake in the project configuration.
Answered By - Shlublu



0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.