Moosphan / app-code-obfuscation

Android plugin code obfuscation tool, based on ASM, implants meaningless code during compilation.
Apache License 2.0
38 stars 4 forks source link

打包过一次后,再次打包会报错 #6

Closed vip7kk closed 10 months ago

vip7kk commented 10 months ago

codeGuard { //开启插件 enable = true maxMethodCount = 26 maxFieldCount = 26 maxCodeLineCount = 26 generatedMethodCount = 26 genClassCount = 26 } 多次打包有时候会报错,目前第一次打包即使不开混淆打包出来运行会闪退,我反编译看是报错提示找不到的包名和类丢失了,我下载仓库demo打包运行也一样,报错日志:java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/l/d/w/h/Xl; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:4) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971) at android.app.ActivityThread.access$1600(ActivityThread.java:259) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:230) at android.app.ActivityThread.main(ActivityThread.java:7901) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) Caused by: java.lang.ClassNotFoundException: Didn't find class "cn.xcolyu.kceurni.l.d.w.h.Xl" on path: DexPathList[[zip file "/data/app/cn.xcolyu.kceurni-uXo3xuB3gg8sIv4E-cEYhw==/base.apk"],nativeLibraryDirectories=[/data/app/cn.xcolyu.kceurni-uXo3xuB3gg8sIv4E-cEYhw==/lib/arm64, /system/lib64, /system/product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:4)  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971)  at android.app.ActivityThread.access$1600(ActivityThread.java:259)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:230)  at android.app.ActivityThread.main(ActivityThread.java:7901)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)  2024-01-09 13:56:44.057 32630-32630 AndroidRuntime cn.xcolyu.kceurni E FATAL EXCEPTION: main Process: cn.xcolyu.kceurni, PID: 32630 java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/z/c/t/Zd; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:5) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971) at android.app.ActivityThread.access$1600(ActivityThread.java:259) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:230) at android.app.ActivityThread.main(ActivityThread.java:7901) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) Caused by: java.lang.ClassNotFoundException: Didn't find class "cn.xcolyu.kceurni.z.c.t.Zd" on path: DexPathList[[zip file "/data/app/cn.xcolyu.kceurni-wDnYiGPgRyC6j945qojAkA==/base.apk"],nativeLibraryDirectories=[/data/app/cn.xcolyu.kceurni-wDnYiGPgRyC6j945qojAkA==/lib/arm64, /system/lib64, /system/product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312)

indieexplore commented 10 months ago

@vip7kk 好的,我看下,是 release 包有问题吗

vip7kk commented 10 months ago

@vip7kk 好的,我看下,是 release 包有问题吗

我找到问题了,我设置processingPackages后打包就不会闪退,但是重复打包编译失败的问题还是会出现,而且打包还会在我源码文件里面生成垃圾代码,然后生成的垃圾代码调用的方法参数全是0,最好是随机生成数字,如果打包报错失败了,我需要把源码里生成的垃圾代码删掉再clean后重新打包才行

indieexplore commented 10 months ago

@vip7kk 找到原因了,晚会发个版本

indieexplore commented 10 months ago

@vip7kk 好的,我看下,是 release 包有问题吗

我找到问题了,我设置processingPackages后打包就不会闪退,但是重复打包编译失败的问题还是会出现,而且打包还会在我源码文件里面生成垃圾代码,然后生成的垃圾代码调用的方法参数全是0,最好是随机生成数字,如果打包报错失败了,我需要把源码里生成的垃圾代码删掉再clean后重新打包才行

这个问题我后面看看怎么优化下🤔

Moosphan commented 10 months ago

@vip7kk 好的,我看下,是 release 包有问题吗

我找到问题了,我设置processingPackages后打包就不会闪退,但是重复打包编译失败的问题还是会出现,而且打包还会在我源码文件里面生成垃圾代码,然后生成的垃圾代码调用的方法参数全是0,最好是随机生成数字,如果打包报错失败了,我需要把源码里生成的垃圾代码删掉再clean后重新打包才行

0.1.1-beta 版本试下,修复了闪退和同名类覆盖问题

vip7kk commented 10 months ago

@vip7kk 好的,我看下,是 release 包有问题吗

我找到问题了,我设置processingPackages后打包就不会闪退,但是重复打包编译失败的问题还是会出现,而且打包还会在我源码文件里面生成垃圾代码,然后生成的垃圾代码调用的方法参数全是0,最好是随机生成数字,如果打包报错失败了,我需要把源码里生成的垃圾代码删掉再clean后重新打包才行

0.1.1-beta 版本试下,修复了闪退和同名类覆盖问题

试了下还是会闪退....,还是报错包和类丢失

indieexplore commented 10 months ago

@vip7kk 还是同样的日志吗,我这边用项目验证过了,没出现问题,之前是因为接口中插入了变量导致的,clean下再试试看

vip7kk commented 10 months ago

@vip7kk 还是同样的日志吗,我这边用项目验证过了,没出现问题,之前是因为接口中插入了变量导致的,clean下再试试看

我试了好多次,有的时候正常,有的时候就闪退

indieexplore commented 10 months ago

@vip7kk 还是同样的日志吗,我这边用项目验证过了,没出现问题,之前是因为接口中插入了变量导致的,clean下再试试看

我试了好多次,有的时候正常,有的时候就闪退

可以在debug下打个包,logcat 切换为 No filters 模式,然后关注下 dex2oatArtService 两个 TAG,看下有无相关信息

vip7kk commented 10 months ago

@vip7kk 还是同样的日志吗,我这边用项目验证过了,没出现问题,之前是因为接口中插入了变量导致的,clean下再试试看

我试了好多次,有的时候正常,有的时候就闪退

可以在debug下打个包,logcat 切换为 No filters 模式,然后关注下 dex2oatArtService 两个 TAG,看下有无相关信息

这2个TAG没看到相关日志,报错日志: E Access denied finding property "ro.vendor.net.upload.benchmark.default" 2024-01-10 11:30:24.709 25661-25661 AndroidRuntime cn.xcolyu.kceurni E FATAL EXCEPTION: main Process: cn.xcolyu.kceurni, PID: 25661 java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/i/z/Re; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:5) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971) at android.app.ActivityThread.access$1600(ActivityThread.java:259) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:230) at android.app.ActivityThread.main(ActivityThread.java:7901) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) Caused by: java.lang.ClassNotFoundException: Didn't find class "cn.xcolyu.kceurni.i.z.Re" on path: DexPathList[[zip file "/data/app/cn.xcolyu.kceurni-ZvWz0fuMyceop2paLC5z8Q==/base.apk"],nativeLibraryDirectories=[/data/app/cn.xcolyu.kceurni-ZvWz0fuMyceop2paLC5z8Q==/lib/arm64, /system/lib64, /system/product/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:5)  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971)  at android.app.ActivityThread.access$1600(ActivityThread.java:259)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:230)  at android.app.ActivityThread.main(ActivityThread.java:7901)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)  2024-01-10 11:30:31.059 25792-25792 libc pid-25792 E Access denied finding property "ro.vendor.net.upload.benchmark.default"

vip7kk commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

indieexplore commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

vip7kk commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

indieexplore commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

是方法内的代码混淆被优化掉了是吗🤔

vip7kk commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

是方法内的代码混淆被优化掉了是吗🤔

看起来好像是的,全没了...

indieexplore commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

是方法内的代码混淆被优化掉了是吗🤔

看起来好像是的,全没了...

是不是开了什么混淆配置,优化代码如内联之类的

vip7kk commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

是方法内的代码混淆被优化掉了是吗🤔

看起来好像是的,全没了...

是不是开了什么混淆配置,优化代码如内联之类的

我去掉了所有混淆配置,只留了第三方库keep混淆规则,打出来的包垃圾代码没被优化了,但是安装运行报错:java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/i/d/u/Dn; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:4) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1285) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7257) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:240) at android.os.Looper.loop(Looper.java:351) at android.app.ActivityThread.main(ActivityThread.java:8423) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013) Caused by: java.lang.ClassNotFoundException: cn.xcolyu.kceurni.i.d.u.Dn

indieexplore commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

是方法内的代码混淆被优化掉了是吗🤔

看起来好像是的,全没了...

是不是开了什么混淆配置,优化代码如内联之类的

我去掉了所有混淆配置,只留了第三方库keep混淆规则,打出来的包垃圾代码没被优化了,但是安装运行报错:java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/i/d/u/Dn; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:4) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1285) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7257) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:240) at android.os.Looper.loop(Looper.java:351) at android.app.ActivityThread.main(ActivityThread.java:8423) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013) Caused by: java.lang.ClassNotFoundException: cn.xcolyu.kceurni.i.d.u.Dn

@vip7kk 如果可以的话,可以提供下Android proguard混淆配置(keep规则无需提供)以及第三方插件混淆配置,以及去敏后的全量log,我来集中看下

vip7kk commented 10 months ago

我发现一个诡异的问题,出现运行闪退的情况,clean后关掉当前项目,再重新打开运行就正常了,我试了3次都是这样,然后开了混淆后,发现生成垃圾代码效果很差了

开混淆后效果很差是什么意思

image 第一张图是开了混淆后的效果 image 第二张是没开混淆的效果

是方法内的代码混淆被优化掉了是吗🤔

看起来好像是的,全没了...

是不是开了什么混淆配置,优化代码如内联之类的

我去掉了所有混淆配置,只留了第三方库keep混淆规则,打出来的包垃圾代码没被优化了,但是安装运行报错:java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/i/d/u/Dn; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:4) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1285) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7257) at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loopOnce(Looper.java:240) at android.os.Looper.loop(Looper.java:351) at android.app.ActivityThread.main(ActivityThread.java:8423) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013) Caused by: java.lang.ClassNotFoundException: cn.xcolyu.kceurni.i.d.u.Dn

@vip7kk 如果可以的话,可以提供下Android proguard混淆配置(keep规则无需提供)以及第三方插件混淆配置,以及去敏后的全量log,我来集中看下

混淆配置

-dontshrink

指定重新打包,所有包重命名,这个选项会进一步模糊包名,将包里的类混淆成n个再重新打包到一个个的package中

-flattenpackagehierarchy

优化时允许访问并修改有修饰符的类和类的成员

-allowaccessmodification

混淆前后的映射

-printmapping map.txt

不跳过(混淆) jars中的 非public classes 默认选项

-dontskipnonpubliclibraryclassmembers

忽略警告

-ignorewarnings

指定代码的压缩级别

-optimizationpasses 9

不使用大小写混合类名

-dontusemixedcaseclassnames

混淆类名之后,对使用Class.forName('className')之类的地方进行相应替代

-adaptclassstrings

不去忽略非公共的库类

-dontskipnonpubliclibraryclasses

不启用优化 不优化输入的类文件

-dontoptimize

不预校验

-dontpreverify

混淆时是否记录日志

-verbose -repackageclasses -optimizations !code/simplification/arithmetic,!field/,!class/merging/ -assumenosideeffects class android.util.Log { public static int v(...); public static int d(...); public static int i(...); public static int w(...); public static int e(...); }

日志

java.lang.NoClassDefFoundError: Failed resolution of: Lcn/xcolyu/kceurni/x/w/x/e/Ab; at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:2) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971) at android.app.ActivityThread.access$1600(ActivityThread.java:259) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:230) at android.app.ActivityThread.main(ActivityThread.java:7901) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) Caused by: java.lang.ClassNotFoundException: cn.xcolyu.kceurni.x.w.x.e.Ab at cn.xcolyu.kceurni.bc.onCreate(Unknown Source:2)  at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1236)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6971)  at android.app.ActivityThread.access$1600(ActivityThread.java:259)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2127)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:230)  at android.app.ActivityThread.main(ActivityThread.java:7901)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034) 

经过验证用仓库下载的demo一样闪退 codeGuard { enable = true processingPackages = hashSetOf( "com.dorck.app.obfuscate.MainActivity" ) maxMethodCount = 70 maxFieldCount = 70 maxCodeLineCount = 70 generatedMethodCount = 70 genClassCount = 70 }

indieexplore commented 10 months ago

@vip7kk 把 -allowaccessmodification 注释掉看看,另外,你处理的包中存在注解类吗

vip7kk commented 10 months ago

@vip7kk 把 -allowaccessmodification 注释掉看看,另外,你处理的包中存在注解类吗

应该不是混淆配置的问题,我直接用仓库demo打包安装一样会闪退 codeGuard { enable = true processingPackages = hashSetOf( "com.dorck.app.obfuscate.MainActivity" ) maxMethodCount = 70 maxFieldCount = 70 maxCodeLineCount = 70 generatedMethodCount = 70 genClassCount = 70 }

indieexplore commented 10 months ago

@vip7kk 晚上打个版本,找到问题了

Moosphan commented 10 months ago

@vip7kk 试试 0.1.2-beta 版本

vip7kk commented 10 months ago

@vip7kk 试试 0.1.2-beta 版本

不闪退了,但是又有新的问题,就是library也集成库一起打包会报错:Type cn.xcolyu.kceurni.gfsffg.c.a.Yl is defined multiple times: D:\g01\app2\build\intermediates\runtime_library_classes_jar\release\classes.jar:cn/xcolyu/kceurni/gfsffg/c/a/Yl.class, D:\g01\app\build\intermediates\transforms\CodeGuardTransform\release\2\cn\xcolyu\kceurni\gfsffg\c\a\Yl.class

indieexplore commented 10 months ago

@vip7kk 目前仅支持单个模块集成,后面改一下支持jar

Moosphan commented 10 months ago

@vip7kk 更新到 0.1.3-beta,如果构建失败会自动清除生成的随机类

Moosphan commented 10 months ago

如有问题可以另提 issue,本问题关闭