Как построить библиотеку android с Android Studio и gradle?
я пытаюсь перенести проект из Eclipse, но ничего, я пробовал работает. В Eclipse у меня есть 3 проекта (2 проекта приложений для android и 1 проект библиотеки android). 2 проекта приложения зависят от проекта библиотеки. Когда я делаю экспорт gradle, я получаю 3 проекта, которые не работают. Я открыт для реструктуризации проекта, но не нашел никакой документации о том, как это должно быть сделано.
есть ли способ сделать 3 проекта, которые Eclipse exports работают вместе? Я лучше перестройке вещей и если да, то документация о том, как это должно быть сделано?
обновление
я загрузил весь проект в GitHub https://github.com/respectTheCode/android-studio-library-example
обновление 1
основываясь на предложениях Падмы Кумара, это то, что я пробовал.
- создать новый проект под названием
MyApp
- клик
File > New ModuleвыберитеAndroid Libraryи имяMyLib
- клик
Build > Make Project
сборка завершается с этой ошибкой
Module "MyLib" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 1 error and 0 warnings in 19 sec
1 error
0 warnings
/.../MyApp/MyLib/build/bundles/debug/AndroidManifest.xml
Gradle: <manifest> does not have package attribute.
затем я добавил package атрибут манифеста делает его
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mylib" >
после построения я получаю эту ошибку
Module "MyApp" was fully rebuilt due to project configuration/dependencies changes
Compilation completed with 2 errors and 0 warnings in 13 sec
2 errors
0 warnings
/.../MyApp/MyLib/src/main/java/com/example/mylib/MainActivity.java
Gradle: package R does not exist
Gradle: package R does not exist
добавление зависимости, похоже, не оказывает никакого влияния на ошибку. Продолжая сверху
- клик
File > Project Structure > Modules > MyApp-MyApp
- переключатель
DependenciesTab - клик
+ > Module Dependencyи выбратьMyLib
- клик
ApplyиOK
- клик
Build > Make Project
обновление 2
на основе предложений от Итана это то, где мы получаем
2 подпроекта build.gradle кажется, есть все правильные части, и единственная разница в том, что строка плагина ниже MyApp/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')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
корень проекта build.gradle был пуст, поэтому я добавил два проекта, как это
dependencies {
compile project(":MyLib")
compile project(":MyApp")
}
теперь я получаю эту ошибку при построении
Gradle:
FAILURE: Build failed with an exception.
* Where:
Build file '/Users/kevin/GitHub/AppPress/MyApp/build.gradle' line: 2
* What went wrong:
A problem occurred evaluating root project 'MyApp'.
> Could not find method compile() for arguments [project ':MyLib'] on root project 'MyApp'.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
обновление 3
большое спасибо Итан за решение этой проблемы.
- добавить
compile project(':SubProjects:MyLib')доMyLib/build.gradle
- удалить
compile files('libs/android-support-v4.jar')СMyLib/build.gradle
- закрыть проект и импортировать корневой проект gradle
обновление 4
начиная с 0.1.2 теперь вы можете включить compile "com.android.support:support-v4:13.0.0" вместо compile files('libs/android-support-v4.jar'). Поскольку он исходит от mavin теперь вы можете включить это в несколько проектов без проблем.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'android'
dependencies {
compile "com.android.support:support-v4:13.0.0"
compile project(':SubProjects:MyLib')
}
обновление 5
по состоянию на 0.1.3 теперь есть кнопка "синхронизировать проект" на панели инструментов. Вы можете щелкнуть это вместо того, чтобы повторно импортировать свой проект после внесения изменений в .gradle файлы.
4 ответов:
Примечание: этот ответ является чистым Gradle ответ, я использую это в IntelliJ на регулярной основе, но я не знаю, как интеграция с Android Studio. Я верю в то, что знаю, что происходит для меня, так что это, как я использую Gradle и Android.
TL; DR полный пример -https://github.com/ethankhall/driving-time-tracker/
отказ от ответственности: это проект, я работал на.
Gradle имеет определена структура (которую вы можете изменить, ссылка внизу говорит вам, как), которая очень похожа на Maven, если вы когда-либо ее использовали.
Project Root +-- src | +-- main (your project) | | +-- java (where your java code goes) | | +-- res (where your res go) | | +-- assets (where your assets go) | | \-- AndroidManifest.xml | \-- instrumentTest (test project) | \-- java (where your java code goes) +-- build.gradle \-- settings.gradleесли у вас есть только один проект, параметры.файл gradle не требуется. Однако вы хотите добавить больше проектов, поэтому нам это нужно.
теперь давайте взглянем на эту сборку.файл gradle. Вам это понадобится в нем (чтобы добавить android инструменты)
построить.gradle
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.3' } }теперь нам нужно рассказать Gradle о некоторых частях Android. Это довольно просто. Базовый (который работает в большинстве моих случаев) выглядит следующим образом. У меня есть комментарий в этом блоке, он позволит мне указать имя версии и код при создании APK.
построить.gradle
apply plugin: "android" android { compileSdkVersion 17 /* defaultConfig { versionCode = 1 versionName = "0.0.0" } */ }что-то мы собираемся добавить, чтобы помочь всем, кто не имеет видел свет Gradle еще, способ для них использовать проект без его установки.
построить.gradle
task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) { gradleVersion = '1.4' }так что теперь у нас есть один проект, чтобы построить. Теперь мы собираемся добавить другие. Я помещаю их в каталог, возможно, называю его deps или подпроектами. Это действительно не имеет значения, но вам нужно будет знать, где вы его положили. Чтобы сообщить Gradle, где находятся проекты, вам нужно будет добавить их в настройки.градля.
Каталог Структуру:
Project Root +-- src (see above) +-- subProjects (where projects are held) | +-- reallyCoolProject1 (your first included project) | \-- See project structure for a normal app | \-- reallyCoolProject2 (your second included project) | \-- See project structure for a normal app +-- build.gradle \-- settings.gradleнастройки.Gradle в:
include ':subProjects:reallyCoolProject1' include ':subProjects:reallyCoolProject2'последнее, что вы должны убедиться, это подпроекты / reallyCoolProject1 / build.gradle и
apply plugin: "android-library"вместоapply plugin: "android".как и каждый проект Gradle (и Maven), теперь нам нужно рассказать корневому проекту о его зависимости. Это также может включать любые обычные зависимости Java, которые вы хотеть.
построить.gradle
dependencies{ compile 'com.fasterxml.jackson.core:jackson-core:2.1.4' compile 'com.fasterxml.jackson.core:jackson-databind:2.1.4' compile project(":subProjects:reallyCoolProject1") compile project(':subProjects:reallyCoolProject2') }Я знаю, что это кажется много шагов, но они довольно легко, как только вы делаете это один или два раза. Этот способ также позволит вам построить на сервере CI, если у вас установлен Android SDK.
NDK сторона Примечание: Если вы собираетесь использовать NDK вам понадобится что-то вроде ниже. Пример сборки.файл gradle можно найти здесь: https://gist.github.com/khernyo/4226923
построить.gradle
task copyNativeLibs(type: Copy) { from fileTree(dir: 'libs', include: '**/*.so' ) into 'build/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') }источники:
У меня просто были очень похожие проблемы с gradle builds / adding .библиотека jar. Я получил его работу с помощью комбинации:
- перемещение папки libs в корень проекта (тот же каталог, что и "src") и добавление библиотеки в эту папку в finder (с помощью Mac OS X)
- В Android Studio, щелкните правой кнопкой мыши на папке, чтобы добавить в качестве библиотеки
- редактирование зависимостей в сборке.gradle файл, добавление
compile fileTree(dir: 'libs', include: '*.jar')}но больше важно и досадно, что только через несколько часов после того, как я получу его работу, Android Studio только что выпустила 0.3.7, которая утверждает, что решила множество проблем с gradle, таких как добавление .jar библиотеки
http://tools.android.com/recent
надеюсь, что это помогает людям!
вот мое решение для пользователей mac я думаю, что это работает и для окна:
сначала перейдите на панель инструментов Android Studio
Build > Make Project (пока вы, ребята, находитесь в сети, пусть он загружает файлы), а затем
Build > Compile Module "ваше имя приложения показано здесь "(все еще онлайн пусть файлы
скачать и закончить) , а затемзапустите свое приложение, которое будет запущено ваш эмулятор и настроить его, а затем запустить его!
вот оно!!! Счастливые ребята кодирования!!!!!!!
Gradle Build Tools 2.2.0+ - все просто работает
это правильный способ сделать это
в попытке избежать экспериментальных и откровенно надоел NDK и все его hackery я рад, что 2.2.x инструментов сборки Gradle вышел, и теперь он просто работает. Ключ-это
externalNativeBuildи указываяndkBuildаргумент пути вAndroid.mkизменитьndkBuildдоcmakeи укажите аргумент path на ACMakeLists.txtпостроить скрипт.android { compileSdkVersion 19 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 19 targetSdkVersion 19 ndk { abiFilters 'armeabi', 'armeabi-v7a', 'x86' } externalNativeBuild { cmake { cppFlags '-std=c++11' arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_PLATFORM=android-19', '-DANDROID_STL=gnustl_static', '-DANDROID_ARM_NEON=TRUE', '-DANDROID_CPP_FEATURES=exceptions rtti' } } } externalNativeBuild { cmake { path 'src/main/jni/CMakeLists.txt' } //ndkBuild { // path 'src/main/jni/Android.mk' //} } }для гораздо более подробной проверки страница Google по добавлению собственного кода.
после этого правильно настроить вы можете
./gradlew installDebugи вперед. Вам также нужно будет знать, что NDK перемещается в clang, так как gcc теперь устарел в Android NDK.
Comments