godlikewangjun / dexknife-wj

apk加固插件 带签名校验、dex加密、资源混淆
397 stars 110 forks source link

华为手机android4.4.2报DexOpt问题 #4

Closed smalljames closed 7 years ago

smalljames commented 7 years ago

qq 20170623163910 如上图,会报DexOpt: source file mod time mismatch问题,目前发现在4.4系统上有这个问题启动不了,另外有一台6.0手机没有报这个错能正常启动。

我们的apk方法数超过65w,执行过dex分包,再用加固方法加固,就会出现这个问题。

godlikewangjun commented 7 years ago

你用的什么分包,插件里面有分包,低版本的默认是不支持分包,高版本支持方法数超过的。你可能是没有正确使用分包。没有加固的是正常的吗?

godlikewangjun commented 7 years ago

我测试过低版本的没有问题,最好是用插件里面那个分包吧

smalljames commented 7 years ago

我使用的是这个 compile 'com.android.support:multidex:1.0.0'分包

smalljames commented 7 years ago

没有加固之前的分包是正常的。

godlikewangjun commented 7 years ago

分包还有问题吗

smalljames commented 7 years ago

用了最新版本1.1.1版本,包大小比较正常了,但加固后分包时还是提示classes3.dex错误,如下图: qq 20170627145825

smalljames commented 7 years ago

这个apk本身还没有分包,加固前和加固后文件结构如下图,加固后的文件夹里并没有classes3.dex: qq 20170627151015

smalljames commented 7 years ago

用1.1.1版本加固,还有一个问题,提示libwjshell_jiagu.so找不到报错: 06-27 16:47:56.864 5527-5527/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.shsh.toutiao, PID: 5527 java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.shsh.toutiao-1/base.apk"],nativeLibraryDirectories=[/data/app/com.shsh.toutiao-1/lib/arm, /data/app/com.shsh.toutiao-1/base.apk!/lib/armeabi, /vendor/lib, /system/lib]]] couldn't find "libwjshell_jiagu.so" at java.lang.Runtime.loadLibrary(Runtime.java:379) at java.lang.System.loadLibrary(System.java:1086) at com.qianfandu.utils.ApkToolPlus.a(SourceFile:31) at com.qianfandu.ProxyApplication.attachBaseContext(SourceFile:32) at android.app.Application.attach(Application.java:187) at android.app.Instrumentation.newApplication(Instrumentation.java:998) at android.app.Instrumentation.newApplication(Instrumentation.java:982) at android.app.LoadedApk.makeApplication(LoadedApk.java:614) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4759) at android.app.ActivityThread.access$1600(ActivityThread.java:165) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:150) at android.app.ActivityThread.main(ActivityThread.java:5546) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

smalljames commented 7 years ago

右边的apk是找不到libwjshell_jiagu.so,左边的apk是成功加载的,流程都是一样,但不知道为什么加固后libwjshell_jiagu.so没有放到lib里面,唯一不同的大小不一样,右边的apk有5M,左边的apk只有600K。 qq 20170627174209

smalljames commented 7 years ago

知道出现这种现象规律了,如果apk中lib前提含有armeabi,x86有其他.so文件,这个libwjshell_jiagu.so就不能拷贝到lib里面了,就会出现这种现象,希望能优化一下这个1.1.1版本

godlikewangjun commented 7 years ago

好的 我试下

smalljames commented 7 years ago

找到这个问题原因了,在JiaGu.java里这个libwjshell_jiagu.so没有对应过来,还是写之前的libapktoolplus_jiagu.so,如图: qq 20170628093522

godlikewangjun commented 7 years ago

。。。改了名字忘了改了 改下就好了

godlikewangjun commented 7 years ago

你分包还是dex找不到的问题吗

godlikewangjun commented 7 years ago

重新上传了1.1.1 删除本地的缓存重新下载就好了。。

smalljames commented 7 years ago

.so问题已经好了,分包的问题我稍候再反馈哈,刚借了好几台不一样的手机验证这个分包的问题

smalljames commented 7 years ago

android 4.4手机已经可以跑得起来了。 在华为D2-2010机型(android 4.1.2 API 16)手机上,提示如下错误 qq 20170628105350

godlikewangjun commented 7 years ago

其他版本有问题吗? 我看模拟器上是没有这个错误的 这个版本太老没有手机测试

smalljames commented 7 years ago

其他没有问题哈,就是4.1有问题

smalljames commented 7 years ago

在4.1系统上android.util.ArrayMap这个类不支持,我暂时让4.1系统不跑这段代码。