首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 大型工程 App Bundle 模块化实践

Android App Bundle 描述非常恰当: 提升工程速度 将应用功能作为独立模块进行设计、构建调试和测试,并在准备就绪将其添加到主应用中。...编译缓存 如官方 build-cache,国内模块化惯用 .aar,插件化使用 .apk 等,都是通过配置版本管理、跳过编译任务。区别在缓存粒度和命中率不同。...多工程改造支持动态模块,分包式多 .apk 更能充分发挥并行、缓存优势,这更要求企业微信模块化解决计算资源消耗问题: 计算迁移 增加可计算资源,开发机、构建机分布式编译,充分利用构建机群。...任何版本迭代、功能需求总是从基线拉出新分支开发,完成回流。功能分支生命周期过长会不断加剧合并冲突。 ?...多仓库方式还能保持 git commit 时间线干净。 并行编译 编译逻辑相同,部署类型有2种:本地和远程。它们是有区分,远程可分布式、在不同构建机上编译,极大利用了机群计算资源。

4.6K31

Kotlin京东业务实战 | 强大又简洁JVM语言

artist.print() 第2行会显示一个错误,因为没有对变量进行null检查。 Null曾经被戏称为“十亿美金错误”,Null虽然好用,但是导致很多错误元凶往往都是它。...很多开发者都担心Kotlin编译可能没有Java快,影响开发效率,反而得不偿失。 >>>> 过程分析 ?...Kotlin编译器在目标代码生成环节做了很多类似于Java封装事情,比如自动生成Getter/Setter代码生成、Companion转变成静态类、修改类属性final不可继承(open修饰即可继承...>>>> 常见问题 环境配置出错,出现无法编译编译正常apk中无kotlin代码,运行时报kotlin代码找不到; 解决方法:在插件代码中配置kotlin环境,在gradle中增加classpath...; 运行过程中报checkExpressionValueIsNotNull NoSuchMethod异常,分析apk与kotlin源码,发现kotlin中Intrinsics类部分方法打包丢失;

1.6K00
您找到你想要的搜索结果了吗?
是的
没有找到

你该知道Gradle配置知识总结

Product Flavors – 构建不同版本 配置 apk 版本信息,可以为每一个版本指定不同 applicationId 和版本名称。...关于 applicationId ,可以把它也理解包名,不过和 Manifest 文件中包名作用不同,它是用来给应用商店和设备区分不同 app ,而 Manifest 中 pakage 属性用来在源代码中引用...对于同一个属性,当高优先级和低优先级都为非默认值时,如果可以匹配,那直接合并,不能匹配,就会产生冲突(这种是针对两个不同 module 来说),下面会专门给出例子。...不管高优先级还是低优先级,如果其中一个没有设置该属性或者设置默认属性值,而另外一个设置了非默认属性值,则合并结果就是非默认属性值,在项目编译,可以查看 Manifest 合并记录,该文件目录...provided:和 compile 相似,只在编译时使用,几只参与编译,不打包到最终 apkapk:只会打包到 apk 中,不参与编译,所以不能在项目代码中使用相应库中方法。

84410

如何在10分钟内让Android应用大小减少 60%?

(true启用) 请注意,代码压缩会拖慢构建速度,因此您应该尽可能避免在调试构建中使用。...每次构建时 ProGuard 都会输出下列文件 dump.txt 说明 APK 中所有类文件内部结构。mapping.txt:提供原始与混淆过类、方法和字段名称之间转换。...通过为每个发布构建保留一个mapping.txt文件副本,您就可以在用户提交已混淆堆叠追踪来自旧版本应用时对问题进行调试。...proguard中一共有三组六个keep关键字含义 keep 保留类和类中成员,防止它们被混淆移除。 keepnames 保留类和类中成员,防止它们被混淆,当成员没有被引用时会被移除。...keepclassmembers 只保留类中成员,防止它们被混淆移除。 keepclassmembernames 只保留类中成员,防止它们被混淆,当成员没有被引用时会被移除。

82820

如何在10分钟内让Android应用大小减少 60%?

(true启用) 请注意,代码压缩会拖慢构建速度,因此您应该尽可能避免在调试构建中使用。...每次构建时 ProGuard 都会输出下列文件 dump.txt 说明 APK 中所有类文件内部结构。mapping.txt:提供原始与混淆过类、方法和字段名称之间转换。...通过为每个发布构建保留一个mapping.txt文件副本,您就可以在用户提交已混淆堆叠追踪来自旧版本应用时对问题进行调试。...proguard中一共有三组六个keep关键字含义 keep 保留类和类中成员,防止它们被混淆移除。 keepnames 保留类和类中成员,防止它们被混淆,当成员没有被引用时会被移除。...keepclassmembers 只保留类中成员,防止它们被混淆移除。 keepclassmembernames 只保留类中成员,防止它们被混淆,当成员没有被引用时会被移除。

1.6K10

使用 Kotlin 重写 AOSP 日历应用

因为团队中有两个人在进行此项工作,所以我们在 Android.bp 文件中每个人创建了一个 exclude_srcs 属性,这样两个人就可以在减少代码合并冲突前提下,都能够同时进行重构并推送代码。...然而,虽然在 Java 中有相应注解实现版本,但是自动转换过程中并没有为 Kotlin 方法声明中添加 override 修饰符。解决办法是在所有适当地方手动添加 override 修饰符。...暴露成员变量 默认情况下,Kotlin 会自动地类中实例变量生成 getter 和 setter 方法。...编译时间 Kotlin 和 Java 应用构建时间是通过取 10 次从零进行完整构建时间平均值来计算 (不包含异常值),Kotlin 应用平均构建时间 13 分 27 秒,而 Java 应用平均构建时间...欢迎您 点击这里 向我们提交反馈,分享您喜欢内容、发现问题。您反馈对我们非常重要,感谢您支持!

1.1K10

AndroidStdio1_2

• 构建存在多个APK变体(例如免费版本和付费版本应用并且需要在两种版本中使用相同核心组件。...• 资源合并冲突构建工具会将库模块中资源与相关应用模块资源合并。如果在两个模块中均定义了给定资源ID,将使用应用中资源。...修改 ? ? ? ? 一同步,完蛋.问题不大 ---- 大概看了下,是版本不搭配原因 ? ? 9.0稳一点 ? 还没有错误 ?...清单文件 ---- 只有manifest和application是必须.这两个元素都只能有一个并且必须唯一. 同一级别的元素不区分顺序actvity和provider service ?...由于测试证书通过构建工具创建并且在设计上不安全,大多数应用商店(包括Google Play商店)都不接受使用调试证书签名要发布APK

1.8K20

第九章 Android Gradle高级自定义

'项目名_渠道名v版本名称构建日期.apk'格式生成文件名,这样通过文件名就可以把该apk基本信息了解,比如什么渠道,什么版本,什么时候构建等等,最后生成示例apk名字Example92_google_v1.0...但是这种方式有个很大问题就是修改不方便,特别当我们build文件中有很多代码时,不容易找,而且修改容易出错,代码版本管理时也容易产生冲突。...就是要区分是真正打包发版,还是平时调试、测试,有很多办法来区分。...他是一种在构建时,打包成Apk之前,会检测所有资源,看看是否被引用,如果没有,那么这些资源就不会被打包到Apk包中,因为是在这个过程中(构建时),Android Gradle构建系统会拿到所有的资源,不管是你项目自己...以上自动清理资源只是在打包时候,不打包到Apk中,实际上并没有删除我们工程中资源,如果我们在使用时候发现有大量无用资源被清理,那么我们自己最好还是把这些资源文件从我们工程中删除吧,这样也好维护一些

1.6K10

Android Studio3.0新特性及安装图文教程

(6).APK调试器 Android Studio 3.0中新版APK调试器可让您配置和调试APK,而无需将其从Android Studio项目中构建,只要它们是可调试。...} } (13).APK分析仪改进 显示以前可用包,类和方法之外字段 顶部显示和隐藏字段和方法新过滤选项 在树视图中,以斜体显示节点是未在DEX文件中定义引用 对于启用Proguard构建...变异感知依赖解决方案仅适用于您正在构建项目和变体。 对代码资源应用简单更改时,更快增量构建时间。...点击就可以下载了。 安装注意事项: 首先分两种情况,第一种是你电脑已安装Android Studio2.3版本;第二种是没有安装Android Studio2.3版本。...默认是选择第一个,要更改到第三个选项,如果装过2.3就必须注意sdk,因为2.3和3.0编译版本更新是不一致,会冲突。这是安装最要注意地方!

4.1K00

破解第一个Android程序

可以猜测:ApkTool内部使用baksmali将APKDEX文件反编译为smali文件,ApkTool在反编译APK没有处理instant-run.zip中DEX文件,因此,在反汇编输出信息中没有程序真正反汇编代码...图2-5 生成Release版本APK文件 回到Android Studio主界面,打开项目的app模块下build.gradle文件,会发现多出了signingConfigs这项配置。...修正storeFile路径相对路径,其内容如下。...目前使用是ApkTool 2.2.2,而framework-res.apk版本是基于Android 6.0,其API23,Crackme0201API25,因此,出现了资源无法解析问题。...回编译完成,会在dist目录下生成app-release-unsigned.apk文件。 不过,通过编译生成APK文件是没有签名,因此不能进行安装和测试。

3.2K20

Android Studio 3.0 新功能全面解析和旧项目适配问题

简介: Android Studio是Android官方IDE。它是专为Android而打造,可以加快您开发速度,帮助您每款Android设备构建最优应用。...事实上,我也的确折腾良久,但是截至目前,没有发现所谓坑。只是需要对旧工程做一些配置上调整而已。各方面响应速度和新功能使用,总体还是觉得值得升级。...如图,这里使用 data 标签定义一个 Url 规则,并使用 tools:validation 标签验证一个错误测试 Url 地址,检测器能够自动识别并给出错误提示。...这个例子很简单,肉眼一眼就能看出错误。那如果是比较复杂规则呢,可能就不那么容易看得出来。这个时候,这个工具就可以派上用场啦。...API,其中比较常见就是 each() 和 outputFile(),两个常用于修改输出 Apk 文件名和路径方法。

1K20

Android签名校验机制(数字证书)

签名两种模式 调试模式(debug mode) 在调试模式下,ADT会自动使用debug密钥应用程序签名,因此我们可以直接运行程序。...,这个alias通常不区分大小写 keystore 指定密钥库名称(产生各类信息将不在.keystore文件中) keyalg 指定密钥算法 (如 RSA DSA,默认值:DSA) list 显示密钥库中证书信息...指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市区域名 称,ST=州省份名称,C=单位两字母国家代码” export 将别名指定证书导出到文件 keytool....zip并修改扩展名为.apk再次签名 jarsigner 错误: java.security.NoSuchAlgorithmException: unrecognized algorithm...certificates from XXX.apk: Attempt to get length of null array] 使用adb安装时出现该错误是因为应用没有签名,需要先对apk签名之后再尝试安装

6.4K110

Android dex文件64k限制解决办法

这些变化,除了会导致打包出 APK 文件越来越大之外,当项目中java代码包含方法数(method count)超出一个峰值时,编译过程中就会出现如下错误: 较早版本编译系统中,错误内容如下: Conversion...尽管在不同版本编译系统中显示错误内容不尽相同,内容中都提到了一个具体数字:65536,这个数字也是本文要讲到核心内容:Android 64K Method Counts Limit 峰值。...注意:由于 Instant Run 机制利用就是 multidex 原理,当项目中minSdkVersion参数设置20或者更小,并且运行在 Android 4.4 (API 20) 更低版本设备中时...Instant Run仅仅作用于debug版本,我们依然需要给release版本配置multidex来避开64K方法数限制。...,而又没有使用 multidex 支持,编译过程便会出错

1.1K20

Android编译小知识

现在Android项目构建编译都是通过Gradle进行,Gradle版本在gradle/wrapper/gradle-wrapper.properties下 Gradle版本7.3.3 当我们执行...可以理解AGP是Gradle构建流程中重要一环。...中就有问题了 这个时候,A,B,C都是二进制形式,不会参与javac/kotlinc编译,而AGP解决依赖冲突默认以高版本为准。...签名&对齐 签名:生成apk文件需要对其签名,否则无法安装 对齐:zipalign会对apk中未压缩数据进行4字节对齐,对齐主要过程是将APK包中所有的资源文件距离文件起始偏移4字节整数倍,对齐就可以使用...还是以Demo例,引入字节btrace插件 查看开启bTrace,反编译apk产物 他会在每个方法开始和末尾插入一段代码,用于记录方法节点,以用于运行时trace采集 实际源码是肯定没有这些代码

61630

史上最好用Android全量版本更新库XUpdate使用指南

如果你使用是默认版本更新返回api的话, 只需要服务端返回UpdateStatus字段2即可。...如果你自定义请求返回api的话,只需要设置UpdateEntitymIsForce字段true即可。...除此之外,还有两个监听器: 版本更新失败监听器OnUpdateFailureListener。 版本更新apk安装监听器OnInstallListener。...2.问:为什么我在开发调试时候,能够出现最新版本提示,但是打出来包却什么反应也没有? 答:出现这个问题,一般是少了混淆配置。如果你使用了自定义版本更新解析器,请对你接口实体进行混淆配置。...错误错误码 备注 2000 查询更新失败 2001 没有wifi 2002 没有网络 2003 正在进行版本更新 2004 无最新版本 2005 版本检查返回空 2006 版本检查返回json解析失败

2.1K30

有赞美业接入智能 POS 架构演进之路

2.3.2 方案分析 差异化打包方案很好地解决了阶段二所发现问题,实际上最终这个方案并未被采纳,因为这个方案在解决老问题同时,却也带来了新问题: 如果业务 APK 使用了热修复能力,那么此时将会存在多个热修复基准包...,以独立 APK 形式业务 APK 提供能力,这样既能满足拓展能力、SDK 隔离等方面的需求,又没有了阶段三方案后期维护之忧。...SDK 和文档是两个东西,来回沟通和确认,效率极为低下 负责接入同学死活运行出错,外部对接人员却表示反正他们没问题 负责接入同学天天加班调试,外部对接人员不慌不忙 但是现在,得益于 AIDL 协议层存在...拓展新设备无压力 - 对于新设备对接,只需实现其对应服务APK即可 接入成本相比更低 - 一个业务方完成了对接,其他业务方均将受益 - 全新对接方式:由第三方 POS 厂家实现 维护难度:完成接入低维护成本...为了验证可行性,笔者对多个插件化方案进行了实际调研,然后发现哪怕是其中宣称已适配了 Android 9.0+ 版本插件化框架,在实际使用时候依然是问题重重,比如: gradle 版本大多还停留在 3

59740

Gradle一些技巧和遇到问题

``` # 查看构建版本 ..../gradlew build --profile # 调试模式构建并打印堆栈日志 ....apk 项目可以通过定义多个不同productFlavors来实现应用不同定制版本,每一个Flavor与buildTypes配合产出对应一种输出类型apk文件,新建项目初始化只有一个默认Flavor...如果下载完可以配置gradle离线工作 ,勾选gradle会使得速度更快,同时存在一个问题,如果需要从网上加载第三方库,会无法下载,所以酌情使用。所以需要没有的第三方模块记得把这个关了。...直接运行release版本 有时候调试SDK必须要用release版本,例如地图、登录,但是每次打包混淆太麻烦,希望能在IDE中直接跑出release版本应用,简单来说就是在debug模式下产生release

1.8K30

Gradle 与 AGP 构建 API: 进一步完善您插件!

Property 假设我想要创建一个插件,该插件可以使用 Git 版本自动更新应用清单文件中指定版本号。为了达到这一目标,我需要为构建添加两个 Task。...在我尝试将来自 Provider 值映射输入 Property 时,产生了一个错误。map() lambda 参数接收某种类型 (如 T) 值,该函数会产生另一个类型 (如 S) 值。...为了读取清单文件,我需要访问 APK 文件,该文件是构建 Task 产物。为此,我需要将构建 APK 文件夹作为 Task 输入。...注意,这次我依旧没有显式请求清单转换执行,但是因为 VerifierTask 请求了最终版本清单产物,所以自动进行了转换。...欢迎您 点击这里 向我们提交反馈,分享您喜欢内容、发现问题。您反馈对我们非常重要,感谢您支持!

55420
领券