Rum*_*iya 138 android gradle android-studio
我正在尝试开发一个简单的Android应用程序,我正在尝试使用sqlcipher,它在内部使用.so库.我已经阅读了有关如何在Android应用程序中使用sqlcipher的文档.我已按照步骤进行编译,没有任何错误.但是,在运行时它会抛出UnsatisfiedLinkError.
谷歌搜索它,我发现,gradle不支持.so库,但我在这里发现了一个我正在尝试使用的黑客.但它会在gist的第40行抛出编译时错误,
tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask ->
pkgTask.jniDir new File(buildDir, 'native-libs')
}
Run Code Online (Sandbox Code Playgroud)
话
无法在Project'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')
}
Run Code Online (Sandbox Code Playgroud)
可以,任何人都可以帮我解决我做错了什么或者我该怎么做才能在我的apk中包含那些.so库?
由于我是Android开发和gradle的新手,如果我误解了某些内容,请向我道歉.
Ass*_*iel 256
我已经尝试了在接受的答案中提出的解决方案,但它对我不起作用.我想分享一下DID对我有用,因为它可能会帮助别人.我在这里找到了这个解决方案.
基本上你需要做的是将你的.so文件放在一个名为的文件夹中lib(注意:它不是libs,这不是一个错误).它应该与APK文件中的结构相同.
在我的情况下它是:
项目:
| --lib:
| - | --armeabi:
| - | - | - .so files.
所以我创建了一个lib文件夹,里面有一个armeabi文件夹,我插入了所有需要的.so文件.然后我将文件夹压缩成一个.zip(zip文件里面的结构现在是lib/armeabi/*.所以)我将.zip文件重命名为gradle的构建文件armeabi.jar并将其添加compile fileTree(dir: 'libs', include: '*.jar')到dependencies {}该文件中.
这以一种相当干净的方式解决了我的问题.
Rus*_*hyn 67
要包含您需要的本机库:
要创建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)
}
Run Code Online (Sandbox Code Playgroud)
要包含结果文件,请将以下行粘贴到"build.gradle"文件的"dependencies"部分:
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
Run Code Online (Sandbox Code Playgroud)
Pag*_*ian 27
我有同样的问题.查看https://gist.github.com/khernyo/4226923#comment-812526中的评论
它说:
对于gradle android插件v0.3使用"com.android.build.gradle.tasks.PackageApplication"
这应该可以解决你的问题.
| 归档时间: |
|
| 查看次数: |
130187 次 |
| 最近记录: |