web-dev-qa-db-ja.com

Gradleでlibsディレクトリを変更するにはどうすればよいですか?

Zbarをアプリケーションに統合したいのですが、新しいAndroid Studioを使用してこれを実現する方法を理解できないようです。

例を確認し、問題なくコードをコピーしました。私が抱えている問題は、プロジェクトにライブラリを追加することです。それを行う方法がわからないようです。誰かが私にそれを教えてもらえますか?

12
SuNnY_sYeD

実際、@ Michaelの答えは正しいですが、それも時代遅れです。ここで、gradleを使用する必要があるのは、build.gradleファイルに以下の行を追加することだけです。

Android {
...
  sourceSets {
    main.jniLibs.srcDirs = ['libs']
    test.jniLibs.srcDirs = ['libs']
  }
}

または、.soライブラリを次の場所に直接配置します。

src/main/jniLibs

このように、アプリケーションまたはライブラリをビルドすると、jniライブラリが宛先の.jar /.aarファイルにコピーされます。

14
Benjamin

私はIntelliJやGradleに特に精通していませんが、それを理解しました。 ZBarAndroidSDK-0.2を使用しました。

  1. ZBar SDK libs/フォルダーの内容をプロジェクトのlibs/フォルダーにコピーします。
  2. Build.gradle(以下を参照)を変更して、jarとネイティブライブラリがAPKに含まれていることを確認します。
  3. IntelliJにZBarを認識させるには、プロジェクト構造にzbar.jarを追加します。これを行うには、File > Project Structure > Libraries > + Sign > Javaに移動し、ファイルピッカーでzbar.jarを見つけます。それをプロジェクトに追加します。

以下をbuild.gradleに追加します(他の依存関係を保持していることを確認してください)。

dependencies {
    compile files('libs/Android-support-v4.jar')
    compile files('libs/zbar.jar')
}

task copyNativeLibs(type: Copy) {
    from(new File('libs')) { include '**' }
    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(buildDir, 'native-libs')
}

私のbuild.gradleはこの要点に基づいています: https://Gist.github.com/khernyo/422692

21
Michael Lawrie

Gradle 1.1.0を使用している場合は、@ Michaelの回答にいくつかの変更を加える必要があります。これが私のために働くgradleファイルの改訂されたコードです。

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.Android.support:appcompat-v7:22.0.0'
    compile files('libs/zbar.jar')
}
task copyNativeLibs(type: Copy) {
    from(new File('libs')) { include '**' }
    into new File(buildDir, 'native-libs')
}
tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn copyNativeLibs }

clean.dependsOn 'cleanCopyNativeLibs'

tasks.withType(com.Android.build.gradle.tasks.PackageApplication) { pkgTask ->
    pkgTask.jniFolders = new HashSet<File>()
    pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}
3
Nithila