我的Android库项目由四个模块组成:
以下是IntelliJ的此设置的屏幕截图:
我的模块使用非常具体的Android SDK级别设置:
compileSdkVersion 19
minSdkVersion 14
targetSdkVersion 19
compileSdkVersion 19
minSdkVersion 14
targetSdkVersion 19
compileSdkVersion 17
minSdkVersion 14
targetSdkVersion 17
compileSdkVersion 18
minSdkVersion 18
targetSdkVersion 18
随着Android的新版本发布,基础和工厂模块可以跟随compileSdkVersion
和targetSdkVersion
级别。但是,v14和v18都绝对不能效仿。
我的模块以非常具体的方式相互依赖:
所以当我去构建我的项目时,我收到了这个错误:
Error:Gradle: Execution failed for task ':v14:processReleaseManifest'.
> Manifest merging failed. See console for more info.
使用./gradlew build --stacktrace
通过终端构建时,我会获得更多信息:
:v14:processReleaseManifest
[/blahblah/project/v14/build/exploded-aar/blahblah/base/unspecified/AndroidManifest.xml:2] Main manifest has <uses-sdk android:targetSdkVersion='17'> but library uses targetSdkVersion='19'
:v14:processReleaseManifest FAILED
这是我的v14 AndroidManifest.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.v14">
<application />
</manifest>
(我的基础AndroidManifest.xml
文件几乎完全相同)
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example">
<application />
</manifest>
这个错误对我来说没什么意义。首先,我没有在我的四个不同AndroidManifest.xml
文件中的任何一个中指定版本级别(而是让我通过我的四个不同的build.gradle
文件继承这些值。)
其次,我没有“主要清单”。基本模块可能是我最接近的那个,所以v14模块到底是怎样的“主要清单”我觉得很混乱。
最后,如果这个项目设置不可行,那我很震惊。在Eclipse风格的项目中设置这个模块配置是非常简单的。这就是我几个月来一直在建立图书馆的方式。
顺便说一下,我的最终目标是将所有文件编译成单个.jar
文件,这是我当前的Eclipse风格项目可以做的。只是我试图完全迁移到gradle而不是被遗忘在沉没的船上......
有什么想法吗?如有必要,我可以发布各种gradle文件(build.gradle
,settings.gradle
...)。试着避免完全超载这篇文章。
在此帖子的开头添加了我的模块配置的屏幕截图。
答案 0 :(得分:0)
如果您根据Gradle plugin user guide使用口味:
defaultConfig
提供所有口味的基本配置 每种味道都可以覆盖任何价值。
例如,您可以在build.gradle文件中进行以下设置:
android {
...
defaultConfig {
...
compileSdkVersion 19
minSdkVersion 14
targetSdkVersion 19
}
productFlavors {
base {
compileSdkVersion 19
minSdkVersion 14
targetSdkVersion 19
}
factory {
compileSdkVersion 19
minSdkVersion 14
targetSdkVersion 19
}
v14 {
compileSdkVersion 17
minSdkVersion 14
targetSdkVersion 17
}
v18 {
compileSdkVersion 18
minSdkVersion 18
targetSdkVersion 18
}
}
}
此外,您无需在清单中设置包名称。您可以像下面这样设置它们:
android {
...
productFlavors {
base {
packageName "com.example"
...
}
v14 {
packageName "com.example.v14"
...
}
...
}
}