在 android 工作室的 apk 中包含.so 库

我正在尝试开发一个简单的 android 应用程序,其中我试图使用 密码,它使用。所以内部的库。我已经阅读了 如何在 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')
}

有没有人能告诉我我做错了什么或者我应该怎么做才能把这些包括进来。我的平板电脑里有图书馆吗?

由于我是 Android 开发和分级的新手,如果我误解了什么,请向我道歉。

141028 次浏览

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

上面写着:

对于 gradle android 插件 v0.3,请使用“ com.android.build.gradle.asks. PackageApplication”

这应该能解决你的问题。

我已经尝试了在接受的答案中提出的解决方案,它对我没有用。 我想分享什么做工作,因为它可能帮助别人为我。我已经找到了这个解决方案 给你

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

对我来说是:
项目名称:
| —— lib:
阿米阿比:
| —— | —— | —— . so 文件。 < br >

所以我做了一个 lib 文件夹,里面有一个 armeabi 文件夹,我在里面插入了所有需要的东西。文件。然后,我将文件夹压缩到 .zip中(压缩文件内部的结构现在是 lib/armeabi/* 。因此)我将 .zip文件重命名为 armeabi.jar,并在 gradle 的构建文件中将 compile fileTree(dir: 'libs', include: '*.jar')行添加到 dependencies {}

这相当干净利落地解决了我的问题。

要包含本机库,您需要:

  1. 创建包含“ . so”文件的特殊结构的“ 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')