我正在构建一个需要带有2个变体的库的应用程序 - 模拟器和放大器。实际。
我的目标是创建构建任务,例如assembleSimulatorDebug& assembleDebug。 assembleSimulatorDebug将包含模拟器模块/库,assembleDebug将包含构建apk的实际模块。
我正在考虑在build.gradle的依赖项部分中使用if else块。我能有这样的东西吗?
我很新,从昨天开始尝试设置这样的东西。如果任何人都可以提供一些提示或链接,我可以获得一个想法来实现这一点,这将是有帮助的。
答案 0 :(得分:2)
<强>更新强> 找到另一个解决方这是我的另一个答案。
可以使用&#39; Flavor产品&#39; android gradle插件。您可以按产品风格拆分库实现。
初始要求&#39; com.android.tools.build:gradle:1.0.0&#39; , Android Studio 1.0.1 。
我创建了project at GitHub,因此您可以获得,运行和学习。
您还需要创建两种版本的应用和库。例如,normal
和simulator
应用程序build.gradle
apply plugin: 'com.android.application'
android {
lintOptions {
abortOnError false
}
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.tivogi.gradle"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
normal {
}
simulator {
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
normalCompile project(path: ':library', configuration: 'normalRelease')
simulatorCompile project(path: ':library', configuration: 'simulatorRelease')
}
图书馆build.gradle
apply plugin: 'com.android.library'
android {
publishNonDefault true
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
normal {
}
simulator {
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
}
<强>库:强>
productFlavors
分隔各种口味之间的实施(如果对此有疑问,请参阅我的sample project); 将publishNonDefault true
添加到其build.gradle
也可以发布库的所有变体。我们计划在使用正常的项目到项目依赖关系时允许这样做(如上所示),但由于Gradle的限制(我们正在努力修复这些),目前这是不可能的。 默认情况下不启用所有变体的发布。 启用它们:
android {
publishNonDefault true
}
<强>应用强>
normal
和simulator
种产品风格(productFlavors
); 将下一行添加到dependencies
部分
normalCompile project(path: ':library', configuration: 'normalRelease')
simulatorCompile project(path: ':library', configuration: 'simulatorRelease')
要创建对其他已发布工件的依赖关系,您需要指定要使用的工件:
依赖性{
flavor1Compile项目(路径:&#39;:lib1&#39;,配置:&#39; flavor1Release&#39;)
flavor2Compile项目(路径:&#39;:lib1&#39;,配置:&#39; flavor2Release&#39;)
}
在完成所有这些之后,您将能够构建2个应用程序变体:normal和simulator。
答案 1 :(得分:2)
找到2个库的解决方案,看起来更简单。它基于official guide
的下一个最后,与Build Types一样,Product Flavors可以拥有自己的依赖项。例如,如果使用各种口味生成基于广告的应用和付费应用,其中一种口味可能依赖于广告SDK,而另一种则不依赖。
依赖性{
flavor1Compile&#34; ...&#34;
}
因此,您可以创建2个单独的库并创建2种风格,例如,库library-normal
和library-simulator
,风味为normal
和simulator
。
申请build.gradle
apply plugin: 'com.android.application'
android {
lintOptions {
abortOnError false
}
compileSdkVersion 21
buildToolsVersion "21.1.1"
defaultConfig {
applicationId "com.tivogi.gradle"
minSdkVersion 15
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
normal {
}
simulator {
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:21.0.3'
normalCompile project(":library-normal")
simulatorCompile project(":library-simulator")
}
<强>应用强>
只将这些行添加到dependencies
;
normalCompile project(":library-normal")
simulatorCompile project(":library-simulator")
<强>库:强>
我在individual-libraries分支发布了此解决方案的示例项目。