apk 反编译 上的填坑之路

  由于解决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不能使用,暂时还没解决  后面再看一下为什么。

 

 

又发现一个反编译利器:

apktools 这个将baksmail和smail两个的工作都做了,同时也打包成功。

下面将其整理一下:

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

 

后面还有很多需要记录,今天先到这里。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值