godlikewangjun / dexknife-wj

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

启动插件的BroadcastReceiverr失败 #14

Open linjson opened 6 years ago

godlikewangjun commented 6 years ago

哪里的广播?什么错误日志

linjson commented 6 years ago

写在宿主里的androidmanifest.xml

<receiver
            android:name="com.push.XiaoMiPushMessageReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE"/>
            </intent-filter>
            <!--<intent-filter>-->
                <!--<action android:name="com.xiaomi.mipush.ERROR"/>-->
            <!--</intent-filter>-->
        </receiver>

com.push.XiaoMiPushMessageReceiver类在插件里, Application反射后执行onCreate,提示XiaoMiPushMessageReceiver类找不到

godlikewangjun commented 6 years ago

你这个是分包问题,插件里面有分包功能,你的dex有几个,如果gradle版本 和 demo的不一致的话需要升级插件。暂时可以自己升下级

linjson commented 6 years ago

分包功能具体是做什么的,跟multiDexEnabled这个一样吗

godlikewangjun commented 6 years ago

不一样,具体参见说明里面集成的那个插件或者百度自定义分包。

linjson commented 6 years ago

我在解壳程序中,直接使用demo.apk(里面只包含classes.dex,classes2.dex,classes3.dex),达不到分包加载的效果吗?

godlikewangjun commented 6 years ago

你推送的包不一定被分到你使用的包中,比如dex1你要使用这个推送,但是推送被分到dex2,现在dex2还没有加载完所以报错。

linjson commented 6 years ago

Caused by: java.lang.ClassNotFoundException: Didn't find class "com.push.XiaoMiPushMessageReceiver" on path: DexPathList[[zip file "/data/app/com.demo-JbLZGBqAZ3jxaPYr76gbaQ==/base.apk"], 报这个错,感觉写在宿主里的androidmanifest.xml的receiver组件只会从宿主里的dex里找

godlikewangjun commented 6 years ago

这个错误就是分包的问题,你可以延迟注册推送那些也没有什么影响,如果你不手动分包的话,包太大的话不用这个插件也是一样的效果,已经踩过坑了所以才会集成这个插件。

linjson commented 6 years ago

可以QQ联系吗, 我用你的Demo测试加固失败了

DEBUG:2018-03-07 11:43:58.(Cmd.java:48): I: Copying unknown files...
DEBUG:2018-03-07 11:43:58.(Cmd.java:48): I: Copying original files...
正在加固
加固失败

BUILD SUCCESSFUL
linjson commented 6 years ago

能跟我说下你的插件分包,具体是在哪个类文件里吗,是在加固期间进行的分包吗

godlikewangjun commented 6 years ago

分包不是强制性了 开启了配置就行。不是在加固期间,编译apk的时候详情可以看项目说明里面集成的分包插件说明。加固是根据apktool来的,如果失败可能是apktool反编译不了。还有事没有配置对,没有编译不存在apk不能加固。

linjson commented 6 years ago

代码跟踪

 /**
     * 加固
     * @param decompileDir
     * @return
     */
    private static boolean jiagu(File decompileDir) {
        if (!jiaguZip.exists()) {
            if (!JIAGU_ZIP_PATH.contains(":")) {
                if (!ClassHelper.releaseResourceToFile(JIAGU_ZIP_PATH, jiaguZip)) {
                    return false;
                }
        .......
    }

是因为ClassHelper.releaseResourceToFile这个返回false,里面应该是取资源为null了

godlikewangjun commented 6 years ago

加固的jiagu.zip你填对了吗

linjson commented 6 years ago

你是指jiagu.zip生成的是否正确吗?


        UpdateJiaGuTask task = new UpdateJiaGuTask();
        AppManager.APKTOOLJARPATH="/Volumes/project/github/dexknife-wj/apktool.jar";

        task.setProjectDir(new File("/Volumes/project/github/dexknife-wj/myapplication/build/outputs/apk/myapplication-debug.apk"));

        String packagePath = JiaGu.class.getPackage().getName().replaceAll("\\.", "/");
        task.addOutFile(new File("/Volumes/project/github/dexknife-wj/" + UpdateJiaGuTask.JIAGU_ZIP));

        task.execute();

有生成成功

linjson commented 6 years ago

生成后的jiagu.zip里面只有smali,libs两个文件夹

godlikewangjun commented 6 years ago

你看看配置的jiagu.zip的文件路径对不对

linjson commented 6 years ago

路径是对的,文件路径是copy的

linjson commented 6 years ago

教我怎么处理分包吧,不然BroadcastReceiver这个老找不到,好苦恼

godlikewangjun commented 6 years ago

https://github.com/TangXiaoLv/Android-Easy-MultiDex 是集成了这个插件

linjson commented 6 years ago

我的应用共3个classes.dex,分包成功了,BroadcastReceiver在classes.dex文件里,但还是报


Caused by: java.lang.ClassNotFoundException: Didn't find class 

"com.push.XiaoMiPushMessageReceiver" on path: DexPathList[[zip file "/data/app/com.demo-

JbLZGBqAZ3jxaPYr76gbaQ==/base.apk"],

感觉写在宿主里的androidmanifest.xml的receiver组件还是会从宿主里的dex里找

linjson commented 6 years ago

BroadcastReceiver类该不会是要分包到宿主里的dex吧?

godlikewangjun commented 6 years ago

。。。。。难道你写到壳项目里面的吗?

linjson commented 6 years ago

BroadcastReceiver类吗?没啊,我是写在插件里的

godlikewangjun commented 6 years ago

apk能发下吗?我看看

linjson commented 6 years ago

公司的项目不太方便发

linjson commented 6 years ago

本来想用你的DEMO,但死活没加固成功

godlikewangjun commented 6 years ago

那你就只有自己找看看 我用的时候没有出现过。demo我刚才看了,运行了没有问题。。。你是不是改了什么,不要升级gradle目前支持3.x的,版本还没有更新

linjson commented 6 years ago

我用的是 classpath 'com.library.wj:dexknife-wj:1.1.1'//分包

linjson commented 6 years ago

加个Q吧,我的1714537224,我把你改完DEMO发你