带有两个Android应用程序模块的Gradle项目

时间:2014-12-18 09:47:43

标签: java android gradle

我试图在单个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]]

你会怎么做?

1 个答案:

答案 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