Hi!

I am investigating the new support of the NDK with the official 1.3 release 
of Android Studio. More precisely, I am trying to make a library module 
which uses both Java code and native C code (interfaced with JNI). I 
followed the explanations provided in this doc: 
http://tools.android.com/tech-docs/new-build-system/gradle-experimental 
(Unfortunately, it doesn't say much about libraries). So basically I have 
an Android Studio project with two modules:
- a main application (which uses com.android.model.application plugin)
- a library module (which uses com.android.model.library plugin)
(The main application does not have any native C code, only the library 
module has.)

Here are the problems I've got:

*First case: I put all the NDK stuff in the build.gradle file of the 
library module.*
- The library seems to compile fine (Java and native parts -> the .so files 
are present in the intermediate outputs)
- An AAR file is built but it does not contain the .so files
- The whole project does not compile: it stops on the 
compileDebugJavaWithJavac task of the main app module complaining that it 
cannot find the symbols defined in the library module.

*Second case: I remove all the NDK stuff from the build.gradle file of the 
library module.*
That's silly considering what my final goal is, I did that just for testing 
purposes.
In this case, the compilation is successful: When the main app module is 
compiled, the symbols defined in the library module are properly found (-> 
from what I deduce that the dependencies configuration in the gradle files 
should be OK...)
The generated APK runs properly on the device (as long as the native code 
from the library module is not used of course)

I spent a lot of time trying to make that work without any success... It's 
definitely not impossible that I'm doing something wrong but I've got the 
feeling that there is something buggy and/or missing in the 
gradle-experimental 0.2.0 plugin.

The full source code of the minimal project I used to test the creation of 
an AAR library containing native code is here: 
https://gitlab.com/FlorentBrunet/trials-gradleexpe-lib-jni/tree/master

And here are my build.gradle files:
*- for the main app module:*

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 22
        buildToolsVersion = "22.0.1"

        defaultConfig.with {
            applicationId = "com.ubleam.trialswithlib"
            minSdkVersion.apiLevel = 11
            targetSdkVersion.apiLevel = 22
            versionCode = 1
            versionName = "1.0"
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile project(':mylibrary')
}


*- for the library module:*

apply plugin: 'com.android.model.library'

model {
    android {
        compileSdkVersion = 22
        buildToolsVersion = "22.0.1"

        defaultConfig.with {
            applicationId = "com.ubleam.mylibrary"
            minSdkVersion.apiLevel = 11
            targetSdkVersion.apiLevel = 22
            versionCode = 1
            versionName = "1.0"
        }
    }

    android.ndk {
        moduleName = "dummylib"
    }

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
    }

    android.productFlavors {
        // for detailed abiFilter descriptions, refer to "Supported ABIs" @
        // https://developer.android.com/ndk/guides/abis.html#sa
        create("arm") {
            ndk.abiFilters += "armeabi"
        }
        create("arm7") {
            ndk.abiFilters += "armeabi-v7a"
        }
        create("arm8") {
            ndk.abiFilters += "arm64-v8a"
        }
        create("x86") {
            ndk.abiFilters += "x86"
        }
        create("x86-64") {
            ndk.abiFilters += "x86_64"
        }
        create("mips") {
            ndk.abiFilters += "mips"
        }
        create("mips-64") {
            ndk.abiFilters += "mips64"
        }
        // To include all cpu architectures, leaves abiFilters empty
        create("all")
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.1'
}


Really hope that this could help improving the Android tools because, 
except for these few problems, Android Studio 1.3 and the integration of 
the NDK is amazing!

-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to