Я намагаюся перенести проект із Eclipse, але нічого, що я намагався, не працює. У Eclipse у мене є 3 проекти (2 проекти додатків для Android та 1 проект бібліотеки для Android). 2 проекти додатків залежать від проекту бібліотеки. Коли я роблю експорт граді, я отримую 3 проекти, які не працюють. Я відкритий для реструктуризації проекту, але не знайшов жодної документації щодо того, як це робити.
Чи є спосіб зробити 3 проекти, за якими експорт Eclipse працює разом? Чи краще я реструктуризую речі і якщо так - це документація, як це робити?
Оновлення
Я завантажив весь проект у GitHub https://github.com/respectTheCode/android-studio-library-example
Оновлення 1
Виходячи з пропозицій Padma Kumar, це те, що я спробував.
- Створіть новий проект під назвою
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
- Перехід на
Dependencies
вкладку - Клацніть
+ > 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
файли.
compile 'com.google.android:support-v4:r6'
до кожного свого проекту та плагін Maven (як у прикладі build.gradle нижче) замість compile files('libs/android-support-v4.jar')
gradle зрозуміє, що обидва проекти містять одне і те ж і включить його лише один раз.