1

以下代码片段似乎是如何在 Android Studio 中包含本机库的答案:

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    extension 'jar'
    from fileTree(dir: 'libs', include: '**/*.so')
    into 'lib/'
}

tasks.withType(Compile) {
    compileTask -> compileTask.dependsOn(nativeLibsToJar)
}

它似乎只是将 *.so 打包到 *.jar 中。但我真的不明白:

  • 为什么必须将它包装在 *.jar 中?
  • 在我的本地库中更改某些内容时,我可以看到更改在我的应用程序中生效,而且 Gradle 构建过程始终输出“...:app:nativeLibsToJar UP-TO-DATE ...”。所以我假设这个任务不会重新运行。但是,当此任务将 *.so 包装在 *.jar 中时,如何在不重新运行此任务的情况下重新包装它们?

我感谢每一个解释:)

4

1 回答 1

0

这真的很有趣 - 我多次发现这是解决方案:

task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') {
    destinationDir file("$buildDir/native-libs")
    baseName 'native-libs'
    extension 'jar'
    from fileTree(dir: 'libs', include: '**/*.so')
    into 'lib/'
}

但它可以被删除,因为它没有任何用处(也许它在较旧的构建版本中有用)。

真正的诀窍是通过sourceSets.main.jniLibs.srcDir 'src/main/libs/' //integrate your libs from libs instead of default dir 'jniLibs

于 2016-05-28T11:12:10.880 回答