问题标签 [android-build-type]

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 回答
283 浏览

android - Gradle:Android Studio BuildType 资源继承

默认情况下,所有项目都有一个 debug 和 release buildType。然而,人们通常会希望从这些基本构建类型继承,以使其他构建类型具有微小的差异。正如我们所知,“initWith”函数允许我们这样做,这会导致所有 Gradle 配置被继承。问题是它似乎不适用于 Android 资源。

这种情况的用例是,如果您有各种工具的调试与发布密钥(即需要定义为字符串),并且您不想在多个不同的资源目录中复制/粘贴 strings.xml 文件。

例如,假设我有以下 buildTypes:

  • 发布
  • 调试
  • qa - 使用 initWith 调试

如果我再创建资源目录:

  • 调试/res/values/strings.xml
  • 发布/res/values/strings.xml

qa buildType 将无法访问调试 strings.xml。我需要复制粘贴strings.xml:

  • qa/res/values/strings.xml

当然,复制粘贴是一个非常糟糕的主意,因为每个副本都需要进行任何更改,迟早会出错。我尝试将“qa”更改为“qaDebug”和“debugQa”,但没有成功。我可以使用 productFlavors,但最终我会得到比我需要的更多不同的变体,其中许多没有任何意义。例如,要拥有一个仅共享两个基本调试和发布资源目录的 dev、qa 和生产构建,我需要定义如下内容:

  • 开发调试
  • 去释放
  • qa调试
  • qa发布
  • 产品调试
  • 产品释放

不仅命名是多余的,而且这些构建配置中有一半是未使用的。乘以我有几个其他继承的 buildTypes,而不是我在这个简化示例中提到的事实,你可以看到它很快就失控了。

另一种选择是将 API 密钥定义为 gradle 变量(我目前有),但使用标准方法总是更好,因为它最终会更整洁,团队的新开发人员可以更容易地找到东西。除了字符串之外,还有其他资源,例如 google-services.json 甚至 XML 文件,它们只能通过资源目录进行处理。

感谢大家的投入。

0 投票
0 回答
256 浏览

android - 为什么自定义构建类型需要签名配置,而不是“发布”?

我有一个beta这样定义的自定义构建类型:

鉴于beta使用的是initWith release,人们会期望 beta 具有 的所有属性release。但是,在尝试运行时beta,Android Studio 会显示以下错误

“您当前选择的变体的 APK 未签名...”

在项目设置中创建签名配置,选择它,然后点击“应用”似乎不起作用。相反,必须手动编写签名配置:

问题:

  1. 为什么必须在构建脚本中手动编写签名配置?
  2. 为什么release构建类型不需要显式签名配置,直到您实际生成签名的 APK?
  3. 鉴于这beta应该与releasevia完全一样initWith release,为什么行为会如上所示不同?
0 投票
1 回答
170 浏览

android - 对于 Android 库,有没有办法检测主机 Android 应用程序是 beta 测试版本还是生产版本

我正在构建一个 android SDK/库。

在图书馆我想知道 app 是否是

  • 在模拟器上运行
  • 物理设备
  • 是否在 google play 的 beta 测试中
  • 或者它的产品构建

根据我的知识,我只能根据对类值的一些检查来检测simulatorvs。除非使用应用程序的开发人员通过physicalBuildbeta testingproductionlibrarypublic API

如果有办法做到这一点,有人可以确认这个限制或提供一些见解吗?

原因是将 API 调用和数据路由到特定端点,这样各种数据就不会最终导致生产数据出现偏差。

对于所有情况,我可以通过不同的 API 密钥来做到这一点,但现在已经超出了限制。

0 投票
0 回答
181 浏览

android - 如何在android构建期间生成classes.dex文件后添加自定义gradle任务

我正在尝试在 android build 中生成 classes.dex 后添加一个 gradle 任务。

我尝试dexRelease/dexDebug了从下面的线程中获得的任务

用于 classes.dex CRC 计算的 Gradle 任务

但在配置阶段,我可以看到任务但它没有执行。

我在其中添加了一些日志,doLast但没有打印。这就是我确认它没有执行的方式。

dexRelease/dexDebug检测 classes.dex 生成的正确任务吗?或者我需要使用其他任务来检查 dex 生成

我在这里问了另一个与此相关的问题。

android dexDebug 或 dexRelease 任务后如何执行 gradle 任务

但首先我需要知道为什么 dexRelease 没有执行/检查 dex 生成是否正确

在构建过程中检查以下位置的 dex 文件。

0 投票
0 回答
108 浏览

android - android应用程序中多构建类型的不同启动器应用程序图标

我想要不同的应用程序启动器图标来暂存 apk。因此,我将启动器图标文件放在...下的单独文件夹中

src/staging/res/mipmap-mdpi

src/staging/res/mipmap-hdpi

ETC...

所以,现在我有两组启动器图标,一组在 src/main/res.. 和另一组在 src/staging/res 但是暂存 apk 仍然从 src/main/res 中选择启动器图标

我可以知道,为什么会这样?

0 投票
1 回答
1626 浏览

android - 构建失败并出现异常原因:java.lang.NoSuchFieldError: ASCII

我已经升级到 API 27 和构建工具。以前我使用的是 API 22。

升级到 SDK 27 后出现错误,我必须使用类似于级别 27 的支持库。我已经通过 SDK 管理器下载了支持存储库版本 47.0.0,最后这是我的 gradle 设置。我应该怎么做才能解决以下错误:

构建.gradle(模块:应用程序)

build.gradle(项目:Sportwall6)

以下是构建错误

!构建:输出] 1

gradle兼容性中也会出现错误:

gradle兼容性中也会出现错误:

迁移到 AndroidX 后有很多错误:

迁移到 androidX 后的错误

0 投票
1 回答
603 浏览

android - 无法使用自定义 buildType - 活动构建变体“调试”没有测试工件

我环顾四周,看到一些与我的问题非常相似的问题,但它似乎确实有与我相同的解决方案,但无法解决问题。

当我尝试运行方法测试时,我在 android studio 的页脚中收到一条错误消息,指出“活动构建变体“调试”没有测试工件”

我想使用不同的 buildType 进行仪器测试,以便我可以更改 API 路径。它似乎不会构建和运行,除非我设置testBuildType "debug"

这是我的 gradle 的样子

0 投票
1 回答
239 浏览

android - 从构建类型创建 android beta apk

我无法构建我的 android 应用程序的测试版 APK。我试过下面的代码

当我尝试从 Genrate Signed APK 按钮生成 APK 时,它显示错误 -

com.packagename.free 未找到

在我的应用程序中,我使用的是 payu SDK。请帮忙。提前致谢

0 投票
0 回答
241 浏览

android - 根据构建类型混淆配置文件中的字符串值 - Android

如何使用 buildConfigField 混淆字符串值

目前我们使用buildConfigField按照构建类型来声明我们的变量(keys),但是在对APK进行逆向工程时,我们可以清楚地看到用buildConfigField声明的值,如下图所示。

逆向工程后的 BuildConfig 文件

PS:即使minifyEnabled与proguard一起使用,我们也有提到的问题

这篇文章涵盖了同样的讨论 ->反对 Android APK 的逆向工程,但没有解决方案

0 投票
1 回答
25 浏览

android - 使用不同本地化资产时的android包命名

假设我有一个 android 应用程序,说com.acme.game
这个应用程序使用不同的资产来实现本地化。

构建此应用程序(apk)的最佳策略是什么?

我应该为每个“语言环境”创建单独的项目并命名它com.acme.game.encom.acme.game.rus...相应地,还是有更好的方法没有任何重复?