美文网首页
Unity子包加载资源卡顿

Unity子包加载资源卡顿

作者: Cylee1989 | 来源:发表于2019-03-28 16:25 被阅读0次

现象:
Unity游戏母包加载资源启动速度正常,但是经过apktool工具重新生成的子包启动速度变慢变卡顿。

原因:
经过对比两个apk包体,发现打出来的子包比母包要小大概几十兆左右。
再对比apktool.yml文件中doNotCompress参数,发现assets下的资源很多都被二次压缩了。

解决方案:

echo "----------------------------------"
echo "第1步: 反编译APK原始包..."

apkpath="apk包的路径"
targetProject="反编译apk的存放目录"
apktool d $apkpath -o $targetProject

echo "----------------------------------"
echo "第2步: 处理需要替换的资源..."
echo "编译java文件、资源文件等..."

echo "----------------------------------"
echo "第3步: 重新编译apk..."

# 未签名的apk包
unsignedapk="unsigned.apk" 
apktool b $targetProject -o $unsignedapk

echo "----------------------------------"
echo "第4步: 处理资源被二次压缩问题..."

# 将unsignedapk包解压缩到unZipDir目录中
unZipDir="unZipDir"
if [[ -d "$unZipDir" ]]; then
    rm -rf $unZipDir
fi
unzip -d $unZipDir $unsignedapk

# 删除unsignedapk包
rm -rf $unsignedapk

# 将资源全部压缩成unsignedapk包,但unZipDir目录仍需保留
cd $unZipDir
zip ../$unsignedapk -r --no-dir-entries *

# 查看母包有哪些文件是没有被压缩的,通过Stored标识可以判断
storedFiles=`unzip -v $apkpath | grep "Stored" | grep "assets/" | awk '{print $8}'`

# 将storedFiles文件以无压缩格式重新压缩进unsignedapk包
zip ../$unsignedapk -r --no-dir-entries -0 $storedFiles

# 将unZipDir目录删除
cd ..
rm -rf $unZipDir

echo "----------------------------------"
echo "第5步: Java签名..."

keystore="test.keystore"
storepass="123456"
keyalias="test"
aliaspass="123456"

unalignapkname="unalign.apk"
jarsigner  -sigfile CERT -digestalg SHA1 -sigalg MD5withRSA -keystore $keystore  -storepass $storepass -keypass $aliaspass -signedjar $unalignapkname  $unsignedapk $keyalias
rm $unsignedapk

echo "----------------------------------"
echo "第6步: 字节对齐..."

alignapkname="align.apk"
zipalign 4 $unalignapkname $alignapkname
rm $unalignapkname

echo "----------------------------------"

正常结果:
unzip -v align.apk
通过unzip命令查看文件Method状态显示Stored则正常。

相关文章

  • Unity子包加载资源卡顿

    现象:Unity游戏母包加载资源启动速度正常,但是经过apktool工具重新生成的子包启动速度变慢变卡顿。 原因:...

  • Unity Addressable Asset System 文

    简介 Unity可寻址资源系统 可寻址资源系统提供了一种简单的方法通过“地址”加载资源。简化资源包的创建和部署的管...

  • Unity3D WWW用file协议下载失败问题

    Unity3D中加载本地或远程资源会用到WWW类,最使用Unity3D的WWW类加载本地磁盘资源时发现总是加载失败...

  • iOS性能优化

    1、懒加载,也就是延迟加载,节约内存资源 2、tableView的cell复用,节约内存消耗 3、界面卡顿:主线程...

  • Unity AssetBundle 资源无法卸载,导致内存泄漏

    我们在使用Unity 使用AssetBundle加载资源时,在资源加载完成后不能调用 AssetBundle.un...

  • Unity3d常用两种加载资源方案:Resources.Load

    初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resou...

  • Unity与多线程

    unity的加载的api是无法在子线程中去做的,比如load一个资源unity是不允许做的,但是其他的比如科学计算...

  • Unity 加载资源

    在Resources文件夹里面放入资源。加载如: 扩展方法-扩展系统组件ref 、out、params参数区别 r...

  • Unity资源加载

    资源加载 一、public 面板拖拽。大项目和多人项目基本都用不到。 二、Resources.load 商用不...

  • 跟诸子学游戏 unity3d中的线程

    1:异步加载场景依旧出现卡顿 :使用异步方式来加载场景,加载过程中的动画和场景还是会出现卡顿? 调用异步加载场景...

网友评论

      本文标题:Unity子包加载资源卡顿

      本文链接:https://www.haomeiwen.com/subject/vcqcbqtx.html