首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >具有多种Gradle风格/构建类型和清单的Buck -build android应用程序

具有多种Gradle风格/构建类型和清单的Buck -build android应用程序
EN

Stack Overflow用户
提问于 2014-10-13 19:37:49
回答 1查看 1.6K关注 0票数 4

我正在做一个项目,其中我们有几个模块,每个模块都有许多对其他模块的依赖,依此类推。一段时间前,我们将项目迁移到了Gradle (也改变了结构以适应Gradle的默认设置),因为在构建不同版本的应用程序时,我们需要多功能性:免费与付费、调试(无proguard)与发布(proguard)等等。当我们完成迁移时,我们真的很兴奋,但当构建时间开始变得痛苦时,这种快乐很快就被冲淡了。在代码中做一个相当简单的更改并在手机上部署应用程序需要90-120秒,这是完全不能接受的。

因此,我们决定尝试一下Buck,因为我们从其他开发人员那里听到的都是好话。只用了很短的时间(比Gradle少得多),我们就成功地构建了我们的应用程序(不幸的是,这并不意味着“正确生成APK”,但至少它已经构建好了)。问题是,作为一般规则,我们每种口味都有一个清单文件,除非我忽略了一些基本的东西,否则Buck只允许您在使用规则android_binary时指定清单文件。这样做的结果是,生成的APK清单文件只包含Gradle构建链开始的第一级模块的样板代码:

代码语言:javascript
复制
main -> debug -> free/paid -> common

也就是说,清单文件只包含main的清单。此规则位于顶级BUCK文件中,该文件包含在.buckconfig中指定的别名。

我很确定我做错了什么。Buck不允许你没有多个清单是没有道理的。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-18 01:53:05

在buck中,清单合并永远不会覆盖清单标签中的任何内容。这包括包属性、可调试属性等。

android_binary中的manifest_entries有一个没有文档记录的特性,但这就是OKBuck构建风格的方式。在打包清单之前,将用AndroidManifest.xml中的任何表达式替换manifest_entries中的任何占位符

因此,如果您的清单标记看起来像这样:

代码语言:javascript
复制
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package = "com.whatever${flavor}"
   android:debuggable = "${debuggable}"
>

android_binary中的manifest_entries如下所示:

代码语言:javascript
复制
  manifest_entries = {
    'placeholders': {
      'flavor': '.test',
      'debuggable': 'true',
    },
  },

生成的清单将如下所示:

代码语言:javascript
复制
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package = "com.whatever.test"
   android:debuggable = "true"
>

然后,您可以使用字典操作和flatten_dicts()构建manifest_entries占位符

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26339100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档