我正在开发一个Android库项目,在默认的src/main/AndroidManifest.xml中,MainActivity是启动器活动.
为了别的原因,我创造了产品口味.是的,如果我想在不同的产品口味中触发/显示不同的活动炎,它是完美的.不过,我想保持默认的启动活动从的src/main /文件夹,而登录其他口味的活动为新的发射活动.因此,对于不同的产品风格,我可以有不同的启动器活动,从中我仍然可以在src/main /中启动原始的"启动器"活动.
有人可以告诉我如何实现这一目标吗?非常感谢.
笔记:
if (BuildConfig.FLAVOR.equals("flavorName"))不希望向原始启动器活动添加代码.因为我不想从别人那里修改生产代码(这是一个库项目).
我试过manifestmerger和tools:replace,但好像它不工作intent-filter(我注意到,对于意图过滤器的元素融合政策总是).
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
如果这可能有效,请您指导我如何使其工作?谢谢.
android android-manifest android-intent android-productflavors
我有一个应用程序的两个维度,然后调用绿色和蓝色.只有这两个维度,但无限数量的产品口味.这是我在gradle中设置它的方式
flavorDimensions "green", "blue"
productFlavors {
one {
applicationId "com.app.green.one"
versionCode 1
versionName "1.0.0.1";
flavorDimension = "green"
}
two {
applicationId "com.app.blue.two"
versionCode 6
versionName "1.0.1";
flavorDimension = "blue"
}
}
Run Code Online (Sandbox Code Playgroud)
但是在我同步gradle之后,在构建变体选项卡中,我看到的是oneTwoDebug和oneTwoRelease,我应该看到greenOneDebug greenOneRelease,blueTwoDebug,blueTwoRelease
从理论上讲,我想将它扩展为类似的东西
one {
applicationId "com.app.green.one"
versionCode 1
versionName "1.0.0.1";
flavorDimension = "green"
}
two {
applicationId "com.app.blue.two"
versionCode 6
versionName "1.0.1";
flavorDimension = "blue"
}
three {
applicationId "com.app.green.three"
versionCode 1
versionName "1.0.0.1";
flavorDimension = "green"
}
four {
applicationId "com.app.blue.four"
versionCode 6
versionName "1.0.1";
flavorDimension = …Run Code Online (Sandbox Code Playgroud) gradle android-studio build.gradle android-gradle-plugin android-productflavors
我正在使用Gradle作为其构建系统的Android应用程序.
我的目标是使用值(包名称)作为applicationId:
productFlavors {
orange {
applicationId "com.fruits.android.orange"
// ...
Run Code Online (Sandbox Code Playgroud)
但也要通过它来公开它,BuildConfig以便Java代码可以访问它.
此访问必须来自外部风格(即,应用程序的免费版本需要知道付费版本的软件包名称,以便它可以提示用户在Play商店中进行升级).
所以我想做那样的事情:
productFlavors {
orange {
applicationId orangeProPackage
// ...
buildConfigField 'String', 'ORANGE_PRO_PACKAGE', "$orangeProPackage" // ?
Run Code Online (Sandbox Code Playgroud)
只有我不确定如何定义,orangeProPackage以便它在整个build.gradle中可见,并且不会破坏脚本.
因为有几种不同的味道,最好是我能以某种方式将所有这些常量分组(我猜?):
def proPackages = [
orange: "..."
apple: "..."
banana: "..."
]
Run Code Online (Sandbox Code Playgroud)
然后以干净和描述性的方式引用它们等proPackages.orange.
问题是,如何实现这一目标?
这不是重复的是否可以在Gradle中声明一个可用于Java的变量?
我已经看到了这个问题(以及其他一些问题).我知道如何声明buildConfigFields,我已经有很多了.我的问题是重用与a buildConfigField 和 applicationId.相同的价值.
我试图定义一个buildConfigVariable取决于香精 + buildType.理想情况下,这就是我想要的
productFlavors {
strawberry {
buildConfigField "String", "WS_API_KEY", name + variant.buildType.name
}
... more flavors ..
}
Run Code Online (Sandbox Code Playgroud)
name确实包含"strawberry",但我不知道是否可以访问variant的buildType.
放置在Android闭包之外我可以访问BuildType和变体,但后来我无法调用buildConfigField
android.applicationVariants.all { variant ->
println "****************************"
println "variant: ${variant.name}"
println "flavor: ${variant.flavorName}"
println "****************************"
if (variant.buildType.name == 'release') {
if (variant.flavorName == 'strawberry') {
buildConfigField "String", "WS_API_KEY", '"strawberry_release"'
} else {
buildConfigField "String", "WS_API_KEY", '"chocolate_release"'
}
} else if(variant.buildType.name == 'debug') {
if …Run Code Online (Sandbox Code Playgroud) 处理多个源集重构问题的好方法是什么?例如,不同的风格 - 或现在单元测试和集成测试.您只能有一个被认为是重命名的活动源集 - 因此其他源集最终可能会被破坏.你有什么策略来解决这个问题?也许有一个我缺少的帮助插件 - 或者其他一些可能有帮助的技巧.
在Android Studio中,可以有不同的生成类型,每一种都有自己的配置,类似于产品的味道(如图所示这里)
我希望每次我的应用程序安装在某个地方时,我都会立即知道它的类型 - 发布或调试,只需查看它即可.
为此,我想我可以使用build.gradle文件:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
Run Code Online (Sandbox Code Playgroud)
事情是,我不知道该放什么.我希望应用程序名称不同(并且在字符串文件中有字符串,因为它已被翻译),并且我想将应用程序中某些内容的样式设置为不同(例如,操作栏的颜色) .
我发现我可以使用"resValue"(在这里找到它),但由于某种原因,无论我做什么,它都无法编译:
如何为构建类型使用不同的资源值,即使它们已经存在?
android android-resources android-studio android-productflavors android-build-type
我想根据http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits根据CPU ABI进行APK拆分,但是我想将APK拆分为一个某些产品的味道.
所以我的build.gradle文件有以下产品风格plain和market.实际上我想在构建market风味时执行APK拆分.
android {
productFlavors {
plain {
}
market {
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'x86', 'mips'
universalApk true
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当我调用gradle assemblePlainDebug和assembleMarketDebug,他们都产生了多个APK.上面的配置有问题吗?
我正在使用com.android.tools.build:gradle:1.2.3.
我正在使用Android Studio(v 2.1,gradle plugin v 2.1.0)开发Android应用程序.我的应用程序有各种版本,它们共享许多通用代码,所以我决定使用flavor大小和产品风格来定制代码和资源的时间和地点.只要我只有两个风味尺寸,这就行了罚款.举个例子,我app.gradle是
…
flavorDimensions "fruit", "color"
productFlavors {
apple {
dimension "fruit"
}
pear {
dimension "fruit"
}
red {
dimension "color"
}
yellow {
dimension "color"
}
}
…
Run Code Online (Sandbox Code Playgroud)
我的src文件夹是
src/
appleRed/
appleYellow/
pearRed/
pearYellow/
Run Code Online (Sandbox Code Playgroud)
每个都有我的代码的自定义版本.再次,作为一个例子
src/
appleRed/java/com/example/ExampleFragment.java
appleYellow/java/com/example/ExampleFragment.java
pearRed/java/com/example/ExampleFragment.java
pearYellow/java/com/example/ExampleFragment.java
Run Code Online (Sandbox Code Playgroud)
当然,没有实例ExampleFragment在src/main.
在开发期间的某个时刻,我必须包含应用程序的免费和付费版本.我认为这可以通过添加一个新的名为味尺寸可以轻松实现version,并命名为两类产品的口味free和paid:
…
flavorDimensions "fruit", "color”, “version”
productFlavors {
apple {
dimension "fruit"
}
pear { …Run Code Online (Sandbox Code Playgroud) android android-studio android-gradle-plugin android-productflavors android-flavordimension
我有一个使用Gradle构建的Android应用程序,其中包含BuildTypes和Product Flavors(变体).我可以运行此命令来构建一个特定的apk:
./gradlew testFlavor1Debug
./gradlew testFlavor2Debug
Run Code Online (Sandbox Code Playgroud)
我必须在每个变体的build.gradle中创建一个自定义任务,例如:
./gradlew myCustomTaskFlavor1Debug
Run Code Online (Sandbox Code Playgroud)
我为此创建了一个任务:
android.applicationVariants.all { variant ->
task ("myCustomTask${variant.name.capitalize()}") {
println "*** TEST ***"
println variant.name.capitalize()
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是所有变种都调用了这个任务,而不是我正在运行的唯一变种.输出:
./gradlew myCustomTaskFlavor1Debug
*** TEST ***
Flavor1Debug
*** TEST ***
Flavor1Release
*** TEST ***
Flavor2Debug
*** TEST ***
Flavor2Release
Run Code Online (Sandbox Code Playgroud)
预期产量:
./gradlew myCustomTaskFlavor1Debug
*** TEST ***
Flavor1Debug
Run Code Online (Sandbox Code Playgroud)
如何定义自定义任务,动态,每个变体,然后使用正确的变体调用它?
我正在构建一个具有不同构建变体风格的应用程序.口味是"免费"和"付费".我想在我的java类上创建一些逻辑,只有在应用程序为"付费"时才会触发.因此,我需要一种方法来在gradle构建过程中设置"applicationId",如下所示:
gradle.build
productFlavors {
free {
applicationId "com.example.free"
resValue "string", "app_name", "Free App"
versionName "1.0-free"
}
paid {
applicationId "com.example.paid"
resValue "string", "app_name", "Paid App"
versionName "1.0-paid"
}
Run Code Online (Sandbox Code Playgroud)
一旦我有了应用程序ID,我就可以这样做:
if(whateverpackageid.equals("paid")) {
// Do something or trigger some premium functionality.
}
Run Code Online (Sandbox Code Playgroud)
我是否正确地说,在gradle构建过程中,"applicationId"最终会在应用程序编译后成为"包名"?如果是这样,获得"应用程序ID"或"包名称"的最佳方法是什么,以便我可以在我的java文件中实现一些与味道相关的逻辑?