包括在Android Studio中的apk .so库[复制]包括在Android Studio中的

2019-05-08 15:48发布

这个问题已经在这里有一个答案:

  • Android的工作室,和gradle这个NDK 23个回答

我想开发中,我想使用一个简单的Android应用我的手sqlcipher ,它使用.so库内部。 我已阅读的文档如何与Android应用使用sqlcipher 。 我按照步骤,它编译没有任何错误。 但是,在运行时,它抛出UnsatisfiedLinkError

谷歌搜索周围,我发现, gradle这个不支持。所以图书馆还 ,但我发现一个黑客在这里 ,我想使用。 但它抛出在行#40是要点编译时错误,

tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}

无法找到项目“MyProject的”财产“COM”

在这里,我从我的build.gradle文件发布的代码。

buildscript {
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/commons-codec.jar')
    compile files('libs/guava-r09.jar')
    compile files('libs/sqlcipher.jar')
}

targetCompatibility = 1.6
sourceCompatibility = 1.6

android {
    target = 'android-14'

    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 16
    }    

}

task copyNativeLibs(type: Copy) {
    from(new File(project(':MyProject').buildDir, 'native-libs')) { include '**/*.so' }
    into new File(buildDir, 'native-libs')
}

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

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
    pkgTask.jniDir new File(buildDir, 'native-libs')
}

能,有人请帮助我什么,我做错了或我应该怎么做,包括那些在。所以我的APK库?

由于我是新android开发和gradle这个,请原谅我,如果我有误解的东西。

Answer 1:

我有同样的问题。 看看在评论https://gist.github.com/khernyo/4226923#comment-812526

它说:

对于gradle这个Android插件V0.3使用 “com.android.build.gradle.tasks.PackageApplication”

这应该解决您的问题。



Answer 2:

我试着在接受的答案提出的解决方案并没有为我工作。 我想分享什么为我所做的工作,因为它可能会帮助别人。 我发现这个解决方案在这里 。

基本上你需要做的就是把你的东西.so文件夹AA里面名为lib (注:这是不是libs ,这是不是一个错误)。 它应该是相同的结构应该是在APK文件。

在我的情况是:
项目:
| --lib:
| - | --armeabi:
| - | - | - 这样的文件。

所以我做了一个lib文件夹,并在它里面,我已经插入所有需要的.so文件的文件夹armeabi。 然后我拉链的文件夹成.zip (zip文件内的结构现在是LIB / armeabi / *所以)。我改名.zip文件到armeabi.jar和增加了行compile fileTree(dir: 'libs', include: '*.jar')dependencies {}在gradle产出的构建文件。

这解决了我的问题,在一个相当干净的方式。



Answer 3:

包括机库,您需要:

  1. 创建包含“所以”文件的特殊结构“JAR”的文件;
  2. 包括依赖列表中的文件。

要创建jar文件,可以使用下面的代码片段:

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)
}

以包括生成的文件中,粘贴以下行成“依赖性”部分中“的build.gradle”文件:

compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')


文章来源: Include .so library in apk in android studio [duplicate]