标签: android-productflavors

在Android Studio中测试不同风格的包

我在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

13
推荐指数
1
解决办法
1万
查看次数

使用"resValue"本地化通过build.gradle添加的字符串资源

这是对这篇文章帮助我的答案的延续

我们可以添加字符串资源,如下所示build.gradle:

productFlavors {
    main{
        resValue "string", "app_name", "InTouch Messenger"
    }

    googlePlay{
        resValue "string", "app_name", "InTouch Messenger: GPE Edition"
    }
}
Run Code Online (Sandbox Code Playgroud)

它的作用就像一个魅力,并且每个风格都有不同的app名称.(app_namestrings.xml文件中删除原始字符串资源.

但是,我们如何为这个添加的字符串资源添加本地化字符串build.gradle

我们可以通过指定区域设置的附加参数吗? 或者 可以使用gradle任务来完成它?

注意:我不能这样做strings.xml(因为我的项目结构的几种方式不可行)

android android-resources android-studio android-gradle-plugin android-productflavors

13
推荐指数
2
解决办法
6333
查看次数

如何在gradle构建文件中的其他位置访问buildConfigField

我试图在我的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名称的另一个选项.我怎么能这样做?

android gradle android-productflavors

12
推荐指数
1
解决办法
5218
查看次数

file:/// android_res/drawable在使用flavor与其他包名称时不起作用

我的问题是,在我向我的项目添加了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)

这很奇怪,因为资源甚至不在该文件夹中.

android gradle android-webview android-productflavors

12
推荐指数
1
解决办法
2212
查看次数

冲突的内容提供商facebook SDK

我有一个问题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

12
推荐指数
1
解决办法
1053
查看次数

gradle中的多风格编译依赖项

有没有办法在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

11
推荐指数
2
解决办法
5375
查看次数

构建许多产品口味太慢了

我有问题,当我还在添加新口味时,需要花费越来越多的时间来构建.我这样添加:

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分钟.

performance android-studio android-productflavors

11
推荐指数
1
解决办法
811
查看次数

使用"initWith"为"productFlavors"和"sourceSets"复制构造函数

参考这个答案.是否可以像链接答案中的那个一样创建productFlavorssourceSets使用复制构造函数initWith.那一个很有用buildTypes.

因为buildTypes它是这样做的:

debugfree.initWith(buildTypes.debug)
Run Code Online (Sandbox Code Playgroud)

这是可能的productFlavorssourceSets呢?

android gradle android-productflavors android-build-type android-sourcesets

11
推荐指数
0
解决办法
282
查看次数

基于Gradle中多风味库的单味模块

我正在研究多种口味app.(下面的gradle文件)

它使用一个名为的库tracker,遵循相同的风格internalexternal

现在,对于棘手的部分,来一个名为的新模块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

11
推荐指数
1
解决办法
2325
查看次数

具有产品风味的Android GCM

我有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

10
推荐指数
2
解决办法
3284
查看次数