解决 NestHost requires ASM7 (shrink、kotlin metadata)

news2024/10/7 8:31:10

① 场景

Caused by: java.lang.RuntimeException: NestHost requires ASM7
	Failed to resolve class org/vigame/demo/CrashHandler$1.class[
	transform input:not found
	project input:not found
	aar input:not found]


Caused by: java.lang.UnsupportedOperationException: NestHost requires ASM7
	at org.objectweb.asm.ClassVisitor.visitNestHost(ClassVisitor.java:174)
	at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:399)
	at com.ss.android.ugc.bytex.common.visitor.ClassVisitorChain.accept(ClassVisitorChain.java:65)
	at com.ss.android.ugc.bytex.common.processor.ClassFileAnalyzer.handle(ClassFileAnalyzer.java:102)

1、异常抛出位置

访问该类的嵌套宿主类。嵌套是同一包的一组类,它们共享对其私有成员的访问。其中一个类称为host,
列出了嵌套的其他成员,这些成员依次应链接到其嵌套的宿主。此方法只能调用一次,
并且仅当访问的类是嵌套的非宿主成员时。类隐式地是它自己的嵌套,因此以访问的类名作为参数调用此方法是无效的。

嵌套类(外部类):可以在一个类的内部定义另一个类(内部类)

在这里插入图片描述

2、查看源码

查看得知 shrink 默认使用的是 ASM6

在这里插入图片描述

3、解决

尝试一:fork 分支,修改默认值,重新发布版本到本地或私有仓库

发版本过程中一番折腾竟然没有成功!既然是一个可选的配置项,肯定是不会写死的,那就一定有地方可配置!!!

在这里插入图片描述

尝试二:在 gradle.properties 配置满足要求的 bytex.ASM_API

在这里插入图片描述

shrink transformClasses 总算是编译通过

在这里插入图片描述

在这里插入图片描述

② 场景

但是别高兴太早,下面还有一个错误呢!

在这里插入图片描述

Execution failed for task ':app:transformClassesWithRemoveKtMetaForCommonRelease'.
> NestHost requires ASM7

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task 
':app:transformClassesWithRemoveKtMetaForCommonRelease'

Caused by: java.lang.UnsupportedOperationException: NestHost requires ASM7
	at org.objectweb.asm.ClassVisitor.visitNestHost(ClassVisitor.java:174)
	at org.objectweb.asm.ClassReader.accept(ClassReader.java:586)
	at org.objectweb.asm.ClassReader.accept(ClassReader.java:424)
	at com.android.kt.meta.remove.RemoveKtMetaPlugin2.doModifyClass(RemoveKtMetaPlugin2.kt:150)
	at com.android.kt.meta.remove.RemoveKtMetaPlugin2.modifyClassIfNeeded(RemoveKtMetaPlugin2.kt:200)
	at com.android.kt.meta.remove.RemoveKtMetaPlugin2.transform(RemoveKtMetaPlugin2.kt:262)
	at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:284)
	at com.android.build.gradle.internal.profile.NoOpAnalyticsService.recordBlock(NoOpAnalyticsService.kt:72)
	at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:242)

1、找到 TransformTask,修改 ASM 版本?

(未果)

寻找是否有地方可配置 ASM,无结果啊!

在这里插入图片描述

2、继续细看日志

有 databinding,可是我的项目根本没有使用到这个啊!

> Task :app:transformClassesWithRemoveKtMetaForCommonRelease FAILED
remove_kt_meta::transform,ext.enable=true
remove_kt_meta::pkg:0\androidx\databinding need remove Route
remove_kt_meta::0\androidx\databinding\DataBinderMapperImpl.class modify done
remove_kt_meta::pkg:0\androidx\databinding need remove Route
remove_kt_meta::0\androidx\databinding\DataBindingComponent.class modify done
remove_kt_meta::pkg:0\androidx\databinding\library\baseAdapters need remove Route
remove_kt_meta::0\androidx\databinding\library\baseAdapters\BR.class modify done
remove_kt_meta::pkg:0\com need remove Route
remove_kt_meta::0\com\dywdyk.class modify done
remove_kt_meta::pkg:0\com\unity3d\player need remove Route
remove_kt_meta::0\com\unity3d\player\UnityPlayerActivity.class modify done
remove_kt_meta::pkg:0\org\vigame\demo need remove Route

搜索果然发现开启了 databinding,关闭它!!!
在这里插入图片描述

发现没,日志变少了

> Task :app:transformClassesWithRemoveKtMetaForCommonRelease FAILED
remove_kt_meta::transform,ext.enable=true
remove_kt_meta::pkg:0\com need remove Route
remove_kt_meta::0\com\rkjzmk.class modify done
remove_kt_meta::pkg:0\com\unity3d\player need remove Route
remove_kt_meta::0\com\unity3d\player\UnityPlayerActivity.class modify done
remove_kt_meta::pkg:0\org\vigame\demo need remove Route







然而没有啥用,两天没解决这个错误,崩溃了老铁。





3、发现了!!!

一直看 kotlin-gradle-plugin 的源码从未找到过,原来是下面那个

在这里插入图片描述
根据调用栈日志,翻阅代码查看,果然和上面的 shrink 是一样,默认写了 AMS6

在这里插入图片描述

Finally,终于解决了

方式一:

寻求更高的合适版本(需 asm6 以上)的 classpath "com.google.plugin.kt:remove-metadata:1.0.5" 【这个我没有再找高版本了】

方式二:
此插件代码复制出来,新建工程,修改 super(393216,cv) 为 ASM6 以上,发布到本地或私有仓库使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/362950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flstudio21中文版下载安装图文教程

fl studio21中文版是一款免费的音乐编曲制作软件,有了它你可以制作出色的音乐。它为您提供了一个集成的开发环境,使用起来非常简单有效,您的工作会变得更有条理。同时FL Studio为用户提供了更先进和原创的音乐制作理念,用户可以轻…

简单学生管理系统

文章目录1. 学生类2. 学生管理类3. 运行结果1. 学生类 包含四个属性,学号、姓名、年龄及地址。类中包含一个无参构造、一个有参构造以及各属性的 get、set 方法。 package com.zxe;public class Student {private String id;private String name;private String a…

Vue+element ui遇到的一些疑难问题总结(一)

element ui 疑难总结1. el-date-picker时间区间控制2. el-cascader 获取name3. el-tree 搜索判断是否匹配到值1. el-date-picker时间区间控制 控制只能选区间(7天,一个月,两个月等等)重点为 :picker-options"pickerOptions&…

Python爬虫(10)selenium爬虫后数据,存入csv、txt并将存入数据并对数据进行查询

之前的文章有关于更多操作方式详细解答,本篇基于前面的知识点进行操作,如果不了解可以先看之前的文章 Python爬虫(1)一次性搞定Selenium(新版)8种find_element元素定位方式 Python爬虫(2)-Selenium控制浏览…

【原创】java+swing+mysql大学生竞赛管理系统设计与实现

上一篇文章我们介绍了使用swingtxt进行系统设计和数据存储,今天我们还是回归现实,使用javaswingmysql去设计开发一个大学生竞赛管理系统,以方便管理员对大学竞赛的一些信息进行管理。 功能分析: 大学生竞赛管理系统主要是提供给…

黄金短期陷入低位震荡颠簸

基本面: 周二(2月21日)黄金价格维持1843-1830区间震荡,日线收带上下影线小阴线。 今日数据 无重要数据 技术面: 日线上,黄金日线收带上下影线小阴线,目前处于短期线附近及下方运行,5日与1…

CAN现场总线基础知识总结,看这一篇就理清了(CAN是什么,电气属性,CAN通协议等)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…

FPGA纯Vhdl实现MIPI CSI2RX视频解码输出,OV13850采集,提供工程源码和技术支持

目录1、前言2、Xilinx官方主推的MIPI解码方案3、纯Vhdl方案解码MIPI4、vivado工程介绍5、上板调试验证6、福利:工程代码的获取1、前言 FPGA图像采集领域目前协议最复杂、技术难度最高的应该就是MIPI协议了,MIPI解码难度之高,令无数英雄竞折腰…

Vue3电商项目实战-商品详情模块3【07-★规格组件-SKUSPU概念、08-★规格组件-基础结构和样式、09-★规格组件-渲染与选中效果】

文章目录07-★规格组件-SKU&SPU概念08-★规格组件-基础结构和样式09-★规格组件-渲染与选中效果07-★规格组件-SKU&SPU概念 官方话术: SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位&#xff0…

二月天-课后程序(JAVA基础案例教程-黑马程序员编著-第五章-课后作业)

【案例5-5】 二月天 【案例介绍】 1.任务描述 二月是一个有趣的月份,平年的二月有28天,闰年的二月有29天。本例要求编写一个程序,从键盘输入年份,根据输入的年份计算这一年的2月有多少天。在计算二月份天数时,可以使…

【微信小程序】--创建第一个小程序项目项目文件的作用(二)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…

华为OD机试 - 数组合并(C++) | 附带编码思路 【2023】

刷算法题之前必看 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址:https://blog.csdn.net/hihell/category_12199283.html 华为OD详细说明:https://dream.blog.csdn.net/article/details/128980730 华为OD机试题…

[业务逻辑] 订单超时怎么处理

文章目录1.订单的过程分析2.JDK自带的延时队列 (单机)3.RabbitMQ的延时消息 (消息队列方案)4.RocketMQ的定时消息 (消息队列方案)5.Redis过期监听 (Redis方案)6.定时任务分布式批处理 (扫表轮训方案)7.总结1.订单的过程分析 一个订单流程中有许多环节要用到超时处理 买家超时未…

echarts 饼状图 label 既在内部显示数值(百分比),又显示外部指示线

需求 项目开发中,产品经理绘制的原型图中,需要前端实现一个饼状图,且既在饼图内部中 显示 百分比,又显示 外部指示线及数值,效果如下图所示: 查了下 Echarts 官网文档,需要配置 series 下的 la…

使用vs2022编译yolov5+tensorRT+cuda+cudnn代码进行混合编译

首先依赖有cuda、cudnn、tensorrt、protobuf,从Linux的代码直接移植过来这些库是没法使用的,需要下载对应win的下的版本,其中cuda、cudnn和tensorrt直接从官方下载即可,但是protobuf需要自己编译一下(protobuf3.11.4&a…

unix高级编程-fork之后父子进程共享文件

~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. 这里我看到的是centos的操作,但我用的是debian系的ubuntu,百度了一下发现debian的在这里…

【数据挖掘实战】——基于水色图像的水质评价

项目地址:Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、水色分类 3、原始数据 4、挖掘目标 二、分析方法和过程 1、初步分析 2、总体流程 第1步:数据预处理——图像切割 第2步:特征提取 ​…

健身蓝牙耳机推荐,推荐五款适合健身的蓝牙耳机

出门运动健身,有音乐的陪伴是我们坚持运动的不懈动力,在健身当中佩戴的耳机,佩戴舒适度以及牢固程度是我们十分需要注意的,还不知道如何选择健身蓝牙耳机,可以看看下面这些运动蓝牙耳机分享。 1、南卡Runner Pro4骨传…

大bug!ChatGPT居然不懂最新的量子计算?

(图片来源:网络)近期,背靠微软的AI语言模型ChatGPT风靡全网,以社交媒体为传播媒介,仅5天,注册用户数就超过100万,2个月破亿。随后谷歌眼红不已,匆忙召开自研AI搜索工具Ba…