由于解决360插件化,使用第三方的aar文件,插件独立版的apk编译没有问题,只在安装打开时报错,在这里吐槽一下360的插件化开发,这么明显的一
java.lang.VerifyError: Verifier rejected class com.llvision.glass3.core.lcd.LCDService: void com.llvision.glass3.core.lcd.LCDService.onCreate() failed to verify: void com.llvision.glass3.core.lcd.LCDService.onCreate(): [0x66] register v1 has type Reference: java.lang.Object but expected Precise Reference: android.support.v4.content.LocalBroadcastManager (declaration of 'com.llvision.glass3.core.lcd.LCDService' appears in /data/app/com.example.llapplication-1/split_lib_dependencies_apk.apk)
11-11 20:30:10.693986 3761 3761 D AEE_AED : at java.lang.Class.newInstance(Native Method)
11-11 20:30:10.693986 3761 3761 D AEE_AED : at android.app.ActivityThread.handleCreateService(ActivityThread.java:3233)
11-11 20:30:10.693986 3761 3761 D AEE_AED : at android.app.ActivityThread.-wrap5(ActivityThread.java)
11-11 20:30:10.693986 3761 3761 D AEE_AED : at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
11-11 20:30:10.693986 3761 3761 D AEE_AED : at android.os.Handler.dispatchMessage(Handle
11-11 20:30:10.694209 3761 3761 I AEE_AED : Process: com.example.llapplication:llvision
个bug难道你们就不解决了吗?
由于使用360插件在获取android.support.v4.content.LocalBroadcastManager这个类型属性时一直返回的是Obj类型,未能返回正确的类型,所以需要反编译修改一下。
修改启发受到另一位博主的启发,在此感谢:原文链接https://juejin.im/post/5aa3571651882555635decdb
废话少说:
记录反编译上的坑:
首先下载baksmail和smail等反编译jar,地址:https://bitbucket.org/JesusFreke/smali/downloads/
通常的反编译工具:
Baksmali:https://github.com/JesusFreke/smali
Apktool:https://ibotpeaches.github.io/Apktool/
dex2jar:https://sourceforge.net/projects/dex2jar/
同时:
在编译的过程按照网上的教程一步步来:
最后一直报错:
Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
at com.beust.jcommander.JCommander.parseValues(JCommander.java:725)
at com.beust.jcommander.JCommander.parse(JCommander.java:304)
at com.beust.jcommander.JCommander.parse(JCommander.java:287)
at org.jf.baksmali.Main.main(Main.java:90)
最后解决办法是
1.将classes.dex反编译成.smali
# java -jar baksmali-2.2.7.jar -o test baksmali-2.2.7.jar classes.dex
报错:
Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
at com.beust.jcommander.JCommander.parseValues(JCommander.java:725)
at com.beust.jcommander.JCommander.parse(JCommander.java:304)
at com.beust.jcommander.JCommander.parse(JCommander.java:287)
at org.jf.baksmali.Main.main(Main.java:90)
2.解决
# java -jar baksmali-2.2.7.jar disassemble classes.dex
使用smail将生成的smail文件转化为dex文件:
d:\sdk\Sdk\Sdk\tools>java -jar smali-2.3.4.jar assemble out/ -o classes.dex
然后将classes.dex文件放入到解压包中,重新打包成apk。
上面说的生成apk不能使用,暂时还没解决 后面再看一下为什么。
又发现一个反编译利器:
下面将其整理一下:
1.下载apktool.jar和apktool.dat,并将其放到同一个文件夹下例如:Apktools
下载之后的apktool_XXX.jar一定要修改成apktool.jar,才继续使用。
Apktool官网:https://ibotpeaches.github.io/Apktool/
2.配置其变量环境:
配置环境就不废话了;可参考下面第一个链接:
3.正式开始:
将打包成功的apk放到,apktools文件夹下:
执行一下命令进行反编译:
F:\apktools\apktools>apktool d -r app-release.apk
I: Using Apktool 2.4.0 on app-release.apk
I: Copying raw resources...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
记住一定要加上-r 不然会回编时会出现找不到apktool.yml的问题;
回编译:
将修改过的工程回编译,执行以下命名:
F:\apktools\apktools>apktool b app-release -o newll.apk
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Copying raw resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...
编译成功之后这个apk依然不能使用,还需加上秘钥之后才能安装成功,这个时候需要将秘钥放到apktools文件夹下;
执行以下命令:
F:\apktools\apktools>jarsigner -verbose -keystore llkeystore.jks -signedjar newllq.apk newll.apk llkeystore
执行过程中需要输入秘钥密码,然后再点击回车开始打包。
参考博客:https://blog.csdn.net/sonnyjack/article/details/79273023
https://blog.csdn.net/niuba123456/article/details/85868949
后面还有很多需要记录,今天先到这里。