eleme / Amigo

A hotfix library for Android platform, and not just this...
Other
1.37k stars 213 forks source link

Unable to read AndroidManifest.xml #195

Closed WangManAndroid closed 7 years ago

WangManAndroid commented 7 years ago

12-27 15:17:52.688 16449-16449/com.example.testrxjava E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.testrxjava, PID: 16449 java.lang.RuntimeException: Unable to create application me.ele.amigo.Amigo: java.lang.RuntimeException: java.lang.IllegalArgumentException: param apkFile doesn't exist at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4425) at android.app.ActivityThread.access$1500(ActivityThread.java:138) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1259) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5095) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.RuntimeException: java.lang.IllegalArgumentException: param apkFile doesn't exist at me.ele.amigo.Amigo.onCreate(Amigo.java:94) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4422) at android.app.ActivityThread.access$1500(ActivityThread.java:138)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1259)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5095)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)  at dalvik.system.NativeStart.main(Native Method)  Caused by: java.lang.IllegalArgumentException: param apkFile doesn't exist at me.ele.amigo.PatchChecker.checkPatchApk(PatchChecker.java:39) at me.ele.amigo.PatchChecker.checkPatchAndCopy(PatchChecker.java:25) at me.ele.amigo.Amigo.work(Amigo.java:394) at me.ele.amigo.Amigo.work(Amigo.java:386) at clwang.chunyu.me.testdetailrxandroid.application.App.onCreate(App.java:36) at me.ele.amigo.Amigo.runOriginalApplication(Amigo.java:310) at me.ele.amigo.Amigo.onCreate(Amigo.java:59) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)  at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4422)  at android.app.ActivityThread.access$1500(ActivityThread.java:138)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1259)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5095)  at java.lang.reflect.Method.invokeNative(Native Method)  at java.lang.reflect.Method.invoke(Method.java:515)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)  at dalvik.system.NativeStart.main(Native Method)  12-27 15:17:52.698 1171-4654/? W/ActivityManager: Force finishing activity com.example.testrxjava/clwang.chunyu.me.testdetailrxandroid.activity.MainActivity 12-27 15:17:52.898 16449-16468/com.example.testrxjava D/dalvikvm: GC_FOR_ALLOC freed 320K, 12% free 3058K/3460K, paused 21ms, total 21ms 12-27 15:17:53.128 16449-16468/com.example.testrxjava D/zipro: Zip: EOCD not found, /data/data/com.example.testrxjava/files/amigo-sdk/amigo_patch_e43cbbcebed5a1690a17b39642c34b89.apk is not zip 12-27 15:17:53.128 16449-16468/? D/asset: failed to open Zip archive '/data/data/com.example.testrxjava/files/amigo-sdk/amigo_patch_e43cbbcebed5a1690a17b39642c34b89.apk' 12-27 15:17:53.128 16449-16468/? W/PackageParser: Unable to read AndroidManifest.xml of /data/data/com.example.testrxjava/files/amigo-sdk/amigo_patch_e43cbbcebed5a1690a17b39642c34b89.apk java.io.FileNotFoundException: AndroidManifest.xml at android.content.res.AssetManager.openXmlAssetNative(Native Method) at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:488) at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:456) at android.content.pm.PackageParser.parsePackage(PackageParser.java:528) at android.content.pm.PackageManager.getPackageArchiveInfo(PackageManager.java:2628) at me.ele.amigo.utils.PermissionChecker.checkPatchPermission(PermissionChecker.java:27) at me.ele.amigo.PatchChecker.checkPatchApk(PatchChecker.java:46) at me.ele.amigo.PatchChecker.checkPatchAndCopy(PatchChecker.java:25) at me.ele.amigo.Amigo.work(Amigo.java:394) at me.ele.amigo.Amigo.work(Amigo.java:386) at me.ele.amigo.sdk.AmigoSdk.applyPatchApk(AmigoSdk.java:220) at me.ele.amigo.sdk.AmigoSdk.access$800(AmigoSdk.java:33) at me.ele.amigo.sdk.AmigoSdk$2.onSucc(AmigoSdk.java:132) at me.ele.amigo.sdk.http.Http$1$3.run(Http.java:132) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.os.HandlerThread.run(HandlerThread.java:61) 12-27 15:17:53.148 1171-1191/? I/ActivityManager: Process com.example.testrxjava (pid 16449) has died.

JackCho commented 7 years ago
 12-27 15:17:53.128 16449-16468/com.example.testrxjava D/zipro: Zip: EOCD not found, /data/data/com.example.testrxjava/files/amigo-sdk/amigo_patch_e43cbbcebed5a1690a17b39642c34b89.apk is not zip
12-27 15:17:53.128 16449-16468/? D/asset: failed to open Zip archive '/data/data/com.example.testrxjava/files/amigo-sdk/amigo_patch_e43cbbcebed5a1690a17b39642c34b89.apk'
12-27 15:17:53.128 16449-16468/? W/PackageParser: Unable to read AndroidManifest.xml of /data/data/com.example.testrxjava/files/amigo-sdk/amigo_patch_e43cbbcebed5a1690a17b39642c34b89.apk
java.io.FileNotFoundException: AndroidManifest.xml
at android.content.res.AssetManager.openXmlAssetNative(Native Method)
at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:488)
at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:456)
at android.content.pm.PackageParser.parsePackage(PackageParser.java:528)
at android.content.pm.PackageManager.getPackageArchiveInfo(PackageManager.java:2628)
at me.ele.amigo.utils.PermissionChecker.checkPatchPermission(PermissionChecker.java:27)
at me.ele.amigo.PatchChecker.checkPatchApk(PatchChecker.java:46)
at me.ele.amigo.PatchChecker.checkPatchAndCopy(PatchChecker.java:25)
at me.ele.amigo.Amigo.work(Amigo.java:394)
at me.ele.amigo.Amigo.work(Amigo.java:386)
at me.ele.amigo.sdk.AmigoSdk.applyPatchApk(AmigoSdk.java:220)
at me.ele.amigo.sdk.AmigoSdk.access$800(AmigoSdk.java:33)
at me.ele.amigo.sdk.AmigoSdk$2.onSucc(AmigoSdk.java:132)
at me.ele.amigo.sdk.http.Http$1$3.run(Http.java:132)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.os.HandlerThread.run(HandlerThread.java:61)
12-27 15:17:53.148 1171-1191/? I/ActivityManager: Process com.example.testrxjava (pid 16449) has died.

你确认下你打包的要patch.apk是否是可安装的,从日志看你的apk不是个有效的文件

WangManAndroid commented 7 years ago

@JackCho 如果我把两个apk文件分别上传 一个是原始apk,一个是补丁apk 这两个apk的唯一区别是:补丁Apk在主界面多一个按钮。 回答你的问题,这个两个apk是可以安装的(已经验证)

JackCho commented 7 years ago

对的,你打包时是使用的Jack么,你尝试关闭一下。如果不是,建议你把你的demo push到你 private repo,这样方便看下你的代码。重现比较困难,不用提好几个issue,一个里面讨论就可以了

WangManAndroid commented 7 years ago

我打包用的是AS里面自带的啊 Build>Generate signed apk @JackCho

JackCho commented 7 years ago

@wm1993 我看了你的这个test repo,应该是你使用姿势有问题。我给你提了一个PR,里面有个打好包的apk,你可以尝试运行下看看结果。

Amigo Platform后台上传两个APK。

流程如下:

正常情况下在客户端生成的补丁APK和你自己在后台上传的APK要一模一样,你可以check一下二者的md5。

还有AmigoSdk已经帮你封装好了所有逻辑,你不需要再使用其他姿势。Amigo所有源码都是开源的,包括AmigoSdk,里面其实已经是有源码在的了,如对源码有疑问,请在此进行提问。遇到使用姿势问题,请参考此Repo的demo