Fw: [请益] Android Plugin 里的 ABI

楼主: gn00618777 (非常念旧)   2018-01-01 16:24:14
※ [本文转录自 GameDesign 看板 #1QIV0LNV ]
作者: gn00618777 (非常念旧) 看板: GameDesign
标题: [请益] Android Plugin 里的 ABI
时间: Mon Jan 1 16:23:44 2018
我提供第三方 android sdk,一个aar档。里面有七个架构的 .so
arm64-v8a
armeabi
armeabi-v7a
mips
mips64
x86
x86_64
我提供的 sdk 给客户的专案,客户的专案会 import 我的 aar,最后客户
也会建置出app-release.aar,我将我的library.aar和客户的app-release.aar
丢至Unity 的 Plugins输出成apk出现
Failure to initialize! Your hardware does not support this application, sorry!
我最后解法是只留下 armeabi-v7a 才可以正常运作。
很奇怪!!
我在APK有加入 android.os.Build.SUPPORTED_ABIS 来看适合的ABI
它显示出arm64-v8a阿!!
另外Unity平台不会自己选择适合的 ABI吗?我网络上查到的说是 Android 安装包
会自己搜寻适合的ABI,但当我提供所有架构的.so,他感觉是从第一顺位去找..
感谢指教
楼主: gn00618777 (非常念旧)   2018-01-01 16:32:00
我在Unity平台有看到设定Device Filter为FAT(armeabi-v7a+x86) 不知道有没有关联 哈https://goo.gl/sHngWS 好像非常有关!!
作者: y3k (激流を制するは静水)   2018-01-01 17:05:00
这应该是他PO的其他Library的问题因为你的Library有提供到更适合该装置的ABI 但是其他包没有包到这么细XD 建议这样给:1.全包 2.armeabi 3.armv7a+x86检验这件事情非常简单 把APK解开来看便知....如果很坚持一定要发挥自己对armv8的优化 是可以反过来把Unity的armv7a档案复制一份到armv8跟你的放在一起
作者: ssccg (23)   2018-01-01 17:51:00
android只会先选一个目录,然后那个目录要所有so都有不能有的lib包7平台有的只有3平台跟res的找法不一样,因为其实只是安装时会设/lib的symlink
楼主: gn00618777 (非常念旧)   2018-01-01 18:09:00
y大,我全包进去,就是出现不支援的状况。这网志是我整理的 https://goo.gl/XintWw@@我整理是觉得Unity平台是设定APP为armeabi-v7aManager侦测到我的装置是arm64-v8a,所以去arm64-v8a/寻找.so,但跟Unity设定的ABI,armeabi-v7a不符所以才会跳出不supported的对话框
作者: y3k (激流を制するは静水)   2018-01-01 18:48:00
我觉得我讲的不明白..这样说好了 你要提供三个版本\1.全部都包2.只有armeabi3.arvm7a+x86然后可以注明版本3是for Unity3D 我的意思大概是这样@@举个例子你的包有a.so Unity的包有b.so 但是跟你的包同时使用时 在armv8那边会只有a.so 而系统只会傻傻的去找他认为最适合的armv8捞a.so跟b.so 这时候死的是Unity 但你难辞其咎XD就如上面s大所说 这跟res的使用有差 我同事一开始也是转不过来....
楼主: gn00618777 (非常念旧)   2018-01-01 19:04:00
y大,感谢你的解说,还有一件事不太解,就是你说把Unity的armv7a档案复制一分到armv8,所有的so都由我提供阿,怎么听你说Unity会产出armeabi-v7a的的感觉
作者: y3k (激流を制するは静水)   2018-01-01 19:11:00
会阿 你今天的问题就是因为Unity的package会带进他自己的armv7a library(prebuilt的) 才会有之后的问题 你那个错误讯息也是Unity自己出的 是你的包少了的话多半都是直接炸UnstaisfiedLinkException
楼主: gn00618777 (非常念旧)   2018-01-01 19:24:00
请问Unity产出的armeabi-v7a我可以在哪边找到呢?
作者: y3k (激流を制するは静水)   2018-01-01 19:28:00
把Unity包出来的apk解压缩就可以了不过这意味着每一版的Unity你都要这样做一次喔 要想清楚 我不太相信现在真的有人会去为了armv8a优化 这种状况下有没有这样强制支援armv8我觉得都没差...
楼主: gn00618777 (非常念旧)   2018-01-01 19:39:00
了解 纯粹多问多吸%而已 XD我没要做到那么彻底感谢 最后想再请问,Unity平台设定 armeabi-v7a所谓的设定ABI是说compiler将app编译成可以呼叫对应架构so的意思吗?应该说,程式可以编译成对应的ABI架构好让它能呼叫正确的so?
作者: y3k (激流を制するは静水)   2018-01-01 19:54:00
Unity里面的native library都是预包好的.so 他们不可能把toolchain之类的东西包进去当场从source去build...所以那个设定只是让在产生Android专案时选择要放进的lib而以
楼主: gn00618777 (非常念旧)   2018-01-01 20:03:00
不不不,小弟的意思是问,一个程式要能使用某个架构的native,是此程式需要被编译成能够使用此架构ABI模式吗@@?解压了之后的确有看到x86 和armeabi-v67a的lib然后安卓系统却在arm64找不到这些lib!!所以才会出现这问题
作者: y3k (激流を制するは静水)   2018-01-01 20:22:00
只要在APK的/lib/里面有对应的资料夹即可 我记得空的他也算..
楼主: gn00618777 (非常念旧)   2018-01-01 20:47:00
感谢解说空的它也算啥???

Links booklink

Contact Us: admin [ a t ] ucptt.com