Open linjson opened 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类找不到
你这个是分包问题,插件里面有分包功能,你的dex有几个,如果gradle版本 和 demo的不一致的话需要升级插件。暂时可以自己升下级
分包功能具体是做什么的,跟multiDexEnabled这个一样吗
不一样,具体参见说明里面集成的那个插件或者百度自定义分包。
我在解壳程序中,直接使用demo.apk(里面只包含classes.dex,classes2.dex,classes3.dex),达不到分包加载的效果吗?
你推送的包不一定被分到你使用的包中,比如dex1你要使用这个推送,但是推送被分到dex2,现在dex2还没有加载完所以报错。
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里找
这个错误就是分包的问题,你可以延迟注册推送那些也没有什么影响,如果你不手动分包的话,包太大的话不用这个插件也是一样的效果,已经踩过坑了所以才会集成这个插件。
可以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
能跟我说下你的插件分包,具体是在哪个类文件里吗,是在加固期间进行的分包吗
分包不是强制性了 开启了配置就行。不是在加固期间,编译apk的时候详情可以看项目说明里面集成的分包插件说明。加固是根据apktool来的,如果失败可能是apktool反编译不了。还有事没有配置对,没有编译不存在apk不能加固。
代码跟踪
/**
* 加固
* @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了
加固的jiagu.zip你填对了吗
你是指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();
有生成成功
生成后的jiagu.zip里面只有smali,libs两个文件夹
你看看配置的jiagu.zip的文件路径对不对
路径是对的,文件路径是copy的
教我怎么处理分包吧,不然BroadcastReceiver这个老找不到,好苦恼
我的应用共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里找
BroadcastReceiver类该不会是要分包到宿主里的dex吧?
。。。。。难道你写到壳项目里面的吗?
BroadcastReceiver类吗?没啊,我是写在插件里的
apk能发下吗?我看看
公司的项目不太方便发
本来想用你的DEMO,但死活没加固成功
那你就只有自己找看看 我用的时候没有出现过。demo我刚才看了,运行了没有问题。。。你是不是改了什么,不要升级gradle目前支持3.x的,版本还没有更新
我用的是 classpath 'com.library.wj:dexknife-wj:1.1.1'//分包
加个Q吧,我的1714537224,我把你改完DEMO发你
哪里的广播?什么错误日志