Closed jkgneu12 closed 8 years ago
Thanks for the report. what Gradle version are you using? I haven't seen this task in my projects.
Cheers.
Gradle v2.10. Android Gradle build tools v1.5.0.
Let me know if you need anything else.
Are you using the built in JNI functionality in android studio?
Can you please send a sample project? It works for me with custom JNI gradle tasks.
I've used the tool lately and I had problems with the JNI inclusion in the merged aar file -First of all, gradle 2.0+ does not worked for me but 1.5 did -Secondly, if I tried to build the library project alone (no other 'app' modules), the JNI files are not included. I need to have a module 'app' that compiles my library project.
If I'm wrong in any way, please let me know. PS: This script was a life-saver, I hope we can make it work in the latest gradle versions.thx
Same issue of @jkgneu12 to me. Gradle v.2.10 and gradle build tools v.2.1.2
Seems that when "transformNative_libsWithSyncJniLibsForRelease" runs, it will reset the imported jni libs. Same workaround working: ensuring that "embedJniLibs" and "mergeReleaseJniLibFolders" runs after "transformNative_libsWithSyncJniLibsForRelease".
The project I work on is structured as:
I have the same problem.
My .so files are generated correctly and copied with embedJniLibs into build/intermediates/bundles/release/jni/
, but the transformNative_libsWithSyncJniLibsForRelease
task deletes the file.
If I run gradle build a second time it works. It only fails on first build.
Can you explain to me a little bit more detailed how I can make sure that the tasks run after transformNative_libsWithSyncJniLibsForRelease
?
I think I figured it out. Does this look reasonable?
} else {
NEEDTOFIX
}
+
+ if (tasks.findByPath('transformNative_libsWithSyncJniLibsForRelease') != null) {
+ // embedJniLibs must run after transformNative_libsWithSyncJniLibsForRelease to
+ // avoid the issue in https://github.com/adwiv/android-fat-aar/issues/15
+ mergeReleaseJniLibFolders.mustRunAfter transformNative_libsWithSyncJniLibsForRelease
+ embedJniLibs.mustRunAfter transformNative_libsWithSyncJniLibsForRelease
+ }
+
bundleRelease.dependsOn embedJniLibs
// Merge Embedded Manifests
Sorry for the late reply... @michael-customlbs workaround is similar to mine:
// Merge Native libraries
+ if (tasks.findByPath('transformNative_libsWithSyncJniLibsForRelease') != null) {
+ embedJniLibs.mustRunAfter transformNative_libsWithSyncJniLibsForRelease
+ } else if (tasks.findByPath('packageReleaseJniLibs') != null) {
- if (tasks.findByPath('packageReleaseJniLibs') != null) {
embedJniLibs.mustRunAfter packageReleaseJniLibs
} else if (tasks.findByPath('mergeReleaseJniLibFolders') != null) {
embedJniLibs.mustRunAfter mergeReleaseJniLibFolders
} else {
NEEDTOFIX
}
@adwiv I unfortunately cannot share my project, but here is the relevant section of my build.gradle file:
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 8
targetSdkVersion 22
versionCode 1
versionName version
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
apply from: 'fat-aar.gradle'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
testCompile "org.mockito:mockito-core:1.9.5"
embedded 'com.mycompany.mylib:1.8.0@aar'
}
But now I have the problem that the .so file contains debugging symbols. At least gdb tells me it found them. Any idea how I can fix this?
Thanks guys.. I took advise from this thread and added it in the latest build. Seems to work for me in test cases. Let me know if there are any issues with it.
In some environments the jni libs were not being included in my output aar. This was happening when "transformNative_libsWithSyncJniLibsForRelease" was not UP_TO_DATE.
I was able to work around this by ensuring that "embedJniLibs" ran after "transformNative_libsWithSyncJniLibsForRelease".
I didn't dig to much further into the issue.