前些日子,因为项目中引用的某些aar包包含armv8的.so文件,所以在打包生成的apk包中会有armv8的目录,其实我们是不需要这个目录的。去除它可以减小包的体积。

首先,我们需要弄清楚apk下的libs这几个目录是干嘛的,其实每个目录对应的是一种CPU架构:

  1. armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
  2. arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
  3. armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
  4. x86: 平板、模拟器用得比较多。
  5. x86_64: 64位的平板。

注意:这个是2016年的数据,现在armv8用的多不多,我也不清楚。不过,armv8是可以像下兼容的,也就是说,在armv8的机器上,我们使用armv7的.so包也完全可以。

arm64-v8a是可以向下兼容的,但前提是你的项目里面没有arm64-v8a的文件夹,如果你有两个文件夹armeabi和arm64-v8a,两个文件夹,armeabi里面有a.so 和 b.so,arm64-v8a里面只有a.so,那么arm64-v8a的手机在用到b的时候发现有arm64-v8a的文件夹,发现里面没有b.so,就报错了,所以这个时候删掉arm64-v8a文件夹,这个时候手机发现没有适配arm64-v8a,就会直接去找armeabi的so库,所以要么你别加arm64-v8a,要么armeabi里面有的so库,arm64-v8a里面也必须有

作者:green jim 
链接:http://www.zhihu.com/question/36893314/answer/78467097 
来源:知乎 
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

了解了这个之后,我们看Unity的Android BuildSetting中也有相应的选项供你过滤:

通常,我们只选择armv7,因为数据表明armv7的用户还是占大多数的:

可以看到在2016-09月的时候,x86的用户只有1.3%。对于绝大多数用户来说,Device Filter选择ARMv7可以减少.apk包体的大小,同时又不会影响绝大多数用户的使用。

但问题来了,unity并没有提供过滤armv8的选项,我们打出的包还是带armv8目录的。这可咋整?

经过博主苦苦搜索+实验,还是找出了解决办法的。

注:以下解决方案适用于打包方式为Gradle的项目,Internal打包方式博主并未测试。

在你的项目中找到Plugins\Android目录,新建一个mainTemplate.gradle文件,此文件对应gradle工程中的build.gradle文件,是gradle编译出包的配置文件。

在文件中,添加下面一条指令:

//只添加armeabi, armeabi-v7a的库
ndk {abiFilters 'armeabi', 'armeabi-v7a'
}

这样,我们就只有上面配置的两个目录,没有armv8的目录了。

但问题又来了,这样配置后,打包时Unity会报错:

Set “android.useDeprecatedNdk=true” in gradle.properties to continue using the current NDK integration.

不要怕,很好解决。在C:\Users\你的用户名\.gradle有一个gradle.properties文件,这是一个全局的gradle配置文件。如果没找到,就新建一个同名文件。

我们打开这个文件,添加一行android.useDeprecatedNdk=true即可。

你可能会问,为什么要修改全局的gradle配置文件呢,这样不就影响了其他gradle工程了吗?

其实我也不想这样,但Unity似乎并未提供针对特定工程配置gradle.properties的能力。

大功告成!

不过,这个方案并不完美,因为我们直接将x86的用户抛弃了。那有没有办法,既能减小包体积,又能兼顾多cpu架构呢?

答案是有的。针对不同架构用户分发不同的包即可,简称分包。

在最新版本的Unity 2019中,已经有了分包选项。在老版本Unity中,我们也可以自行分包,不过这两种方案博主均未实测,具体实现可参考https://blog.csdn.net/yypblog/article/details/51990254。

参考链接:

【Unity3d基础】Unity中关于Device Filter的选择问题

按照cpu架构分别打包apk

studio android.useDeprecatedNdk=true解决ndk提示版本低不能自动编译jni

我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

Unity去除armv8目录相关推荐

  1. 《学Unity的猫》——第五章:规范Unity的工程目录结构

    文章目录 5.1 不要把玩具乱丢 5.2 Unity工程目录结构 5.3 Resources.Load实战测试 5.3.1 资源下载与导入 5.3.2 目录整理 5.3.3 代码动态加载资源 5.3. ...

  2. 自动去除所有目录的隐藏属性的DOS命令

    最近老婆的U盘感染病毒, 根目录下的所有子目录均被设置成隐藏和系统属性. 可以采用如下命令修改: ATTRIB -H -S <文件夹名称> 手动一个一个修改是可以的, 可是老婆嫌麻烦, 要 ...

  3. tar 解压到指定目录、去除前导目录

    去除目录结构加上 --strip-components N 解压到指定目录,可以加参数-C 目标目录tar -xvf eg.tar -C /data/dst 一起使用 sudo tar xjvf ta ...

  4. 批量清理Unity项目Library目录 降低项目空闲占用空间

    Unity项目批量清理工具 Python程序运行截图 结尾云盘下载连接和源码 百度云盘连接 蓝奏云 源码 Python程序运行截图 结尾云盘下载连接和源码 CSDN下载连接 底下有其它云盘下载连接 h ...

  5. Unity文件和目录操作

    Unity的常用路径: 1.Resources 目录 2.Application.dataPath :  Unity3D的开发资源存储目录,在编辑器状态下有效 打包之后,该目录会消失,打包后不要使用 ...

  6. unity双开同目录

    在unity游戏开发过程中,有时候需测试多人在线游戏. 一种方法是直接打包,导出exe可运行文件,这种方法缺点是,每次改动代码都得重新导出,费事费劲. 另外一种便捷方法是,使用同一目录双开Unity ...

  7. 【Unity】Unity学习笔记目录整理

    概述及周边 [Unity]Unity 基本介绍 [Unity]Unity 相关知识分类 [Unity]Unity 特殊文件夹[未完成] [Unity]Unity 常用插件 基础知识 [Unity]Un ...

  8. 对Unity的Resources目录进行改名

    项目用的是Unity5.5版本,开发的时候将相关的图集.预制对象资源都放在 Resources 目录下,而真机使用的是 StreamingAssets 目录下的资源. Resources(不分层级)在 ...

  9. mac系统上Unity classes.jar 目录

    /Applications/Unity/Hub/Editor/2021.3.13f1c1/PlaybackEngines/AndroidPlayer/Variations/mono/Release/C ...

最新文章

  1. 思科cisco解决方案:思科ACI解决方案和Nexus_9000交换机
  2. java协变 生产者理解_Java进阶知识点:协变与逆变
  3. 20-javamail
  4. C语言试题二十五之编写一个函数float function(double h),函数的功能使对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值位正数)。
  5. Tesla对德国政府的审批流程表示受够了
  6. 某厂面试归来,发现自己落伍了!
  7. 火狐浏览器允许ajax,ajax如何解决火狐浏览器或其它非ie浏览器的兼容性问题
  8. java调用数据库存储过程的接口是_JAVA调用数据库存储过程
  9. python-day74--知识总体总结
  10. tabbar角标 小程序_【沃行课堂】恭喜你遇到“坑”,小程序踩坑指南
  11. PostgreSQL ALTER TABLE中改变数据类型时USING的用法转
  12. 3.6 tensorflow 中LSTM和GRU模块使用意境级讲解
  13. Java练习题——集合
  14. 笔记本电脑开wifi热点小技巧,bat文件实现
  15. 用python计算有效前沿_【投资组合理论】Python绘制上证50成分股有效前沿和CML
  16. Python基础刷题,期末不挂科~~~(已完结)
  17. 项目经理常用的12大工具及5大最佳项目管理软件
  18. 二阶系统临界阻尼和欠阻尼_如何使用开关阻尼器使机械键盘静音
  19. 进程与线程学习(1)
  20. JOISC 2014 邮戳拉力赛(基础DP)

热门文章

  1. 华师网院H5应用开发主观题作业
  2. ps 抠图 选择并遮住
  3. 个人面试记录 - 抖音音乐11.13~11.30
  4. unit.framework.AssertionFailedError: No tests found in X.X
  5. MISCONF Redis is configured to save RDB snapshots~
  6. 笔记:Delaunay三角剖分(Delaunay Triangulation)相关知识
  7. 基于生成式对话的实时聊天机器人:实现实时聊天机器人与智能交互
  8. 《花雕学AI》讯飞星火认知大模型的特点和优势,与ChatGPT的对比分析
  9. 你说,区块链也是一种数据结构?
  10. Latex学习笔记(三)换行与换页