Как построить библиотеку 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



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




  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 Tab

  3. клик + > Module Dependency и выбрать MyLib

  4. клик Apply и OK

  5. клик 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



большое спасибо Итан за решение этой проблемы.




  1. добавить compile project(':SubProjects:MyLib') до MyLib/build.gradle

  2. удалить compile files('libs/android-support-v4.jar') С MyLib/build.gradle

  3. закрыть проект и импортировать корневой проект 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 файлы.

579   4  

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

источники:

  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 builds / adding .библиотека jar. Я получил его работу с помощью комбинации:

  1. перемещение папки libs в корень проекта (тот же каталог, что и "src") и добавление библиотеки в эту папку в finder (с помощью Mac OS X)
  2. В Android Studio, щелкните правой кнопкой мыши на папке, чтобы добавить в качестве библиотеки
  3. редактирование зависимостей в сборке.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 на A 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.

Comments

    Ничего не найдено.