Как изменить каталог libs в Gradle?

Я хочу интегрировать Zbar в свое приложение, но не могу понять, как этого добиться с помощью новой Android Studio.

Я просмотрел пример и скопировал код без каких-либо проблем. У меня проблема с добавлением библиотек в мой проект, но я не могу понять, как это сделать. Может ли кто-нибудь провести меня через это?

Ответы на вопрос(4)

Решение Вопроса

На самом деле, @Michael 'Ответ правильный, он также устарел. Теперь, используя gradle, все что вам нужно сделать, это добавить следующие строки в файл build.gradle:

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

или напрямую поместите ваши .so библиотеки в:

SRC / основные / jniLibs

Таким образом, когда вы создаете свое приложение или библиотеку, библиотеки jni копируются в конечный файл .jar / .aar.I '

 Mehmet Sefa Balık30 янв. 2017 г., 23:17
Вы спасли мой день, спасибо.
 Greg Brown14 мар. 2016 г., 19:20
Я также пытаюсь интегрировать ZBar в мое приложение, и это сработало для меня!

Я не особенно знаком с IntelliJ или Gradle, но я понял это. Я использовал .ZBarAndroidSDK-0.2

Скопируйте содержимое ZBar SDKlibs/ папка в вашем проектеlibs/ папка.Измените свой build.gradle (см. Ниже), чтобы убедиться, что jar и собственные библиотеки включены в ваш APK.Чтобы 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/4226923.

 John Shelley14 июн. 2014 г., 05:55
Круто @shkschneider Я получил это работает! Тем не менее, это только около 50% времени, когда я использовал его с затмением, это не былоэто плохо. Есть идеи?
 User9704 июл. 2014 г., 11:14
Любая идея, как заставить это работать в затмении. я имею*.so файлы сохранены в папке libs, но мое приложение не может найти эти файлы.
 user174352422 окт. 2014 г., 16:37
У меня есть код, которыйпохоже на это, но яя не вижу скопированную папку libs && файлы в каталоге моего проекта. Должны ли вы видеть папку jniLibs или native-libs в исходном коде проекта или только в выходных данных сборки? Где в данных вы должны найти .so?
 John Shelley13 июн. 2014 г., 06:08
@shkschneider не могли бы вы подробнее остановиться на этом? Вы бы просто поместили файлы .so и их папки в папку jniLibs / (jniLibs / armeabi / file.so) и т. Д., Затем поместили zbar.jar обратно в папку libs / и добавили его в файл build.gradle? Спасибо
 shkschneider13 июн. 2014 г., 17:10
@JohnShelley Точно:.jar идет к,libs.so идет кjniLibs, Увидетьstackoverflow.com/a/22488155/603270
 shkschneider10 апр. 2014 г., 11:02
С Gradle 0.7.2+ вы можете поместить свои нативные библиотеки прямо вsrc/main/jniLibs и это будет работать автоматически.

мы построилиZBarAndroidSDK-0.2 Пример в Android Studio 2.0, просто открыв проект CameraTest из папки примера.

Он автоматически реструктурировал проект из затмения в Android Studio. Вот и все.

Если вы используете 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()
    pkgTask.jniFolders.add(new File(buildDir, 'native-libs'))
}

Ваш ответ на вопрос