最近用到将三方jar和自己的class打包成dex的需求,研究了下,遇到了上些问题,最终成功了,记录下:
将jar放在ss目录下,将class放在与包名对应的目录下 com.example.myapplication.Heav.class
打包命令:
dx --dex --min-sdk-version=26 --output=C:\Users\Administrator\Desktop\ss\out.dex C:\Users\Administrator\Desktop\ss
(表示把ss目录下所有的文件都打包进去,不需要指定具体的文件)
最终成功打出包out.dex
在使用dx打包出来的dex时,有时会遇到这样的问题:Accessing hidden method Ljava/lang/invoke/LambdaMetafactory;->metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; (blocked, linking, denied)
这是因为代码里使用到了java8的lambada新特性,dx工具打包的不支持。此时要使用最新的打包工具d8。关于d8的使用参考这里:Java 字节码编译为Dex,d8比dx更好用!_d8和dx-CSDN博客