标签: android-productflavors

找不到包名称(Google Analytics)的匹配客户端 - 多个productFlavors和buildTypes

语境:

我正在尝试为我的应用设置Google Analytics.(有4个自定义buildTypes和多个productFlavors)

当我选择Build Variant具有applicationId设置的com.my.app.package.name(生成时使用的包名称)时,它工作正常google-services.json.但是,我的其他风格有不同的applicationIds.

我按照官方偏离进行设置.

选择任何其他构建变体时Build Variants Tab(我有一个不同的applicationId(包名)如下所示的错误如下:

错误:任务':app:processAllcategoriesDebugfreeGoogleServices'的执行失败.

找不到包名称'com.my.app.package.name.debug'的匹配客户端

错误消息的说明:

在上面的错误消息中的任务名称Debugfree是我的自定义buildType,Allcategories是我的一个productFlavors.

我理解错误并知道包名称与生成json时使用的不同,但这就是我想要解决的问题.

问题:

现在,google-services.json驻留在app文件夹中,因此我无法通过将它们放入特定于风味的源集文件夹中来将它们分离出来.

问题:

  1. 我的自定义byildType调试后缀.debugapplicationId(包名).有没有办法让它可以使用google-services.json我的发布applicationId(即没有后缀.debug)
  2. 有没有办法在同一个google-services.json文件中配置多个产品风格,而不使用单独的文件和任务将所需文件复制到app文件夹.我知道这是可以做到用task作为中提到的这个帖子.是否有更简单的方法可以根据gradle配置选择一个文件或选择正确的文件?
  3. 我看到package_name字段中google-services.json有包名com.my.app.package.name.我可以手动添加多个包名称以适用于所有构建变体吗?如果是的话,怎么做?在文档中找不到任何说明.

android google-analytics gradle android-studio android-productflavors

324
推荐指数
20
解决办法
32万
查看次数

Gradle:为库的特定风格添加依赖项

我有一个图书馆项目和一个应用程序.我想为图书馆和应用程序提供2种产品口味(商店,开发).当我为应用程序构建商店风味时,我想使用库中的商店风味.此外,当我为应用程序构建dev风格时,我想使用库中的dev风格.我尝试为库和应用程序设置相同的产品风格,但它不起作用.

这是我的配置:

图书馆

apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "ro.amarkovits.graddletest.lib"
        minSdkVersion 14
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors{
        store{

        }
        dev{

        }
    }

}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
Run Code Online (Sandbox Code Playgroud)

我有这些文件:src/main/res/values/strings.xml和src/store/res/values/strings.xml

应用

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'
    defaultConfig {
        applicationId 'ro.amarkovits.mymodule.app'
        minSdkVersion 14 …
Run Code Online (Sandbox Code Playgroud)

android gradle library-project android-productflavors

41
推荐指数
2
解决办法
2万
查看次数

如何自定义产品口味的APK文件名?

我在脚本中自定义Android应用程序的APK文件的名称,build.gradle如下所示:

android {
    defaultConfig {
        project.ext.set("archivesBaseName", "MyApplication");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用产品口味:

android {
    productFlavors {
        green {
            applicationId "com.example.myapplication.green"
        }

        blue {
            applicationId "com.example.myapplication.blue"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法自定义每个APK的名称?我尝试了archiveBaseNamebaseName没有成功.最后,我想提出以下文件:

build/outputs/apk/Blue-debug-1.2.1.apk
build/outputs/apk/Blue-debug-unaligned.apk
build/outputs/apk/Blue-release-1.2.1.apk
build/outputs/apk/Blue-release-unaligned.apk
build/outputs/apk/Green-debug-1.2.1.apk
build/outputs/apk/Green-debug-unaligned.apk
build/outputs/apk/Green-release-1.2.1.apk
build/outputs/apk/Green-release-unaligned.apk
Run Code Online (Sandbox Code Playgroud)

android gradle build.gradle android-gradle-plugin android-productflavors

38
推荐指数
5
解决办法
2万
查看次数

如何将插件仅应用于gradle中的一种风格?

我有一个多味道,多构建类型的android项目,我想要集成NewRelic插件.但我必须只为其中一个客户应用它,因此只适用于一种产品风味.
NewRelic使用检测,如果我在那里应用插件,插件会生成其他风格的代码,这是我们不允许的.

所以我的问题是:如何使用apply plugin: somethinggradle文件中的命令仅应用于我的一种口味?

android gradle newrelic android-studio android-productflavors

38
推荐指数
5
解决办法
5125
查看次数

如何在Android studio中使用具有不同应用名称的风味?

在我的app级build.gradle中,我有以下几种风格:

productFlavors {
    originalFlavour{
    }

    freeFlavour{
    }
}
Run Code Online (Sandbox Code Playgroud)

事情是建立两种口味我得到相同的应用程序名称.相反,我希望每种口味都有不同的应用程序名称.只需添加后缀即可.希望有人可以帮助我.

提前致谢

编辑:

应用程序/ SRC /主/ AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="z.fncapps.etsiipod"  >

    <uses-permission
        android:name="android.permission.CALL_PHONE"
        android:required="false" />

    <uses-feature
        android:name="android.hardware.telephony"
        android:required="false"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <!-- actvities declared here -->
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

应用程序/ SRC/freeFlavour/AndroidManifest.xml中

<uses-permission 
    android:name="android.permission.CALL_PHONE"
    android:required="false" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-feature
   android:name="android.hardware.telephony"
   android:required="false" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <!-- actvities declared here -->
</application>
Run Code Online (Sandbox Code Playgroud)

android android-studio build.gradle android-gradle-plugin android-productflavors

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

产品风味:找到重复的类

我有一个非常愚蠢的问题,但我几小时后就坐在我的应用程序前面,但我无法理解问题所在.

我有一个Android应用程序(用kotlin编写),我想制作两种产品风格并覆盖产品风格的类/文件:

所以我的gradle脚本是这样的:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'


android {
  ...
  productFlavors {
    foo {
      applicationId "com.foo"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的文件结构如下:

 - src
    - androidTest
    - foo
      - java
        - com
          - example
            - Bar.kt
    - main
      - java
        - com
          - example
            - Bar.kt
    - test
Run Code Online (Sandbox Code Playgroud)

所以基本上我想Bar.ktfoo产品风格中覆盖文件,但不知何故它不起作用:它说类Bar是重复的.

任何提示?

android kotlin android-gradle-plugin android-productflavors

34
推荐指数
3
解决办法
2万
查看次数

将Android库(aar)发布到Bintray,并选择其他风味

我是juste 在我的项目中添加了一些flavors(或者productFlavors如果你想要的话).

事实是,当我将库发布到bintray时,所有的风格都被上传(这很棒),但我无法使用它们.使用该插件是官方的一个在这里.

上传的aar:

 androidsdk-0.0.4-fullRelease.aar
 androidsdk-0.0.4-fullDebug.aar
 androidsdk-0.0.4-lightRelease.aar
 androidsdk-0.0.4-lightDebug.aar
Run Code Online (Sandbox Code Playgroud)

如您所知,它fullRelease被命名为classifier,参见文档章节23.4.1.3.

我正在寻找一种解决方案来选择我要上传的口味.

我已经看过bintray的例子(这里这里)和这个,还有其他例子,但我仍然卡住了.

这是我目前的脚本:

apply plugin: 'com.android.library'
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

buildscript {
    repositories {
        jcenter()
    }
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 64
        versionName "0.0.4"
    }

    publishNonDefault true

    productFlavors {
        full {
        }
        light {
        }
    }
}

dependencies …
Run Code Online (Sandbox Code Playgroud)

android bintray android-gradle-plugin android-productflavors

32
推荐指数
2
解决办法
3427
查看次数

Crashlytics(Fabric)针对应用程序变体(构建类型,产品风格)分离组织

这是一个自我回答的问题,分享我的知识.

我有一个具有多种产品口味的项目,我希望使用不同的组织为每种产品风格整合Fabric.

我尝试使用Android Studio Fabric插件集成Fabric.它补充道

<meta-data
    android:name="io.fabric.ApiKey"
    android:value="DEFAULT_ORGANIZATION_API_KEY" />
Run Code Online (Sandbox Code Playgroud)

进入AndroidManifest.xmlmain源集合.

我决定在应用程序变体特定的源集中重写此条目:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application>
        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="SECOND_ORGANIZATION_API_KEY"
            tools:replace="android:value" />
    </application>
</manifest>
Run Code Online (Sandbox Code Playgroud)

然后我发现Fabric Gradle插件crashlytics.properties在构建期间生成带有fabric api secret(AKA build secret)的文件,我应该将此文件包含在源代码控制中.但是每次构建特定的应用程序变体时都会覆盖此文件,因为api secret对于每个应用程序都是唯一的.

如何针对每种应用程序变体使用单独的组织集成Fabric?

android gradle crashlytics android-productflavors twitter-fabric

32
推荐指数
2
解决办法
6673
查看次数

Android磨损项目有3种风格,3种buildTypes和2种applicationIdSuffixes

在尝试将wearApp flavor和buildTypes与applicationIdSuffixes结合后构建我的项目时,我收到以下错误消息:

Error:Execution failed for task ':app:handleFirstCustomerTestMicroApk'.
> The main and the micro apps do not have the same package name.
Run Code Online (Sandbox Code Playgroud)

从我的app/build.gradle:

buildTypes {
    debug {
        applicationIdSuffix '.debug'
        debuggable true
        embedMicroApp = true
    }
    customerTest {
        applicationIdSuffix '.customertest'
        debuggable true
        embedMicroApp = true
    }
    release {
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        minifyEnabled true
        embedMicroApp = true
    }
}

productFlavors {
    first {
        applicationId 'com.my.app.first'
    }
    second {
        applicationId 'com.my.app.second'
    }
    third {
        applicationId 'com.my.app.third'
    }
}

dependencies {
    firstWearApp project(path: ':wear', configuration: …
Run Code Online (Sandbox Code Playgroud)

android build.gradle android-productflavors android-build-type wear-os

30
推荐指数
1
解决办法
1408
查看次数

多个dex文件定义<my package>/BuildConfig,找不到原因:

我正在使用新的gradle构建系统,我遇到了以下问题:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/kibo/mobi/BuildConfig;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)
Run Code Online (Sandbox Code Playgroud)

打印依赖项我什么都看不到,这里是:

 firstDebugCompile - ## Internal use, do not manually configure ##
 \--- KiboGradle:KiboSDK:unspecified
 +--- KiboGradle:TextInputAPI:unspecified
 +--- KiboGradle:VoiceImeUtils:unspecified
 +--- com.google.android.gms:play-services:5.0.77
 |    \--- com.android.support:support-v4:19.1.0
 +--- com.squareup.picasso:picasso:2.3.2
 +--- com.google.code.gson:gson:2.2.4
 \--- com.crittercism:crittercism-android-agent:4.5.1
Run Code Online (Sandbox Code Playgroud)

我试图验证问题不是重复的支持库,所以我尝试添加:

compile ('com.google.android.gms:play-services:5.0.77'){
    exclude module: 'support-v4'
}
Run Code Online (Sandbox Code Playgroud)

这导致一些support-v4库类无法找到的错误,因此这个库不能从任何其他位置编译.

有一件事我脑子里想的,可能会导致这个问题是我使用的事实Flavorsfeautre在oreder创建我有不同的国土资源文件的应用程序的多个版本.

当我查看错误中的文件时,我看到了:

**
* Automatically generated file. DO NOT MODIFY …
Run Code Online (Sandbox Code Playgroud)

java android gradle dex android-productflavors

29
推荐指数
4
解决办法
3万
查看次数