语境:
我正在尝试为我的应用设置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文件夹中,因此我无法通过将它们放入特定于风味的源集文件夹中来将它们分离出来.
问题:
byildType调试后缀.debug为applicationId(包名).有没有办法让它可以使用google-services.json我的发布applicationId(即没有后缀.debug)google-services.json文件中配置多个产品风格,而不使用单独的文件和任务将所需文件复制到app文件夹.我知道这是可以做到用task作为中提到的这个帖子.是否有更简单的方法可以根据gradle配置选择一个文件或选择正确的文件?package_name字段中google-services.json有包名com.my.app.package.name.我可以手动添加多个包名称以适用于所有构建变体吗?如果是的话,怎么做?在文档中找不到任何说明.android google-analytics gradle android-studio android-productflavors
我有一个图书馆项目和一个应用程序.我想为图书馆和应用程序提供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应用程序的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的名称?我尝试了archiveBaseName和baseName没有成功.最后,我想提出以下文件:
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
我有一个多味道,多构建类型的android项目,我想要集成NewRelic插件.但我必须只为其中一个客户应用它,因此只适用于一种产品风味.
NewRelic使用检测,如果我在那里应用插件,插件会生成其他风格的代码,这是我们不允许的.
所以我的问题是:如何使用apply plugin: somethinggradle文件中的命令仅应用于我的一种口味?
android gradle newrelic android-studio android-productflavors
在我的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
我有一个非常愚蠢的问题,但我几小时后就坐在我的应用程序前面,但我无法理解问题所在.
我有一个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.kt在foo产品风格中覆盖文件,但不知何故它不起作用:它说类Bar是重复的.
任何提示?
我是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
这是一个自我回答的问题,分享我的知识.
我有一个具有多种产品口味的项目,我希望使用不同的组织为每种产品风格整合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.xml的main源集合.
我决定在应用程序变体特定的源集中重写此条目:
<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
在尝试将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
我正在使用新的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) android ×10
gradle ×6
build.gradle ×3
bintray ×1
crashlytics ×1
dex ×1
java ×1
kotlin ×1
newrelic ×1
wear-os ×1