I'm new to Android, so forgive me if this seems a bit interesting. I have two ready-made static libraries, feta ( ../../feta/build/libfeta.a ) and mish ( ../../mish/build/libmish.a ), and I have a common JNI library. Using the JNI library works fine, but I'm trying to access feta and mish through the JNI library. These two libraries are constantly changing and updating with the Android project, so copying them every time they are created is actually not an option (if that even fixed the binding problem), and I would prefer not to simply copy the source files to the project Android
I tried searching, but most answers use the old version of the system and want me to change Android.mk , which I donβt have. I use the latest version of Android Studio, it uses the Gradle plugin.
I tried using the entire configuration from over a dozen Stackoverflow guides and answers in different settings, but no luck.
If you answer, provide a complete and working build.gradle , so I do not encounter the same problems that I received from the other answers (thanks!).
I asked this question after the next this tutorial, so all files will reflect this.
Here is the build error I get:
Error:A problem occurred configuring project ':app'. > The following model rules could not be applied due to unbound inputs and/or subjects: android.sources { ... } @ app/build.gradle line 58, column 5 subject: - android.sources Object [*] repositories { ... } @ app/build.gradle line 39, column 5 subject: - repositories Object [*] [*] - indicates that a model item could not be found for the path or type.
Here is my build.gradle file inside the app module:
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.neonorb.mish_android" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" externalNativeBuild { cmake { cppFlags "-std=c++14 -Wno-implicit-exception-spec-mismatch" } } ndk { // ${targetPlatform.getName()} // ${buildType.getName()} stl "c++_static" abiFilters "x86_64" } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } model { repositories { libs(PrebuiltLibraries) { feta { headers.srcDir "../../feta/include/" binaries.withType(StaticLibraryBinary) { staticLibraryFile = file("../../feta/build/libfeta.a") } } } libs(PrebuiltLibraries) { mish { headers.srcDir "../../mish/include/" binaries.withType(StaticLibraryBinary) { staticLibraryFile = file("../../mish/build/libmish.a") } } } } android.sources { main { jni { dependencies { library "feta" linkage "static" library "mish" linkage "static" } } } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.1.0' compile 'com.google.android.gms:play-services-ads:10.0.1' compile 'com.android.support:design:25.1.0' testCompile 'junit:junit:4.12' }
And here is the root directory ( mish-android ) one:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.2.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
And here is my CMakeLists.txt :
Here's my directory structure, if it helps at all.
