记AGP3.2.0与androidx的一个bug

2024-08-25 02:18
文章标签 bug androidx agp3.2

本文主要是介绍记AGP3.2.0与androidx的一个bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境

AGP版本:3.2.0

项目support library:Androidx

gradle版本:4.6

起因

接入某广告时发现安卓编译报了一个错误

  * What went wrong:Could not resolve all files for configuration ':app:slidemeDebugCompileClasspath'.> Failed to transform file 'adslib-hongkongjoygenesis-release-2.3.2168.aar' to match attributes {artifactType=processed-aar} using transform JetifyTransform> Failed to transform 'E:\android\home\caches\modules-2\files-2.1\com.iqzone\adslib-hongkongjoygenesis-release\2.3.2168\7077b626befc92f49bce4cad784977c150d66b82\adslib-hongkongjoygenesis-release-2.3.2168.aar' using Jetifier. Reason: The type does not support '.' as package separator! Received '.first(".LM_replay").parentNode.removeChild(L.first(".LM_replay"))'.. (Run with --stacktrace for more details.) To disable Jetifier, set android.enableJetifier=false in your    gradle.properties file.

查找资料发现是AGP3.2.0版本问题中jetifier的bug

获得的解决方案是:1.升级AGP版本 2.修改jetifier的默认引用版本

但使用方案1的话修改成本太高了 :AGP 除了 DSL 之外并没有公开的文档,内部 API 经常变动

因此打算使用方案2 此时发现按照解决方案2在build.gradle配置classpath jetifier版本未生效

 

处理经过

怀疑classpath配置使用插件没生效 测试去掉了AGP的引用发现还能打包

此时怀疑环境变量导致 或 缓存使其可以正常打包 ,经过排查测试,可以确定与这问题无关

最后在buildSrc中发现有使用AGP3.2.0的依赖 猜测可能与这个有关

于是将主包导入AS中发现确实引用有异常的jetifier版本并且是AGP3.2.0自带的

此时将修复的jetifier版本引入buildSrc中 问题解决

处理方法

如果没有使用本地插件或本地插件中未使用AGP的可以在项目中的build.gradle中加入如下代码

dependencies {// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files...//TODO: Fix for new jetifier issue. Not be needed in gradle version 3.2.2classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'classpath 'com.android.tools.build.jetifier:jetifier-core:1.0.0-beta02'}

若有使用本地插件且插件中使用了AGP的就在buildSrc的build.gradle加入如下代码

dependencies {...implementation 'com.android.tools.build:gradle:3.2.0'//AGP3.2.0中的jetifier有bug 1.0.0-beta02版本修复implementation 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'implementation 'com.android.tools.build.jetifier:jetifier-core:1.0.0-beta02'
}

扩展

 

那么我们主包中buildSrc具体是做什么的呢?与主包build.gradle中的classpath使用有什么关系呢?

  什么是buildSrc
  
  摘自 Gradle 文档:当运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录。然后 Gradle 会自动编译并测试这段代码,并将其放入构建脚本的类路径中, 对于多项目构建,只能有一个 buildSrc 目录,该目录必须位于根项目目录中,buildSrc 是 Gradle 项目根目录下的一个目录,它可以包含我们的构建逻辑,与脚本插件相比,buildSrc 应该是首选,因为它更易于维护、重构和测试代码
  
  buildSrc与classpath的关系
  
  在安卓中编译apk过程中需要修改字节码如:加密静态字符串、修改xml文件等操作 就需要使用插件,自定义的本地插件就在buildSrc中进行,而我们更常见的是直接引用classPath使用别人的插件(远程插件)
 

优先级的话是会先处理本地插件编译测试,此时远程插件的修改就不会生效

 

参考:

https://juejin.im/post/5ed3ef906fb9a047bf7070b6
https://github.com/f2prateek/dart/issues/230

这篇关于记AGP3.2.0与androidx的一个bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104267

相关文章

JavaBug系列-解决SpringBoot返回Xml结构的问题

JavaBug系列之SpringBoot返回Xml结构的问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 作者:Java医生 教学: Java企业项目辅导,专注于辅导新入职员工,解决各种问题! V:study_51ctofx 一、关于错误信息 如图,SpringBoot请求返回Xml格式信息 通过以上信息分析,

JavaBug系列- Failed to load driver class com.mysql.cj.jdbc.Driver in either of HikariConfig class load

JavaBug系列之Mysql驱动问题 Java医生一、关于错误信息二、如何解决问题 Java医生 本系列记录常见Bug,以及诊断过程和原因 Java/一对一零基础辅导/企业项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 V:study_51ctofx 一、关于错误信息 APPLICATION FAILED TO START Description: Fai

【解决bug之路】npm install node-sass(^4.14.1)连环报错解决!!!(Windows)

有关node-sass的深入分析可参考:又报gyp ERR!为什么有那么多人被node-sass 坑过? 主要有如下三方面错误,请自查: 1.node,npm版本需与node-sass版本匹配,像node-sass(^4.14.1)就得node 14.x版本才可以,node 16不行 gyp ERR! build error15 gyp ERR! stack Error: `

排查 MyBatis XML 配置中的 IF 语句与传值名称不匹配的 Bug

文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 前言,在改一个bug得时候发现一个有意思得问题,就是mybatis得xml中if判断得问题,传值名字不匹配依旧可以进行判断,如下图 传值userName,但是有意思得事情出现了,进了if,并且没有报错,尝试了两次都是这

彻底解决魅族手机无法彻底卸载应用的bug

使用Flyme系统的同学可能会遇到一个问题: 卸载了某些软件(例如通过开发者模式调试安装的应用)后,实际这个应用还残留在系统,当你用低版本或者其他签名的apk覆盖安装的时候会提示“安装失败”,要求你卸载后重新安装。 可是无论你从应用列表寻找还是清理垃圾,都根本找不到这个应用。 闹鬼?这个bug一直伴随着flyme,可怜工程师们竟然一个都没发现。 今天笔者教大家一招解决这个问题。

今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题

结合Freemaker导出文件 public void exportSimpleWord() throws Exception{// 要填充的数据, 注意map的key要和word中${xxx}的xxx一致Map<String,String> dataMap = new HashMap<String,String>();dataMap.put("username", "张三");dataMap.

【软件测试】软件测试-----什么是Bug?Bug是如何分级的?Bug的生命周期是怎样的?如何描述一个Bug?

博客目录 一.软件测试的生命周期二.BUG的定义和级别2.1 bug的概念.2.2 如何描述一个bug.2.3bug的级别2.3.1 bug分级的意义.2.3.2 bug的四种级别. 三.BUG的生命周期.四.当与开发人员发生冲突该如何处理(高频面试)五.总结 一.软件测试的生命周期 软件测试贯穿于软件的整个生命周期,针对这句话我们一起来看一下软件测试是如何贯穿软件的整个生命周

解决 Android 上的 .NET MAUI/Xamarin.AndroidX 应用调用 ASP.NET Core API 端点时 SSL 连接被拒绝的问题

从虚拟机调用本地API报各种 SSL 连接不上的错误,这给本地调试造成了极大的不便,在被这个问题困扰了多日以后,终于在GitHub上找到答案 基于这个 帖子 ,有一个回复 他写了一个帮助类,专门用来调试本地的API,并给出了这个调用类的用法,此帮助类如下 using System.Net.Security;public class DevHttpsConnectionHelper{pu

【ListView】有关填充bug

假设要实现如下效果 ListView里若使用RelativeLayot则会出现错误 得不到垂直线的填充 线性布局的高度设置为match_parent会使高度为0,必须给它一个固定值,比如20dp ListView建议使用LinearLayout在最外层,而最外层的宽高无论如何设置都无法确定的,建议第二层也使用linearLayout来布局 【实现

ListView数据只有显示不全bug

Android编程中,ScrollView嵌套ListView时,会无法正确的计算ListView的大小。解决的办法有如下两种: 解决方案1: 直接把包含ListView控件的ScrollView控件从布局文件中去除,留下ListView控件,这是最简单快捷的解决办法,如果一定要在ScrollView中包含ListView,则参考解决方案2: