Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android studio的apk中包含.so库_Android_Gradle_Android Studio - Fatal编程技术网

在android studio的apk中包含.so库

在android studio的apk中包含.so库,android,gradle,android-studio,Android,Gradle,Android Studio,我正在尝试开发一个简单的android应用程序,我正在尝试使用它,它在内部使用.so库。我已经阅读了有关的文档。我遵循了这些步骤,它编译时没有任何错误。但是,在运行时,它抛出未满足的linkerror 通过谷歌搜索,我找到了它,但我找到了一个我正在尝试使用的黑客。但它在第40行抛出编译时错误,大意是 tasks.withType(com.android.build.gradle.PackageApplicationTask) { pkgTask -> pkgTask.jniDir

我正在尝试开发一个简单的android应用程序,我正在尝试使用它,它在内部使用.so库。我已经阅读了有关的文档。我遵循了这些步骤,它编译时没有任何错误。但是,在运行时,它抛出
未满足的linkerror

通过谷歌搜索,我找到了它,但我找到了一个我正在尝试使用的黑客。但它在第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的新手,如果我误解了什么,请向我道歉。

我也有同样的问题。查看中的评论

它说:

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


这应该可以解决您的问题。

我已经尝试了公认答案中提供的解决方案,但它对我无效。 我想与大家分享我的工作成果,因为它可能会帮助其他人。我找到了这个解决办法

基本上,您需要做的是将
文件放入名为
lib
的文件夹中(注意:它不是
libs
,这不是错误)。它应该与APK文件中的结构相同

我的情况是:
项目:
|--lib:
|--|--armeabi:
|--|--|--.so文件。

所以我制作了一个lib文件夹,其中有一个armeabi文件夹,我在其中插入了所有需要的.So文件。然后,我将文件夹压缩到一个
.zip
(zip文件中的结构现在是lib/armeabi/*.so)中,我将
.zip
文件重命名为
armeabi.jar
,并将
编译文件树(dir:'libs',include:'*.jar')
添加到gradle构建文件中的
依赖项{}


这以一种相当简洁的方式解决了我的问题。

要包含您需要的本机库,请执行以下操作:

  • 创建包含“.so”文件的特殊结构的“jar”文件
  • 将该文件包括在依赖项列表中
  • 要创建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”文件的“dependencies”部分:


    也适用于v0.4,尽管我必须修改copy命令的“from”以从项目目录而不是构建目录中获取so文件。我必须将项目(':MyProject').buildDir更改为项目(':MyProject').getProjectDir()以使其工作,使用Android studio 0.3.6和com.Android.tools.build:gradle:0.6.+从Android gradle 0.7.2开始,您可以将本机库放入src/main/jniLibs中,它们将被正确打包。示例:正确的答案是,我在Android Studio 1.0.1和gradle 2.2.1版上尝试过这个,但没有成功。有什么线索吗?最好的答案直到studio中的支持出现。当我将Android studio更新为0.3.2(在Mac上)时,问题出现了。这是一个奇怪的问题,这个解决方案非常有效。在这件(愚蠢的)事情上浪费了几个小时之后,我可以说先生,你应该得到一杯啤酒@Richard在按照描述进行设置后,您是否清理了项目?这对我也有效,但我在棉花糖上遇到了错误。i、 例如,“file not fount libtbb.so”请帮助我。
    Compile
    task已被弃用。改为使用
    JavaCompile
    。我使用这个答案而不是Assaf的答案,因为它使它成为一个自动化的过程。此外,有许多方法可以手动生成zip文件,其中一些方法会引入不必要的文件。这对我来说并不适用,因为在干净的构建(
    /gradlew clean
    )中,在干净之后的第一个构建中(在APK中)不包括native-libs.jar。以后的构建(如果没有清理)可以正常工作。这对于我们的构建服务器脚本来说有点问题。有人能解决这个问题吗?我目前正在使用Gradle(wrapper)1.8和“com.android.tools.build:Gradle:0.6.3”。从android Gradle 0.7.2开始,您可以将本机库放在src/main/jniLibs中,它们将被正确打包。示例:将以下内容添加到build.gradle:sourceSets{main{jniLibs.srcDirs=['libs']}
    compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')