我在androidstudio中的应用程序上试验风味.我必须为这些口味编写不同的测试类,因为我有不同的类文件.但我想知道是否有任何选项可以为build.gradle中的每个flavor指定测试包.这是我的build.gradle供参考.我使用0.4.6版本的AndroidStudio.
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.1"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
testPackageName "com.example.tests"
}
productFlavors {
Paid {
packageName "com.example.paid"
}
Free {
packageName "com.example.free"
}
}
sourceSets {
main {
java.srcDirs = ['src/main/java']
res.srcDirs = ['src/main/res']
}
Paid {
java.srcDirs = ['src/Paid/java']
res.srcDirs = ['src/Paid/res']
}
Free {
java.srcDirs = ['src/Free/java']
res.srcDirs = ['src/Free/res']
}
}
signingConfigs {
releaseConfig {
storeFile file('filename');
storePassword('filepwd');
keyAlias "aliasname";
keyPassword "aliaspassword";
}
}
buildTypes {
release {
runProguard …Run Code Online (Sandbox Code Playgroud) android gradle android-studio android-gradle-plugin android-productflavors
这是对这篇文章帮助我的答案的延续
我们可以添加字符串资源,如下所示build.gradle:
Run Code Online (Sandbox Code Playgroud)productFlavors { main{ resValue "string", "app_name", "InTouch Messenger" } googlePlay{ resValue "string", "app_name", "InTouch Messenger: GPE Edition" } }
它的作用就像一个魅力,并且每个风格都有不同的app名称.(app_name从strings.xml文件中删除原始字符串资源.
但是,我们如何为这个添加的字符串资源添加本地化字符串build.gradle?
我们可以通过指定区域设置的附加参数吗?
或者
可以使用gradle任务来完成它?
注意:我不能这样做strings.xml(因为我的项目结构的几种方式不可行)
android android-resources android-studio android-gradle-plugin android-productflavors
我试图在我的productFlavor块中设置buildConfigField,然后在我的gradle构建文件中的其他位置引用该字段,以便在构造apk的名称时可以使用此值.
例如
productFlavors{
flavor1{
buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor1"'
}
flavor2{
buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor2"'
}
Run Code Online (Sandbox Code Playgroud)
如何在build.gradle脚本中的其他位置访问APP_FLAVOR_NAME?
我也在努力弄清楚如何在buildscript中引用flavor名称本身作为构建apk名称的另一个选项.我怎么能这样做?
我的问题是,在我向我的项目添加了flavor之后,包名称与实际源不同的风味似乎在访问文件时遇到了问题 android_res/drawable.
更具体地说,我有一个调用以下图像的html视图.
<img src="file:///android_res/drawable/image.png">
Run Code Online (Sandbox Code Playgroud)
该图像显示在生产flavor中,其包名称与java文件的目录相同,但它不适用于beta版本:
productFlavors {
production {
packageName "com.company.myapp"
}
beta {
packageName "com.company.beta"
}
}
Run Code Online (Sandbox Code Playgroud)
其中包含java文件的实际目录
java/com/company/myapp
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为资源甚至不在该文件夹中.
我有一个问题facebook SDK version 4.0.0- >我正在尝试设置我的应用程序的两种不同风格 - 分期和制作.
一切都像预期的那样好,但是INSTALL_FAILED_CONFLICTING_PROVIDER当我尝试安装一个应用程序时,如果另一个应用已经在设备上,我会收到错误.
我研究了它,尝试了几种解决方案但不幸的是,因为这是第三方提供商,我什么都没做.
也许有人遇到类似的问题,并找到了解决方案?我会很高兴任何帮助,链接,文件等.
以下是我在清单中定义提供程序的方式,这正是facebook文档告诉我应该如何完成的
<provider android:authorities="com.facebook.app.FacebookContentProvider{staging or production fb app id depending on flavour}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true" />
Run Code Online (Sandbox Code Playgroud) android facebook android-contentprovider android-productflavors
有没有办法在Android Studio(build.gradle)中通过多种口味编译依赖项?
我有2个flavorGroups,每2个变种.在4种可能的组合中,我希望能够依赖于lib,只要我是最新的和免费的.latestCompile或freeCompile有效,但latestFreeCompile没有.这是我的build.gradle的相关部分:
android {
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
versionCode 15
versionName "1.9." + versionCode
}
flavorGroups 'sdk', 'cost'
productFlavors {
latest {
flavorGroup 'sdk'
minSdkVersion 8
}
sdk7 {
flavorGroup 'sdk'
minSdkVersion 7
versionName android.defaultConfig.versionName + ".sdk7"
}
free {
flavorGroup 'cost'
}
pro {
flavorGroup 'cost'
}
}
}
dependencies {
// this works:
freeCompile files('libs/StartAppInApp-2.2.1.jar')
// and I would like something like this:
latestFreeCompile 'com.google.android.gms:play-services:4.1.32' // minSdkVersion:8
}
Run Code Online (Sandbox Code Playgroud)
如果我愿意的话:
latestCompile 'com.google.android.gms:play-services:4.1.32'
Run Code Online (Sandbox Code Playgroud)
那么它也将被包含在latestPro中(不需要),如果我使用:
freeCompile 'com.google.android.gms:play-services:4.1.32'
Run Code Online (Sandbox Code Playgroud)
然后它也将包含在sdk7Free中(虽然它需要SDK …
dependencies android gradle android-gradle-plugin android-productflavors
我有问题,当我还在添加新口味时,需要花费越来越多的时间来构建.我这样添加:
productFlavors {
okapps {
applicationId = 'cz.anywhere.okapps'
signingConfig = AdamSigningVariable
versionCode = 41
versionName = "3.0.1"
android.sourceSets {
okapps.res.srcDirs = ['src/adam_okapps_resources/res', 'src/okapps/res']
}
}
...
...
}
Run Code Online (Sandbox Code Playgroud)
当我评论所有其他风味并且只有一个未被注释并构建时,大约需要10秒.但是当我构建所有(大约180种口味)时,它需要将近5分钟.
参考这个答案.是否可以像链接答案中的那个一样创建productFlavors和sourceSets使用复制构造函数initWith.那一个很有用buildTypes.
因为buildTypes它是这样做的:
debugfree.initWith(buildTypes.debug)
Run Code Online (Sandbox Code Playgroud)
这是可能的productFlavors和sourceSets呢?
android gradle android-productflavors android-build-type android-sourcesets
我正在研究多种口味app.(下面的gradle文件)
它使用一个名为的库tracker,遵循相同的风格internal和external
现在,对于棘手的部分,来一个名为的新模块feature,这个没有味道,但它需要trackeras依赖
app.gradle:
android {
buildTypes {
debug {
}
release {
}
}
flavorDimensions "target"
productFlavors {
internal {
dimension "target"
}
external {
dimension "target"
}
}
}
Run Code Online (Sandbox Code Playgroud)
tracker.gradle:
android {
publishNonDefault true
buildTypes {
release {
}
debug {
}
}
flavorDimensions 'target'
productFlavors {
internal {
dimension "target"
}
external {
dimension "target"
}
}
}
Run Code Online (Sandbox Code Playgroud)
feature.gradle:
android {
compileSdkVersion rootProject.ext.compileSdkVersion
defaultConfig {
compileSdkVersion …Run Code Online (Sandbox Code Playgroud) android gradle build.gradle android-productflavors android-build-flavors
我有GCM示例android gradle项目.它运行良好,当我添加2种口味时,推送通知停止工作.我的编译清单(取自app\build\intermediates\manifests\ex\debug)文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.flavor.app"
<uses-permission android:name="com.flavor.app.permission.C2D_MESSAGE" />
<permission
android:name="com.flavor.app.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.flavor.app" />
</intent-filter>
</receiver>
<service android:name="com.ex.app.GCMIntentService" />
<service
android:name="com.ex.app.AppLocationService"
class=".AppLocationService" >
<intent-filter>
<action
android:name=".AppLocationService"
android:value=".AppLocationService" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这个问题?请帮忙.
UPD1.我正在使用gradle v.0.12 +.我认为我的最终清单文件看起来不错,GCMRegistrar.checkManifest(this); - 没有错误,但GCMRegistrar.isRegistered(this)总是假的.=(
UPD2.我的第一个带有原始包名称的flavor项目(作为main分支中的项目)运行良好,但是更改包的第二个风格不起作用(pushId仍然是空的),但是在清单文件中,所有的permitions都是正确的.
java android gradle google-cloud-messaging android-productflavors