一般来说是用 SteamingAssetsPath 来获取ab资源的路径,因为资源会存放在 xxx.xxx.xxx/base.apk! 中
但是在 AndroidAppBundle 的分资源过后,资源并不会存放在 xxx.xxx.xxx/base.apk! 中,而是在 分出来的apk中,如下图
adb shell pm path xxx.xxx.xxx
可以获取包名所在手机的所有apk的路径
adb pull xxx/xxx/xxx.apk xxx/xxx/out.apk
将apk导出之后转成zip解压即可看到里面存放的对应的资源
分出的ab资源会因为AndroidAppBundle的分包 而被分发到 xxx.xxx.xxx/split_install_time_asset_pack.apk! 里
所以在像以前那样使用 StreamingAssetsPath 来获取 ab资源就会找不到,由于 split_install_time_asset_pack 这个并不是一个常量,而是根据android具体实现自定义的一个名称
简陋的一个解决方案:
StreamingAssetsPath.Replace("base.apk!", "split_install_time_asset_pack.apk!")
就能找到那个路径了
一个新的问题,那就是使用 universal 出的 apks 从而导出 apk 的话,又报错找不到资源了,想想就立马明白了,这种模式下是不会又 split_install_time_asset_pack.apk 分包的。
所以先判断 base.apk! 里是否有资源,如果没有再去 split_install_time_asset_pack.apk! 找。
do{
WWW www = new WWW(Util.CombinePath(AABStreamingAssetsRoot, "xxxxx.ab"));
while (!www.isDone)
yield return null;
if(null != www.error)
AABStreamingAssetsRoot = AABStreamingAssetsRoot.Replace("base.apk", "split_install_time_asset_pack.apk");
}while(true)
yield return null;
网友评论