'provided' 个子项目与 android gradle 的用法

Usage of 'provided' sub-projects with android gradle

我有一个带有子项目的项目,它应该只在 编译时 类路径中。

root-project
|- classic-subproject
`- compile-time-subproject

根项目使用

[...]
apply plugin: 'com.android.application'
dependencies {
    [...]
    compile project(':classic-subproject')
    provided project(':compile-time-subproject')
}
android {
    [...]
}

两个子项目都使用

[...]
apply plugin: 'com.android.library'
android {
    [...]
}

我使用 gradle 2.1 和 android-gradle 0.14.4.

根据我的理解,给定的配置应该在编译时将 compile-time-subproject 放在类路径中,而不应该放在生成的 apk 中。但是我注意到它在运行时也可用(= 在 apk 中)。

这是 android-gradle 的错误还是我的配置有问题?

显然,要按提供的方式使用 android 库并不容易。但是 java 可以按提供的方式提供库。

只要您在编译插件时只希望 Android 标准库位于您的类路径中并且不需要资源或 AndroidManifest.xml 处理,您可以将您的库设为 java项目使用以下

apply plugin: 'java'

def sdkVer = 23
def sdkDir = System.env.ANDROID_HOME
if (!sdkDir) {
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    sdkDir = properties.getProperty('sdk.dir')
}

sourceSets.main.compileClasspath += project.rootProject.files("$sdkDir/platforms/android-$sdkVer/android.jar")