Android Studio Gradle出现本机libs错误

Android Studio Gradle出现本机libs错误,android,android-ndk,gradle,android-studio,Android,Android Ndk,Gradle,Android Studio,对不起,我的英语 我有上一个android studio(2013年6月14日)。 创建新的Android项目。 将.so文件添加到/libs/armeabi 将build.gradle编辑为 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plu

对不起,我的英语

我有上一个android studio(2013年6月14日)。 创建新的Android项目。 将.so文件添加到/libs/armeabi

将build.gradle编辑为

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.4'
    }
}
apply plugin: 'android'

dependencies {
    compile files('libs/android-support-v4.jar','libs/jcPKCS11.jar')
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 16
    }
}

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

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

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniDir new File('build/native-libs')
}
我收到一个错误: 失败:生成失败,出现异常

  • 出了什么问题: 发现任务“:JaCertTest:packageDebug”的配置有问题

    为属性“jniDir”指定的目录“build\native libs”不存在
如何正确地编写构建脚本


如果copyNativeLibs任务找不到任何文件,因此没有创建“build\native libs”目录,就会发生这种情况。您确定“libs/armeabi”目录中有.so文件吗

另外,请记住,您的脚本实际上不会编译本机代码。您仍然需要自己运行ndk build来生成.so库

下面是一个如何让脚本编译本机代码的示例。注意,这要求ndk构建在您的路径中

// Task to run ndk-build
task ndkBuild(type: Exec) {
    commandLine 'ndk-build', '-j', Runtime.runtime.availableProcessors()
}

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

// Make copyNativeLibs depend on ndkBuild since we must build the libraries
// before we can copy them.
copyNativeLibs.dependsOn 'ndkBuild'
tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

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

在您的build.gradle中尝试此功能:

dependencies {
    // whatever you'd normally have here...
    compile fileTree(dir: 'libs', include: '*.jar')
}

task packageNativeLibs(type: Jar) {
    baseName 'libtest'  // adjust to what you want your lib to be called

    // libs is where normally a jni project puts objects so let's look there....
    from(file('libs/armeabi/')) { 
        include '**/*.so'
    }

    into('libs/armeabi') // pay attention if using a different ABI like x86

    destinationDir(file('libs/'))
}

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

clean.dependsOn 'cleanPackageNativeLibs'
那么你应该很好

你可以试试这个:

// Include the native-libs folder into the final APK
tasks.withType(com.android.build.gradle.tasks.PackageApplication) { 
  pkgTask ->
  pkgTask.jniFolders = new HashSet<File>()
  pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}
//将本机libs文件夹包括到最终APK中
tasks.withType(com.android.build.gradle.tasks.PackageApplication){
pkgTask->
pkgTask.jniFolders=new HashSet()
pkgTask.jniFolders.add(新文件(buildDir,'native libs'))
}

。所以文件在libs/armeabi中,在纯Intellij Idea中,没有gradle项目的构建和运行,但我想把它放在android studio中,有gradleCan可以提供更多关于项目布局的信息吗?我很确定你的错误是由于某个地方的路径不正确造成的。我已经在下面提到的链接中发布了我的答案