我对如何正确执行此操作有一些疑问 - Flutter 团队关于使用 Flavors 的文档有些缺乏,到目前为止,教程和文章似乎都来自那些在了解它时发布的人。我很欣赏这里的努力,但也认识到知识是不完整的。
应用程序 ID 可以在多个位置设置,特别是在 AndroidManifest 和 build.gradle 文件中。
例子:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.app">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.INTERNET"/>
Run Code Online (Sandbox Code Playgroud)
例子:
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.domain.appname"
minSdkVersion 23
targetSdkVersion …Run Code Online (Sandbox Code Playgroud) build android-productflavors flutter android-build-flavors applicationid
我想为我的android项目设计两个自定义应用程序.自定义应用程序可以扩展应用程序.我希望我的发布版本有一个自定义应用程序,而调试版本则有另一个.LeakCanary网站在标题为" 自定义和使用无操作依赖 " 的部分中讨论了这一点.
我似乎无法弄清楚我将如何在androidManifest中声明另一个应用程序.现在我将它设置为使用这样的单个自定义应用程序:
public class MyFirstCustomApplication extends Application {
@Override public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何制作上述代码仅用于调试?
并且androidManifest覆盖看起来像这样:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:name="org.somesite.cool.MyFirstCustomApplication">
Run Code Online (Sandbox Code Playgroud)
我将如何发布另一个MySecondCustomApplication?
更新:关于在gradle中查看bulidTypes的建议想象我为我的调试应用程序覆盖做了以下结构:
[Project Root]
-[Module]
-src
-main
-ExampleApplication
-res
-debug
-DebugExampleApplication
-res
Run Code Online (Sandbox Code Playgroud)
所以,如果我正确理解buildTypes然后如果我只有一个主文件夹,它用于释放和调试(它的默认/后退)但如果我指定一个调试文件夹然后如果我运行任何调试风味我可能有像mockDebug,qaDebug等等,然后它将首先在调试文件夹中查找该文件,然后转到main如果找不到,那是正确的吗?
另外,那我将如何在我的清单中声明使用哪一个?gradle文件是什么样的?
在使用GCM,ContentProvider,AccountType时,如何配置项目以便能够在发布版本旁安装调试版本?(不使用口味)
我一直收到错误,例如:INSTALL_FAILED_CONFLICTING_PROVIDER或INSTALL_FAILED_DUPLICATE_PERMISSION
android android-gradle-plugin android-productflavors android-build-type android-variants
我的应用程序中有两种产品口味,即
flavorOne(src / flavorOne / java)和flavorTwo(src / flavorTwo / java)。Main(src / main / java)是目录形式,两种风格都使用这些类。我想开始活动的src / flavorTwo / JAVA / ActivityB的.java从活动中存在的src / main / JAVA / ActivityA。在运行flavourTwo时有效,但当我切换flavourOne时,它显示导入com.packagename.ActivityB错误。
+ App // module
|- src
|- main// shared srcDir
|- java
|- SharedActivity
+ flavorOne
|- java
|- FlavorOneActivity
+ flavorTwo
|- java
|- FlavorTwoActivity
Run Code Online (Sandbox Code Playgroud)
这是dir src / main / java / SharedActivity.java中的SharedActivity.java
package com.example.buildvariants;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import …Run Code Online (Sandbox Code Playgroud) android build build.gradle android-gradle-plugin android-productflavors
我正在创建一个桌面Java应用程序,并希望创建两个版本:免费和付费.差异主要在于包含哪些资源文件(在将来的日期,它可能涉及不同的代码,但现在不是).
我已经阅读了关于Android构建变体的内容,通过"产品风格"允许这种事情.但是,这似乎是该android插件独有的功能,显然在桌面上不可用.
是否有相当于这些产品的味道,不依赖于android插件?
如果它有帮助,我的最终目标是找到一种方法,我可以运行Gradle build任务并输出两个不同版本的应用程序,这是我对Android构建变体完成的内容的理解.
我已将我的项目配置为具有多种产品风格。我的模块中有以下代码build.gradle:
android {
// Rest of the configuration omitted for clarity
buildTypes {
debug {
// ...
}
release {
// ...
}
}
productFlavors {
paid
free
}
}
Run Code Online (Sandbox Code Playgroud)
如果我创建一个文件(任意文件:Java中,资源,...),在paid,free,debug或release,它是由Android工作室的认可,我可以在我的项目中使用它。
但是,如果在paidDebug(或类似文件夹)中创建了相同的文件,则Android Studio 无法识别该文件。我需要任何额外的配置才能工作吗?这不支持(还)吗?
我将如何只混淆一种味道。
不幸的是,风格 2 依赖于一个模块(jar),它使用了一些重复的类,由于它的设置方式,我无法混淆它。(第 3 方)所以希望跳过混淆味道。
我似乎无法在风味部分定义 minifyENabled false ,或将风味添加到构建部分。
请注意,实际上总共有 6 种口味。愿望是挑选应该混淆的口味
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
flavour1{
applicationId "uk.co.company.flavour1"
}
flavour2{
applicationId "uk.co.company.flavour2"
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在将一个非常旧的 Android 应用程序从 Eclipse 迁移到 Android Studio。
在我的应用程序的旧版本中,我能够使用 Ant 脚本创建一些“风味”。这个脚本的目的是用不同的包名和不同的资源(drawable 等)复制 Eclipse 项目。
我已将项目迁移到 Android Studio,删除了 Ant 脚本并创建了一些风格。
但是现在,我有一些问题需要反序列化 - 在新版本的应用程序中 - 在旧版本的应用程序中序列化的对象。
这里是 stackstrace 的一部分: Caused by: java.lang.ClassNotFoundException: com.company.app.flavor.bo.Player
在旧版本中,每种口味都有自己的包名:
com.company.appcom.company.app.flavor在这个新版本中,代码结构是com.company.app.flavor我和 Gradle 一起玩的,以产生applicationId对味道的好处。
因此,applicationIdfor 风格是正确的,但类的包名称似乎尊重项目结构,因此,我无法将带有包的原始对象反序列com.company.app.flavor.bo.Player化为 object com.company.app.bo.Player。
如果我用com.company.app.flavor它更改项目的结构,它将适用于风味,但不适用于带有applicationId com.company.app.
那么,有没有办法,使用 Gradle 或其他工具(proguard?)来更改applicationId和包名称的风味?
预先感谢您的帮助。
我有一个 RN 代码,我想在 Android 上有 2 种口味。这些口味的不同之处在于:
我在 app/build.gradle 文件中添加了 product flavors,并为它们中的每一个添加了一个目录 res & AndroidManifest.xml。
我特别使用了这个库这部分。并成功完成了前 2 项。至于applicationId,每当我更改 productFlavors 部分中的 applicationId 字段时,它都会给我这个错误:
`react native error: activity class {mainactivity} does not exist.`
Run Code Online (Sandbox Code Playgroud)
我使用这些命令来运行应用程序:
react-native run-android --variant flavortoneDebug
react-native run-android --variant flavorttwoDebug
Run Code Online (Sandbox Code Playgroud)
我试图更改每个风味的清单文件中的 package="" 字段,但它给了我这个错误:
Manifest merger failed : Overlay manifest:package attribute declared at
AndroidManifest.xml:2:11-38 value=(com.examle.flavorone)
has a different value=(com.examle.flavorone) declared in main manifest at AndroidManifest.xml:2:3-24
Suggestion: remove the overlay declaration at …Run Code Online (Sandbox Code Playgroud) android build.gradle android-productflavors react-native android-flavordimension
我想为调试和发布模式设置 crashlytics,但在 firebase 文档中找不到正确的信息。
目前该应用程序在一个项目中,并且只有一个用于调试和发布的 crashlytics。我无法使用与前一个应用程序相同的包创建另一个应用程序。另一种选择是让另一个项目与第一个项目具有相同的包,但由于 api 密钥和其他功能,我需要一个项目。
我有两个想法,但没有解决方案:
有没有人有一些提示可以帮助解决这个案例?
android ×8
gradle ×3
build ×2
build.gradle ×2
crashlytics ×1
firebase ×1
flutter ×1
java ×1
leakcanary ×1
proguard ×1
react-native ×1