问题标签 [android-productflavors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5149 浏览

android - 使用 Gradle 和产品风格(不包括库)构建 Android

我有一个能够使用 Gradle 成功构建的 Android 应用程序(使用 Gradle 0.7)。现在我想设置 Gradle 来构建两个单独的 .APK,一个只有 ARM 本机库,另一个只有 Intel x86 本机库。我已经尝试使用 productFlavors,如下例所示:
How to configure NDK with Android Gradle plugin 0.7
但是,使用我的 Gradle 脚本中指定的 productFlavors,.APKs 根本不包含任何库(libs 目录本身不在.APK)。如果没有 productFlavors,则包含库 - 尽管生成的 APK 将包含 ARM 和 x86 库。

使用 Gradle,我们的库似乎被放置在以下目录中: build/javaResources/release/lib/armeabi-v7a
build/javaResources/release/lib/x86
build/javaResources/debug/lib/armeabi-v7a
build/javaResources /debug/lib/x86
如果 Gradle 脚本中没有 productFlavors,Gradle 似乎知道在这些目录中查找库。所以我不知道发生了什么。为什么包含 productFlavors 会阻止 Gradle 在那里寻找库?

0 投票
1 回答
359 浏览

android - Android Gradle:风味和城市飞艇

我有个问题:

我正在使用 Gradle 具有的风味功能,以便使用不同的图标等,但我已经意识到,如果我正在使用它们,那么Urban-Airship它就不起作用。

nl.myapp.is.staging E/MyApp - UALib﹕ Required permission nl.myapp.is.staging.permission.C2D_MESSAGE is unknown to PackageManager.

有没有办法解决这个问题?是否仍然可以UA在 Android Studio 中使用风味的同时使用?

提前非常感谢!

0 投票
0 回答
1286 浏览

java - Android Studio 构建类型 - 从构建中排除 java 源?

我正在开发一个具有很多功能的大型应用程序。我正在使用构建类型来获取仅具有一项功能的 apk。为了做到这一点,我需要排除这些功能不需要的所有资源,因此 apk 会比大型应用程序小。我设法通过使用 proguard 减小了这个 apk 的大小,但这还不够。有什么方法可以从构建中排除 java 类和资源?

我从构建中尝试了这个Android Studio 排除类? 但它不起作用。我在这里阅读了Android Studio:在资源sourceSets 下排除资源文件,Android sourceSets 尚不支持排除源。

有没有人有这个问题的解决方案?

0 投票
1 回答
2204 浏览

android - Android Gradle 主项目和子模块风格

我有一个主要的 Android 项目,它依赖于一个子模块。

主项目具有 Gradle 中定义的风格。

子模块也定义了一些风格。这应该是合乎逻辑的 - 能够为这两个项目提供风味。例如在子模块中:

但这不起作用 - 构建崩溃并显示一条消息,指出在主项目中找不到子模块资源。但是当我从子模块中删除风味时,一切正常。

当为子项目定义风味时,似乎混合了构建顺序,这可能是真的吗?

我错过了什么?主项目和子项目都可能有味道吗?

0 投票
1 回答
694 浏览

android-studio - 从 buildType 和 flavor 计算的 resValue

我的应用程序由三种构建类型组成:开发、阶段和发布。还有两种口味:p2p 和 pro。

在 build.gradle 中,我使用 resValue 为每种构建类型定义要使用的方案:

  • custom_url_dev
  • custom_url_stage
  • custom_url_prod

我还想按风格配置方案。就像是:

  • custom_url_pro_dev
  • custom_url_p2p_dev
  • custom_url_pro_stage
  • custom_url_p2p_stage
  • custom_url_pro_prod
  • custom_url_p2p_prod

所以基本上,我需要根据当前构建类型和当前风格计算 resValue。Gradle 可以做到这一点吗?或者有没有更好的方法来获得这个结果?

0 投票
0 回答
568 浏览

android - Android Gradle 多口味变体

我正在尝试使用风味组构建一个基于 gradle 的项目。这些组是“市场”和“成本”。问题在于依赖管理。

例如,我想做类似的事情compileFreeGplay 'com.google.android.gms:play-services:5.0.89',Android 插件(尚未)支持 gradle。

所以我使用了基于这个 SO 问题的解决方案:https ://stackoverflow.com/a/22584908/2904294

该解决方案有效并根据正在构建的变体正确填充以下全局变量:

这是“依赖”部分:

所有printlns显示正确,代码ifs按预期输入。但是,该库仍未包含在项目中。

如果我把它放在外面,它会完美地工作ifs

有更多 Gradle 经验的人可以指出我在这里缺少什么吗?谢谢!

0 投票
0 回答
627 浏览

android - Android Gradle:如何将所有构建变体发布到工件

所以我有这个我用不同的构建风格创建的 android 库。build.gradle 看起来像这样:

如何获得“artifactoryPublish”任务来发布所有 3 个构建 aars?

0 投票
1 回答
171 浏览

android - 新旧 Android 版本的单独构建风格

所以,为了在 Androids < 4 上支持ActionBar,我必须包含 appcompat-v7 库。这个库以代码和图像(~600KB)的形式增加了相当多的开销。

所以我想我可能会稍微改变一下项目并生成单独的包,一个用于 androids < 4,一个用于较新的 androids。这应该不难,因为适当的导入和定义仅在少数源文件中(<5)

子问题:考虑到唯一可感知的收益是减小了封装尺寸,是否值得费心?

无论如何,由于这需要修改build.gradle,这甚至可能吗?我怎样才能使这项工作?自然,在调试时,Android Studio 应该“知道”在部署到适当的模拟器时要构建什么风格(即使它总是带有 appcompat 的那个)。我不想因为这个而不得不工作更多。

0 投票
6 回答
5859 浏览

android - 使用 kotlin 自定义风格的 ClassNotFoundException

我定义了自己的风格并设置了 sourceSet:

这是我的项目结构:

在此处输入图像描述

但是...我收到以下错误:

但是,使用 main sourceSet 有效...我将不胜感激您的帮助。

0 投票
1 回答
2558 浏览

android - 没有重复类错误的Android基本风格

我的应用程序有几个版本:通用版本,比如说mainapp,很少有每个客户特定的版本,比如说custom1,,。而且我想为所有 customX 风味提供基本风味。custom2custom3

我试图这样做:

创建项目结构:

和配置:

commonflavor我放置了所有 customX 风格的通用 java 类,比如MainActivity.javaSecondActivity.java. 但在custom3我需要单独SecondActivity.java的 .

在这种情况下,我有一个error: duplicate class: SecondActivity来自src/commonflavor/javaand的错误src/custom3/java

现在我已经使用类重复解决了这个问题:

我已经src/commonflavor/java从 srcDirs 复制并复制MainActivity.javacustom3. 问题是我有 2 个MainActivity.java文件克隆src/commonflavor/javasrc/custom3/java

如何在不重复代码的情况下解决这种情况?