Я пытаюсь добавить субмодуль Android в существующий проект Java. В моей голове это имеет смысл и должно работать, потому что:
- Проекты Android могут быть построены с помощью Gradle
- Проекты Android могут быть основаны на Java
IОднако у меня много проблем с настройкой. Моя цель - сделать все это в Intellij, но я не против перехода на Android Studio для мобильной работы. В идеале, в конце концов, проект android прекрасно сосуществует с другими подмодулями.
В настоящее время при создании модуля android в Intellij он прекрасно работает, но не может правильно синхронизироваться или запускать gradle без сбоев из-за зависимостипроблемы, похожие на Не удалось решить: com.android.support:appcompat-v7:27.+ (Ошибка зависимости) (и не удалось разрешить на основе таких вопросов / ответов)
Использование Intellij 2019.2.3, Android Studio 3.5.1 (последняя на момент написания)
При создании с помощью Android Studio на экране «Создание нового модуля» появляется сообщение «Проект долженбыть преобразован в andriodx. * dependencies "и не позволяет мне продолжить установку.
Каков наилучший способ интеграции подмодуля Android в существующий проект gradle на основе Java?
Репо, на случай, если люди захотят копать: https://github.com/GregJohnStewart/task-timekeeper/tree/andriod_app_base_creation
Проект представляет собой стандартную настройку мультипроекта. Не уверены, что было бы полезно показать здесь.
Main settings.gradle
:
rootProject.name = 'Task-Timekeeper'
include 'BaseCode'
include 'DesktopApp'
include 'WebServer'
include 'MobileApp'
include 'MobileApp:app'
Main build.gradle
:
plugins {
// https://github.com/jeremylong/dependency-check-gradle
id "org.owasp.dependencycheck" version "5.2.2"
}
subprojects {
apply plugin: 'org.owasp.dependencycheck'
}
/**
* Task to update the gradle wrapper to the version set.
*/
task updateWrapper(type: Wrapper) {
group "wrapper"
description "Rebuilds the wrapper with the version set. Use to update to new versions of Gradle"
gradleVersion = '5.6.1'
}
Редактировать: удалось получить подмодульдобавили, создав его независимо от основного проекта gradle в Android Studio и интегрировав его по факту. Я смог заставить эту вещь скомпилироваться, запустить и протестировать очень хорошо, пока я не добавил дочерний подмодуль как зависимость app
и не получил следующее сообщение от Intellij: Compilation is not supported for following modules: BaseCode, DesktopApp, Task-Timekeeper, Webserver. Unfortunately you can't have non-Gradle Java modules and Android-Gradle modules in one project.
. Также вызывает следующую ошибку при запуске с Gradlew:
Execution failed for task ':MobileApp:app:javaPreCompileDebug'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor. Please add them to the annotationProcessor configuration.
- log4j-core-2.12.1.jar (org.apache.logging.log4j:log4j-core:2.12.1)
Alternatively, set android.defaultConfig.javaCompileOptions.annotationProcessorOptions.includeCompileClasspath = true to continue with previous behavior. Note that this option is deprecated and will be removed in the future.
Текущий build.gradle
приложения Android: https://github.com/GregJohnStewart/task-timekeeper/blob/andriod_app_base_creation/MobileApp/app/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.gjs.taskTimekeeper.mobileApp"
minSdkVersion 28
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation project(":BaseCode") //causes error in Intellij, build fail running just Gradle
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}