我试图在单个gradle项目中配置两个Android应用程序模块。
应用程序应该完全不知道工具,而工具应该能够访问App的所有类和资源。
这个想法是将app作为一个Android应用程序和工具作为另一个Android应用程序"扩展"应用
关键是不应该触摸应用程序的代码,甚至不能触及gradle文件。
到目前为止我尝试了什么:
我定义了工具,具体取决于app,工具的build.gradle就是这个:
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "20.0.0"
defaultConfig {
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile project(':app')
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.0'
}
在工具清单中,我正在尝试启动应用程序的活动,但是当我运行工具时,结果就是这样:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tools/com.example.app.activities.WannaRunActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.app.activities.WannaRunActivity" on path: DexPathList[[zip file "/data/app/com.example.tools.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.tools, /system/lib]]
你会怎么做?
答案 0 :(得分:2)
似乎是ProductFlavors [1]的案例。
单个应用模块,在src/main
下包含您的所有“应用”功能,并为工具添加新的产品风格 - src/tools
。
然后,通过构建“工具”风格,您可以在添加“工具”功能的同时访问“app”中的功能。
productFlavors {
tools {
packageName "com.example.tools"
}
}
sourceSets {
tools.java.srcDirs = ['src/tools/java']
tools.resources.srcDirs = ['src/tools/resources']
}
运行工具构建时,工具源代码将添加到“app”代码中。如果需要,您还可以覆盖src/main
下的代码。
[1] android gradle文档 - http://tools.android.com/tech-docs/new-build-system/user-guide
[2] Build Variants文档 - http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants