macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错

一.背景

入手了apple macbook m1芯片版本,迫不及待的想配置开发环境进行开发调试,但是却遇到了如下Android Studio同步报错问题:
macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错

二.复现步骤

2.1.配置jdk

首先下载jdk:

https://cdn.azul.com/zulu/bin/zulu11.50.19-ca-jdk11.0.12-macosx_aarch64.dmg

(这里为什么要用zulu jdk呢,因为zulu提供了m1芯片版本的openjdk,如果使用oracle jdk或者其他的openjdk,则是intel架构的版本,虽然m1可直接运行,但是指令转换始终会有性能损耗,故选择了专门为m1架构适配编译的zulu jdk)
然后配置jdk环境

export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME

最后配置Studio的jdk为zulu的:
macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错

2.2.导入使用了AndResGuard的项目

配置好了m1的Android Studio开发环境后,开始导入一个使用了AndResGuard的项目,然后问题出现了:
macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错

三.问题定位

3.1日志分析

通过错误日志,可以看到是找不到SevenZip-osx-aarch_64.exe文件:

A problem occurred configuring project ':app'.
> Could not resolve all files for configuration ':app:AndResGuardLocatorSevenZip'.
   > Could not find SevenZip-osx-aarch_64.exe (com.tencent.mm:SevenZip:1.2.13).
     Searched in the following locations:
         https://mirrors.tencent.com/nexus/repository/maven-public/com/tencent/mm/SevenZip/1.2.13/SevenZip-1.2.13-osx-aarch_64.exe

但是一般maven仓库报错是报aar 或者jar找不到,这个exe是什么鬼,先拉源码断点调试下

3.2.断点调试

先clone AndResGuard源码

git clone https://github.com/shwenzhang/AndResGuard.git

导入Studio,做好gradle插件调试配置
macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错
这里主要是添加一个Remote JVM Debug;

(注意现在已经打开了两个项目,一个是使用了AndResGuard的项目,一个是AndResGuard源码项目)

这时候通过命令行cd到使用了AndResGuard插件的项目执行如下命令

./gradlew app:assembleDebug -Dorg.gradle.daemon=false -Dorg.gradle.debug=true

执行完,gradle会卡住,等待附加调试器,这时候切到上面添加了Remote JVM Debug的AndResGuard源码工程,打下断点,点击执行图中的按钮附加调试器:
macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错
然后可以看到执行到下断点的地方

macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错
通过断点看到内存数据,存在kv键值对:
classifier -> osx-aarch_64
osx-aarch_64是通过获取运行时系统特征获取到的:project.osdetector.classifier

单步调试完,发现代码执行到File file = config.fileCollection(dep).singleFile,就抛出了找不到SevenZip-osx-aarch_64.exe异常,所以应该是osx-aarch_64类型的exe不存在,check AndResGuard的7zip目录,确实不存在SevenZip-osx-aarch_64.exe文件:

macbook m1 JDK环境与AndResGuard编译遇到的Gradle同步报错
所以这里只需要提交下SevenZip-osx-aarch_64.exe文件就可以解决这个问题了

4.问题解决

下载https://www.7-zip.org/a/7z2103-mac.tar.xz,改名为SevenZip-osx-aarch_64.exe提交仓库,编译一个新的版本即可解决问题

上一篇:Android 插桩入门,2021Android春招面试真题


下一篇:React Native从入门到实战--常用导航器之堆栈导航器、底部导航器、顶部导航器、切换导航器、抽屉导航器