4

私の英語でごめんなさい...

私は最後のアンドロイド スタジオ (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')
}

エラーを受け取りました: FAILURE: Build failed with an exception.

  • 問題点: タスク ':JaCertTest:packageDebug' の構成に問題が見つかりました。

    プロパティ「jniDir」に指定されたディレクトリ「build\native-libs」が存在しません。

ビルド スクリプトを記述するのはどのように正しいですか?

4

3 に答える 3

2

これは、copyNativeLibs タスクがファイルを見つけられず、「build\native-libs」ディレクトリを作成しない場合に発生します。「libs/armeabi」ディレクトリに .so ファイルがあることを確認しますか?

また、スクリプトは実際にはネイティブ コードをコンパイルしないことに注意してください。ndk-build を実行して .so ライブラリを生成する必要があります。

スクリプトでネイティブ コードをコンパイルする方法の例を次に示します。これには、ndk-build が PATH にある必要があることに注意してください。

// 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')
}
于 2013-06-14T19:53:59.303 に答える
0

これを試すことができます:

// 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'))
}
于 2014-03-07T17:45:55.733 に答える
0

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'

そしたら元気になれるはず

于 2013-11-06T03:36:22.877 に答える