VirtualAPK
VirtualAPK copied to clipboard
按照正常流程走的,解析不正常
W/System.err: android.content.pm.PackageParser$PackageParserException: Failed to parse /storage/emulated/0/Test.apk
07-06 20:29:43.306 1080-1080/? W/System.err: at android.content.pm.PackageParser.parseApkLite(PackageParser.java:1415)
07-06 20:29:43.306 1080-1080/? W/System.err: at android.content.pm.PackageParser.parseMonolithicPackageLite(PackageParser.java:728)
07-06 20:29:43.306 1080-1080/? W/System.err: at android.content.pm.PackageParser.parseMonolithicPackage(PackageParser.java:919)
07-06 20:29:43.306 1080-1080/? W/System.err: at android.content.pm.PackageParser.parsePackage(PackageParser.java:834)
07-06 20:29:43.306 1080-1080/? W/System.err: at android.content.pm.PackageParser.parsePackage(PackageParser.java:827)
07-06 20:29:43.306 1080-1080/? W/System.err: at com.didi.virtualapk.a.e.a(PackageParserCompat.java:44)
07-06 20:29:43.306 1080-1080/? W/System.err: at com.didi.virtualapk.a.b.a(PackageParserCompat.java:32)
07-06 20:29:43.306 1080-1080/? W/System.err: at com.didi.virtualapk.internal.c.
测试手机为华为P9
@fuzhijun52058237 请帮忙核对下,插件apk是否有效,检测插件apk中是否有AndroidManifest.xml文件。
Caused by: java.io.FileNotFoundException: AndroidManifest.xml
我这边看到是存在的
@singwhatiwanna
这怎么解决的, 华为荣耀9也是这个问题
有人解决吗?我也遇到了,荣耀8机子
请提供下完整的log日志,范围从app启动至报错,log级别V,所有进程。 华为机型开启V级别log,请参考 http://blog.csdn.net/tenfyguo/article/details/46694729
华为荣耀8,android8.0系统遇到同样的问题,log如下:
Failed to parse /storage/emulated/0/pluginradio_release.apk
java.io.FileNotFoundException: AndroidManifest.xml
at android.content.res.AssetManager.openXmlAssetNative(Native Method)
at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:862)
at android.content.res.AssetManager.openXmlResourceParser(AssetManager.java:830)
at android.content.pm.PackageParser.parseApkLite(PackageParser.java:1771)
at android.content.pm.PackageParser.parseMonolithicPackageLite(PackageParser.java:913)
..........................................后面log就不在打印了.................................
然后定位到最终错误的位置调用的方法如下:
/** * {@hide} * Retrieve a non-asset as a compiled XML file. Not for use by * applications. * * @param cookie Identifier of the package to be opened. * @param fileName Name of the asset to retrieve. */ /*package*/ final XmlBlock openXmlBlockAsset(int cookie, String fileName) throws IOException { synchronized (this) { if (!mOpen) { throw new RuntimeException("Assetmanager has been closed"); } long xmlBlock = openXmlAssetNative(cookie, fileName); if (xmlBlock != 0) { XmlBlock res = new XmlBlock(this, xmlBlock); incRefsLocked(res.hashCode()); return res; } } throw new FileNotFoundException("Asset XML file: " + fileName); }
这是android 8.0的framework的assetMananger的源码,调用的openXmlAssetNative方法返回值不是0,就跑出这样的错误,不知楼主可否hook掉native层的返回值解决这个问题@singwhatiwanna@CeAlong
已解决,插件打包要配置签名
@darrenjh 你的打包命令怎么写的,我这边也有同样问题,可以发一下吗?