信息
所以我的项目结构如下:
项目根目录:
| Resources-module(使用packagename:com.derk.application.resources)
- + src
--- +主要 ----- + res
|核心模块(使用packagename:com.derk.application)
- + src
--- +主要 ----- + src
|品牌模块(使用客户域的任何包名称)
Resources-module包含res文件 Core包含一个git-module,其中包含我们不断更新的代码库代码 Brand包含build.gradle,我在其中设置客户的包名,并将main / res目录绑定到资源模块main / res,然后将main / src绑定到core-module main / src文件夹。
像这样:
android.sourceSets.main {
manifest.srcFile "src/main/AndroidManifest.xml"
res.srcDirs = ["$rootDir/resources-module/src/main/res"]
java.srcDirs = ["$rootDir/core-module/src/main/java", "src/main/java"]
}
}
我不希望在任何情况下更改Core-module源代码而不将其推送到主存储库,meaing我只对使用core-module的所有项目进行全局更改/修复。这就是我尝试这种结构的原因。
核心模块中的源文件将加载导入
import com.derk.application.resources.R;
import com.derk.application.resources.BuildConfig;
从gradle / idea
处理资源生成的内容由于Brand-module是由于包名更改所致,我必须使用某种中间模块来保存R和BuildConfig以便于部署,因此核心源确实从未进行过本地修改。
当我尝试为品牌模块刷新gradle时,我没有遇到任何问题,当我检查时,android studio似乎在com.derk.application.resources中找到R.java和BuildConfig.java就好了在Android Studio中链接
无论其
当我尝试运行Brand-module时,我得到:
"Execution failed for task ':core-module:compileReleaseJava'."
现在它反过来告诉我:
Error:(20, 39) error: package com.derk.application.resources does not exist
甚至以为我已经添加了
dependencies {
compile project(':resources-module')
}
到core-module的build.gradle。
所以问题是:
如何设置gradle来处理这种跨模块依赖?
请记住,我不希望为我设置的每个新项目更改核心模块导入的包名,因为我们对用于多个项目的gitmodule进行了本地更改。
/ PS。
目前我可以毫无问题地运行模块资源 - 模块并让应用程序运行,并为其选择了静态包名称。但这也是问题,我想保持静态,因此这就是我引入第三个模块的原因。
答案 0 :(得分:0)
你以错误的方式做到了。您正在尝试实现的是实现一个普通的库模块(您为每个客户使用)。然后,您可以从使用共享模块的类型应用程序创建新模块。在这种情况下,您不需要乱用共享模块的路径。
如果您的共享模块位于项目根目录以外的其他目录中,则可以使用此settings.gradle:
include ':CustomerX', ':SharedModule'
project(':SharedModule').projectDir = new File('../../some/where/else')
如果没有,你可以省略最后一行。
当你保留旧的目录结构时,你应该尝试使用这个build.gradle:
apply plugin: 'com.android.library'
android {
compileSdkVersion 9
buildToolsVersion '21.0.1'
defaultConfig {
minSdkVersion 9
targetSdkVersion 21
}
sourceSets {
main {
assets.srcDirs = ['assets']
res.srcDirs = ['res']
aidl.srcDirs = ['src']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
java.srcDirs = ['src']
manifest.srcFile 'AndroidManifest.xml'
}
}
}
dependencies {
// just as example
compile 'com.android.support:support-v4:21.0.2'
}
您的客户build.gradle应该看起来像像这样:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion '21.0.1'
defaultConfig {
minSdkVersion 9
targetSdkVersion 21
signingConfigs {
release {
storeFile file("your.keystore")
storePassword 'pwd1'
keyAlias "alias"
keyPassword 'pwd2'
}
}
buildTypes {
debug {
debuggable true
minifyEnabled false
shrinkResources false
}
release {
debuggable false
jniDebuggable false
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dependencies {
// dependencies of the main project
compile 'com.android.support:support-v4:21.0.0'
compile 'com.android.support:appcompat-v7:21.0.0'
compile project(':SharedModule')
}