首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏vivo互联网技术

    Android构建工具--AAPT2源码解析(一)

    老版本的Android默认使用AAPT编译器进行资源编译,从Android Studio 3.0开始,AS默认开启了 AAPT2 作为资源编译的编译器,目前看来,AAPT2也是Android发展的主流趋势 /version/aapt2)。 带着这个问题,让我们深入的学习一下AAPT2。和AAPT不同,AAPT2把资源编译打包过程拆分为两部分,即编译和链接: 编译:将资源文件编译为二进制文件(flat)。 例如,把资源文件保存在“aapt2”文件夹下,使用Compile命令编译,则会报错“error: invalid file path '.../aapt2/ic_launcher.png'”。 aapt2 compile --dir ...

    2.3K01发布于 2021-10-26
  • 来自专栏全栈程序员必看

    终极解决:AAPT2 error: check logs for details

    编译打包又再次遇到这个问题,AAPT2 error: check logs for details 记得以前记录了,但是没有整理 目前我遇到过两种错误: 1.布局文件错误: 主要表现在 1.1 长度或者字体没有加单位

    76230编辑于 2021-12-23
  • 来自专栏指尖下的Android

    AndroidStudio AAPT2 error: check logs for details报错解决方案

    颜色值XML 问题已经非常明显,颜色值少了一个#,像AAPT2的问题,一般都是资源文件的问题。

    1.9K20发布于 2018-12-12
  • 来自专栏木溪知识加油站

    [异常专栏]AAPT2error:checklogsfordetails解决方法(转载)

    AAPT2 是 AAPT 的全新版本,从 Android Studio 3.0 开始,它被作为默认的资源打包工具。 在开发 App 的时候,有时候会遇到 AAPT2 error,一般如下: Caused by: com.android.builder.internal.aapt.v2.Aapt2Exception: 网上很多人说,可以禁用 AAPT2 以解决该错误,具体做法是:在 gradle.properties 文件中,增加一行 “android.enableAapt2=false”。 但是,Android Studio 会提示你,你不应该禁用 AAPT2,相反,无论如何你都应该使用 AAPT2: The option 'android.enableAapt2' is deprecated 我们看看如何在不禁用 AAPT2 的情况下解决这些错误。 首先,AAPT2 是打包资源文件的工具,如果 AAPT2 报错了,那么可以肯定是资源文件有问题(且不论AAPT2内部错误)。

    1.5K00发布于 2019-04-18
  • 来自专栏韩曙亮的移动开发专栏

    【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一、AAPT2 资源编译工具 二、resources.arsc 资源映射表 工作机制 三、参考资料 一、AAPT2 资源编译工具 ---- 资源的编译 , 生成 R.java 文件 , 都是通过 AAPT 工具生成的 ; AAPT2 工具官方文档 : https://developer.android.google.cn/studio/command-line/aapt2? 工具将 XML 文本文件 编译成 二进制的资源文件 , 并打包到 APK 安装包 中 ; AAPT2 工作原理 : 打包编译 : assets 和 res/raw 目录下的文件虽然不需要编译 , 但是也会 被 AAPT2 工具 采集出来进行打包 ; 清单文件 , XML 资源文件 , 会被 AAPT2 工具编译成一个 " *.ap_ " 二进制文件 , 在 debug 模式下 , 在 " app\build 工具官方文档 : https://developer.android.google.cn/studio/command-line/aapt2?

    1.4K10编辑于 2023-03-29
  • 来自专栏振兴的Android修炼手册

    aapt与aapt2--资源id固定和PUBLIC标记

    有 aapt 和 aapt2 两个分支,分别对应其实现。 AAPT概述 从 Android Studio 3.0 开始,google 默认开启了 aapt2 作为资源编译的编译器,aapt2 的出现,为资源的增量编译提供了支持。 aapt和aapt2分别如何进行资源id的固定。 阅读上面《aapt进行id的固定》到《aapt2进行id的固定》这两部分,我们知道aapt和aapt2进行id固定的方法是不相同的。 原因还是aapt和aapt2的差异造成的,aapt2的public.txt不等于aapt的public.xml,在aapt2中如果要添加PUBLIC标记,其实还是得另寻其他途径。

    1.8K50发布于 2021-07-16
  • 来自专栏振兴的Android修炼手册

    aapt与aapt2--资源id固定和PUBLIC标记

    有 aapt 和 aapt2 两个分支,分别对应其实现。 AAPT概述 从 Android Studio 3.0 开始,google 默认开启了 aapt2 作为资源编译的编译器,aapt2 的出现,为资源的增量编译提供了支持。 aapt和aapt2分别如何进行资源id的固定。 阅读上面《aapt进行id的固定》到《aapt2进行id的固定》这两部分,我们知道aapt和aapt2进行id固定的方法是不相同的。 原因还是aapt和aapt2的差异造成的,aapt2的public.txt不等于aapt的public.xml,在aapt2中如果要添加PUBLIC标记,其实还是得另寻其他途径。

    2.8K20发布于 2021-07-19
  • 来自专栏程序亦非猿

    【连载】聊聊 APK(三) —— Android 资源编译的秘密

    当下我们的 build-tools 最新版本是 28.0.3,因为 aapt 已经 deprecated,取而代之的是 aapt2,我们就以 aapt2 为例吧。 实话说两者差距还是蛮大的,aapt2 是对 aapt 的改良,但是在我看来,aapt2 并没有非常完善,没有到达完全替代 aapt 的程度。 学一个东西最重要的是学会如何看文档,所以先贴上文档 https://developer.android.com/studio/command-line/aapt2 这里是对 aapt2 所有命令的解释, 它是 aapt2 特有的,aapt 没有,aapt2 用它能进行增量编译。 这就意味着我们也可以对它用aapt2 dump,执行如下命令: aapt2 dump $ANDROID_HOME/platforms/android-28/android.jar > test.out

    1.6K20发布于 2019-08-16
  • 来自专栏移动开发专栏

    Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

    Error:com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details 解决办法: 打开项目根目录gradle.properties 文件,加上android.enableAapt2=false,关闭Aapt2编译 # Project-wide Gradle settings

    55720编辑于 2022-06-10
  • 来自专栏深入理解Android

    Android Apk瘦身方案2——gradle插件将png自动压缩为webp

    由于 WebP 格式在 14 <= minSdkVersion <= 17 不支持带 alpha 通道的图像,所以,针对 AAPT2, alpha 两个维度,将 task 分成了4 种: 应用是发布在 else -> CwebpCompressImages::class } } } 通过是否支持supportAlpha和aapt2 = variant.scope.buildTools.getPath(BuildToolInfo.PathId.AAPT2) 获取aapt2路径,例如/Users/xxxx/Library/Android /sdk/build-tools/29.0.2/aapt2 val icons = variant.scope.mergedManifests 获取合并后的Manifests存放目录: /Users/ 的路径,将资源转为webp然后aapt2进行处理,命令的来源可以参考webp和aapt2的使用文档 继续看关键代码 it.output.parentFile.mkdirs()

    1.8K40编辑于 2022-06-23
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】安卓编译错误 ( Could not find xxx.tools.build:aapt2 )

    > Could not find com.android.tools.build:aapt2:4.1.0-6503028. Searched in the following locations: - https://jcenter.bintray.com/com/android/tools/build/aapt2

    95520编辑于 2023-03-29
  • 来自专栏码上积木

    从构建工具看 Android APK 编译打包流程

    再扩展一个问题,关于AAPT2。(之前有朋友面试遇到问这个的,真是问的比较细啊? ,所以这里就提一嘴) Android Gradle插件 3.0.0 及更高版本默认情况下会启用 AAPT2,而老版本的AAPT已经被弃用,那么AAPT2到底优化改进了什么呢? 所以在AAPT2中用到链接的功能,当修改了某个资源文件之后,只需要重新编译这个改变的文件,然后与其他资源进行链接即可,支持了增量更新,大大提升了效率。 4)、@ 资源引用符号使用严格 对于遗漏或者错误引用@(资源引用符号)时候,AAPT2会报错。 5)、库配置不正确 当某些库创建过程中R文件字段声明为final会导致报错,AAPT2就会对这种情况进行优化。

    5.2K30发布于 2021-04-16
  • 来自专栏一个会写诗的程序员的博客

    $ gradle packageDebug --stacktrace error: top-left corner pixel must be either opaque white or trans

    mergeDebugResources Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: Caused by: Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 43 more Caused by: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 QueueableAapt2$$Lambda$274/795096416.run(Unknown Source) Caused by: com.android.tools.aapt2.Aapt2Exception: AAPT2

    53720发布于 2018-08-17
  • 来自专栏韩曙亮的移动开发专栏

    【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )

    ; 这些临时文件都是各种 Java JDK , Android SDK 工具执行产生的 , 如 : javac 执行产生 .class 字节码文件 , dx 工具打包字节码文件为 dex 文件 , aapt2 需要将 Java 代码 , AIDL 文件 , Asset 资源 , Resources 资源 , SO 动态库 , 编译打包到最后的安装包中 ; 之前的博客 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 ) 中 , 讲解过 AAPT2 资源编译工具 , 用于编译 Assets 和 Resources 资源 ; 二、Java 源码编译

    1.5K30编辑于 2023-03-29
  • 来自专栏腾讯技术工程官方号的专栏

    一款 APK 是怎么诞生的?

    ① 通过 aapt2 compile 将 res 资源编译成 .flat 的二进制文件: aapt2 compile -o build/res.zip --dir res ② 通过 aapt2 link 将 .flat 和 AndroidManifest 进行连接,转化成不包含 dex 的 apk 和 R.java: aapt2 link build/res.zip -I $ANDROID_HOME/

    1.2K30发布于 2021-09-29
  • 来自专栏JusterZhu

    .NET 8 中 Android 资源生成的改进和变化

    Android构建过程的一部分是使用android sdk工具aapt2将这些资源编译成二进制形式。为了访问这些资源,android 公开了一个 API,它允许您传递一个整数 id 来检索资源。 SetContentView (2131492864); 作为 aapt2 构建过程的一部分,将生成文件 R.txt,其中包含从资源的“string”名称到 Id 的映射。 所以上面的调用实际上看起来像这样: SetContentView (Resource.Layout.Main); Resource.Id.Main 将映射到 aapt2 生成的 Id。 /tools/aapt2 为什么要制定这个新系统? 新系统依赖于解析 aapt2 在构建过程中生成的 R.txt 文件。在运行 C# 编译器之前,将解析 R.txt 文件并生成新的程序集。

    2.4K10编辑于 2023-12-06
  • 来自专栏韩曙亮的移动开发专栏

    【Android Gradle 插件】AaptOptions 配置 ⑥ ( Overlay 重叠包机制 | AaptOptions#additionalParameters 附加参数配置 )

    app_name">SVG</string> <string name="res2">res2</string> </resources> 注意 : 使用 aapt 可以使用上述方式 , 但是 aapt2 aapt2 link [options] -o arg --manifest arg files... aapt 运行环境 : gradle:2.2.0 / gradle-wrapper:3.4.1 aapt2 运行环境 : gradle:3.3.2 / gradle-wrapper:5.6.2

    60810编辑于 2023-03-30
  • 来自专栏程序亦非猿

    【连载】聊聊 APK(四) —— 脱离 AS 手工创造 APK 文件

    因此,经过改造后,我们目录如下: 重新编译资源 我们因为新加了资源,修改了 AndroidManifest.xml,这时候需要重新调用aapt2 compile和aapt2 link,但是之前我们编译过 activity_main.xml,所以不需要编译,我们只需要编译drawable/ic_launcher就行了,命令如下: aapt2 compile src/main/res/drawable/ic_launcher.png aapt2 link -o resources.ap_ \ -I $ANDROID_HOME/platforms/android-28/android.jar \ compiled/layout_activity_main.xml.flat

    2.1K60发布于 2019-08-21
  • 来自专栏微信终端开发团队的专栏

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

    : findViewById A 资源 B 资源 base 资源 A 代码 正常 NPE NPE B 代码 NPE 正常 NPE base 代码 NPE NPE 正常 这2类运行时问题我们通过替代 aapt2 官方 aapt2 link 已提供 --stable-ids[5] 支持参数。 修改 aapt2 统一 R.id 仅针对 id、attr 这类不需要覆写关系的资源类型,在 aapt2 生成索引表和 R.java 时进行全局统一。id 类型值是随机的、无实体资源含义。 aapt2 透明替换 从 Android studio 3.2 开始,AAPT2 的来源为 google()[6]  Maven 库里的发布包:com.android.tools.build:aapt2 { resolutionStrategy.eachDependency { if(Env.isBuildBundle && requested.name == "aapt2

    6K31发布于 2021-05-26
  • 来自专栏Android先生

    Android Studio3.0更新之路(遇坑必入)

    outputFileName = "xinlebao_${defaultConfig.versionName}_${releaseTime()}.apk" } } 5、AAPT2 编译报错 AAPT2 error Error:java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception : AAPT2 error: check logs for details 解决方案:在gradle.properties中关闭APPT2 编译 android.enableAapt2=false 注:

    89140发布于 2018-08-07
领券