简体   繁体   中英

How can I add .so files to an android library project using gradle 0.7+

Project structure:

App project --> depends on Library project

Library Project has a folder for the compiled jni libs

jniLibs.srcDirs = ['libs']

And I've tried adding the following to the android element of the build.gradle as per the example app https://android.googlesource.com/platform/tools/build/+/2e1f7810edd76d92cee8d3e06bc4dec0c288adea/tests/ndkSanAngeles/build.gradle however android library projects do not support productFlavours and as such the assemble fails with "Could not find method productFlavors() for arguments [dghdhd] on project"

productFlavors {
    x86 {
        ndk {
            abiFilter "x86"
        }
    }
    arm {
        ndk {
            abiFilters "armeabi-v7a", "armeabi"
        }
    }
}

Is there a way to add ndk support to an android library project?

In the end I didnt need to use product flavours.

For the library project I added the following:

android {
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }        
}

The libs folder had a folder inside called "armeabi-v7a" and as this is my only target it worked a treat.

The ndk files (.so) are propagated into the android project that is using the android library project.

Example with new android experimental gradle plugin .


Requirements:

  • Android Studio 1.5+
  • gradle-2.10
  • gradle-experimental:0.6.0-alpha5

1) You could simply put all shared native libraries in the main / jniLibs folder, by default.

Project structure

root folder / android project

root folder / android_project / app / src / main / jniLibs / x86

root folder / android_project / app / src / main / jniLibs / armeabi-v7a

root folder / android_project / app / src / main / jniLibs / ...

Gradle will automatically upload them to the device.

Then you could load the library in an application.

static {
    System.loadLibrary("mylibrary");
}

2) You could also put all shared native libraries in the custom location.

Example with a path to the bin / android / Debug directory.

In that case you should manually set the libraries location in the build.gradle file.

Project structure

root folder / android project

root folder / bin / android / Debug / jniLibs / x86

root folder / bin / android / Debug / jniLibs / armeabi-v7a

root folder / bin / android / Debug / jniLibs / ...

root folder / android_project / app / build.gradle

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

model {
    android {
        sources {
            main {
                jni {
                    source {
                        srcDirs = []
                    }
                }

                jniLibs {
                    source {
                        srcDirs "/../../bin/android/Debug/jniLibs"
                    }
                }
            }
        }
    }
}

According to this thread:

https://groups.google.com/forum/#!topic/adt-dev/nQobKd2Gl_8

not being able to add .so files to library projects was a bug that was fixed in v0.8 of the plugin.

I'm working with Android Studio 2.1, and I found that adding the sources or sourceSets entry to my build.gradle had no apparent effect. Instead I found that I needed the following:

android {
    defaultConfig {
        ndk {
            moduleName "libmp3lame"
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM