解决 NestHost requires ASM7 (shrink、kotlin metadata)

news/2024/4/25 14:19:45/文章来源:https://blog.csdn.net/printf123scanf/article/details/129121793

① 场景

Caused by: java.lang.RuntimeException: NestHost requires ASM7Failed to resolve class org/vigame/demo/CrashHandler$1.class[transform input:not foundproject input:not foundaar input:not found]Caused by: java.lang.UnsupportedOperationException: NestHost requires ASM7at 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 ASM7at 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.luyixian.cn/news_show_72459.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

损失函数与反向传播

一、损失函数计算实际输出和目标之间的差距为我们更新输出提供一定的依据(反向传播)1.nn.L1Lossimport torch from torch.nn import L1Loss inputs torch.tensor([1,2,3],dtypetorch.float) targets torch.tensor([1,2,5],dtypetorch.float) # reshape…

ZED相机快速使用指南

1、安装SDK ZED SDK 3.8 - Download | Stereolabs 2、安装ros GitHub - stereolabs/zed-ros-wrapper: ROS wrapper for the ZED SDK 其他教程:ZED2相机SDK安装使用及ROS下使用_可即的博客-CSDN博客 3、官方文档 Get Started with ZED | Stereolabs 4、标定参…

「TCG 规范解读」第12章 TPM工作组 TCG身份验证研讨

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

游戏蓝牙耳机哪个品牌好?游戏蓝牙耳机品牌排行榜

手机端的TWS耳机已成为主流,因而许多厂商也在制造蓝牙耳机时,不仅仅只限于音质,并且在延迟和功能上有所改进,下面小编整理了游戏蓝牙耳机品牌排行榜,看看有哪些入围的吧! 一、南卡小音舱蓝牙耳机 蓝牙版本…

华为OD机试 - 计算网络信号(C++) | 附带编码思路 【2023】

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

左耳听风——笔记四:分布式

左耳听风:分布式 分布式系统介绍 分布式系统和单体系统 使用分布式系统主要有两方面原因。 增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的…

吐血整理AutoSAR Com-Stack 的配置【基于ETAS】

总目录链接>> AutoSAR入门和实战系列总目录 文章目录01.软件组件和系统说明02.基本软件配置03.系统数据映射04.代码生成05.代码整合06.测试下图显示了基于 AUTOSAR 的 ECU SW 的结构。纵观BSW,大体分为三层。三层模块中,与通信相关的模块称为通信…

精确控制 AI 图像生成的破冰方案,ControlNet 和 T2I-Adapter

ControlNet 和 T2I-Adapter 的突破性在哪里?有什么区别?其它为 T2I 扩散模型施加条件引导的相关研究ControlNet 和 T2I-Adapter 的实际应用效果如何?使用体验上,跟 SD原生支持的 img2img 有什么区别?ControlNet 在插画…

运动戴耳机哪种款式比较好、最好用的运动耳机

很多人喜欢运动时听音乐,因为在运动场景中,听歌的节奏与步频匹配的时候,的确是可以起到很好的激励和缓解情绪的作用。认认真真地选择一副适合自己跑步的运动耳机,成了很多跑步爱好者的实际需求,专门为运动打造的耳机也不少!那么,如何挑选一款…

网络信息安全(四)

IIS WEB服务器 服务器配置静态IP 安装WEB服务软件 打开软件 检查80端口是否打开 DNS解析不同域名站点 新建两个网页京东和淘宝 安装DNS组件并创建两个区域 新建主机 XP上指定DNS 正常情况下同一个服务器上一个端口只提供一个服务 添加主机头值 XP验证 IIS FTP服务器 FTP工作模式…

0基础学插画是报班还是自学

学插画0基础是报班还是自学,众所周知,报班一定是提升插画水平的最有效途径,如果有经济能力,建议报班!那么报哪些插画课程班比较靠谱呢?同时给大家梳理了国内最新5大插画班排行榜,各有优势和特色…

解析Java中的class文件

解析class文件需要把class文件当成文件流来处理,定义ClassReader结构体 type ClassReader struct {data []byte }go语言中的reslice语法可以跳过已经读过的数据。 同时定义了ClassFile数据结构来描述class文件的各个部分,该数据结构如下所示&#xff1…

【word】插入mathtype公式,造成前后文本不同行

一、问题描述 在word文本中插入mathtype公式,在默认配置下,会造成前后文本不同行的现象,例如: 二、解决方案 要求1:字符间距位置,设置为“标准”;要求2:段落文本对齐方式&#x…

【原创】java+swing+txt学生学籍管理系统设计与实现

今天我们来介绍如何使用javaswingtxt来开发一个学籍管理系统。对的,你没看错,我们今天不用mysql,我们使用txt这个文本来进行数据存储,主要考察对文件读写的操作。 功能分析: 我们系统不要求做的很复杂,只…

2023从0开始学性能(2) —— 探索性能测试流程之调研需求【持续更新】

性能测试流程 性能测试的流程应该是什么样的呢?打开jmeter/LR ,开启录制然后加个并发数点击运行吗?如果真这么简单,估计现在就没有性能测试这个专职的岗位了。 虽然我们没做过,但是有对学习的热爱和百度搜索的老手艺…

手写线程池实例并测试

前言:在之前的文章中介绍过线程池的核心原理,在一次面试中面试官让手写线程池,这块知识忘记的差不多了,因此本篇文章做一个回顾。 希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么…

【操作系统】概述

操作系统 操作系统的定义与目标 定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。 目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,…

117.Android 简单的拖拽列表+防止越界拖动(BaseRecyclerViewAdapterHelper)

//1.第一步 导入依赖库和权限&#xff1a; //依赖库&#xff1a; //RecyclerView implementation com.android.support:recyclerview-v7:28.0.0//RecyclerAdapter implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28 //用到的权限&#xff1a; <!…

如何使用DevEco Studio创建Native C++应用

简介本篇主要介绍如何使用DevEco Studio for OpenAtom OpenHarmony &#xff08;以下简称“OpenHarmony”&#xff09;创建一个Native C应用。应用采用“Native C”模板&#xff0c;实现了通过Node-API调用C标准库的功能。本示例通过调用C标准库接口来演示调用过程&#xff0c;…

MES助力灯具照明行业从制造到”智造”

现如今&#xff0c;LED照明行业产品更新换代太快&#xff0c;一个产品一两年不更新一下外观、材料&#xff0c;就会被对手超越。这直接导致LED产品标准化程度不够高&#xff0c;LED下游制造类厂家智能化生产程度普遍偏低。 加之大多属于劳动密集型产业&#xff0c;传统的依靠买…