Intereting Posts
Простая вкладка, использующая фрагментацию, а не tabactivity RecognitionListener в JellyBean Замораживает, если не говорить сразу Android RecyclerView Adapter Количество элементов возвращается 0 при модульном тестировании Как программно добавить группу в навигационный ящик RecyclerView java.lang.IndexOutOfBoundsException: обнаружена несогласованность. Недопустимая позиция позиции при возобновлении добавления фрагмента Adb на Android SDK. Использование Linux Ubuntu 64 бит 12.10 Программно определить, выполняется ли код из потока пользовательского интерфейса или нет. Добавление входа в приложение в меню настроек Android Android Spannablecontent с закругленными углами Как включить маркеры выделения для EditText в PopupWindow? Задача планирования в Кордове Камера не переопределяет старое изображение, если изменения ориентации Библиотека загрузки изображений Picasso: как загрузить видео эскизы Почему removeOnGlobalLayoutListener выбрасывает NoSuchMethodError? Предупреждение о безопасности в libpng в моей консоли Google Play

Как создать андроидную библиотеку с Android Studio и gradle?

Я пытаюсь перенести проект из Eclipse, но ничего, что я пробовал, работает. В Eclipse у меня есть 3 проекта (2 проекта приложений для Android и 1 проект библиотеки Android). Проекты из 2 приложений зависят от проекта библиотеки. Когда я делаю экспорт градиента, я получаю 3 проекта, которые не работают. Я открыт для реструктуризации проекта, но не нашел никакой документации о том, как это сделать.

Есть ли способ сделать три проекта, которые Eclipse экспортирует вместе? Мне лучше реорганизовать вещи, и если да, то это документация о том, как это сделать?

Обновить

Я загрузил весь проект в GitHub https://github.com/respectTheCode/android-studio-library-example

Обновление 1

Основываясь на предложениях Падма Кумара, это то, что я пробовал.

  1. Создайте новый проект под названием MyApp
  2. Нажмите « File > New Module , выберите « Android Library и назовите его « MyLib
  3. Нажмите « 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 

Добавление зависимостей, по-видимому, не влияет на ошибку. Продолжение сверху

  1. Нажмите « File > Project Structure > Modules > MyApp-MyApp
  2. Переключиться на вкладку « Dependencies
  3. Нажмите + > Module Dependency и выберите MyLib
  4. Нажмите Apply и OK
  5. Нажмите « Build > Make Project

Обновление 2

Основываясь на предложениях от Этана, мы получаем

У 2 sub project 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

Большое спасибо Этану за это.

  1. Добавить compile project(':SubProjects:MyLib') в MyLib/build.gradle
  2. Удалите compile files('libs/android-support-v4.jar') из MyLib/build.gradle
  3. Закрыть проект и импортировать корневой проект из градиента

Обновление 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 свой проект после внесения изменений в .gradle файлы.

Solutions Collecting From Web of "Как создать андроидную библиотеку с Android Studio и gradle?"

Примечание . Этот ответ является чистым ответом 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 

Если у вас есть только один проект, файл settings.gradle не нужен. Однако вы хотите добавить больше проектов, поэтому нам это нужно.

Теперь давайте взглянем на этот файл build.gradle. Вам это понадобится (чтобы добавить инструменты для Android)

build.gradle

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

Теперь нам нужно рассказать Gradle о некоторых частях Android. Это довольно просто. Основной (который работает в большинстве моих случаев) выглядит следующим образом. У меня есть комментарий в этом блоке, это позволит мне указать имя и код версии при создании APK.

build.gradle

 apply plugin: "android" android { compileSdkVersion 17 /* defaultConfig { versionCode = 1 versionName = "0.0.0" } */ } 

Что-то, что мы хотим добавить, чтобы помочь любому, кто еще не видел свет Gradle, способ использовать проект без его установки.

build.gradle

 task wrapper(type: org.gradle.api.tasks.wrapper.Wrapper) { gradleVersion = '1.4' } 

Итак, теперь у нас есть один проект для сборки. Теперь мы собираемся добавить остальных. Я помещаю их в каталог, возможно, называю его deps или subProjects. Это не имеет большого значения, но вам нужно будет знать, где вы его положили. Чтобы сообщить Gradle, в каких проектах вам нужно будет добавить их в settings.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 

settings.gradle:

 include ':subProjects:reallyCoolProject1' include ':subProjects:reallyCoolProject2' 

Последнее, что вы должны убедиться в том, что subProjects / reallyCoolProject1 / build.gradle apply plugin: "android-library" вместо apply plugin: "android" .

Как и каждый проект Gradle (и Maven), теперь нам нужно сообщить корневому проекту о его зависимости. Это может также включать любые нормальные зависимости Java, которые вы хотите.

build.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, вам понадобится что-то вроде ниже. Пример файла build.gradle можно найти здесь: https://gist.github.com/khernyo/4226923

build.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') } 

Источники:

  1. http://tools.android.com/tech-docs/new-build-system/user-guide
  2. https://gist.github.com/khernyo/4226923
  3. https://github.com/ethankhall/driving-time-tracker/

У меня были очень похожие проблемы с библиотекой gradle build / add .jar. Я получил его, используя комбинацию:

  1. Перемещение папки libs до корня проекта (тот же каталог, что и «src»), и добавление библиотеки в эту папку в finder (с использованием Mac OS X)
  2. В Android Studio щелкните правой кнопкой мыши по папке для добавления в качестве библиотеки
  3. Редактирование зависимостей в файле build.gradle, добавление compile fileTree(dir: 'libs', include: '*.jar')}

НО, что более важно и досадно, только через несколько часов после того, как я его заработал, Android Studio только что выпустила 0.3.7, которая утверждает, что решила множество проблем с градиентом, таких как добавление библиотек .jar

http://tools.android.com/recent

Надеюсь, это поможет людям!

Вот мое решение для пользователей Mac, я думаю, что он работает и для окна:

Сначала перейдите на панель инструментов Android Studio

Build> Make Project (в то время как вы, ребята, онлайн, дайте ему возможность загружать файлы), а затем

Build> Compile Module "здесь отображается ваше имя приложения" (все еще он-лайн разрешает файлы
Скачать и закончить), а затем

Запустите приложение, которое будет завершено, и запустит ваш эмулятор и настроит его, а затем запустит!

Вот и все !!! Счастливые Кодирующие парни !!!!!!!

Gradle Build Tools 2.2.0+ – все работает

Это правильный способ сделать это

Стремясь избежать экспериментальных и откровенно сытых по горло NDK и всех его хакеров, я рад, что появился 2.2.x из Gradle Build Tools, и теперь он просто работает. Ключ – externalNativeBuild аргумент externalNativeBuild и указывающий ndkBuild пути ndkBuild на Android.mk или изменение ndkBuild для cmake и укажите аргумент path в скрипте сборки CMakeLists.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.