若应用自身具备 so 远程化能力,且对 SDK 包体积有严格限制,可将 SDK 中的 so 文件拆分至应用的远程 so 仓库,利用应用现有的远程化机制进行动态下发与加载。
适用范围
APP应用必须具备 so 远程化能力。
本方案暂不支持 NFC 功能。
操作步骤
so 文件提取与上传
手动解压 AAR 文件或通过自有框架自动提取 AAR 中的 so 文件,将其上传至应用的远程仓库。so 文件下载与加载
在调用ZIMFacade.install(this)之前,必须完成 so 文件的下载与加载。参考逻辑如下。/** * 加载apk外部的so文件 * @param soFullPath 加载外部路径so完整路径 例如/data/user/0/ctrip.android.view.test/files/libtoyger.so */ public void loadsoFile(String soFullPath) { try { if (!TextUtils.isEmpty(soFullPath)) { File file = new File(soFullPath); if (file.exists()) { //文件合法性校验 String fileMd5 = Utils.getFileMd5(file); if (fileMd5.equals("xxxxx")) {//xxxx位so的md5值 System.load(soFullPath); //加载成功之后逻辑 } } } } catch (Throwable th) { //抛出异常则为加载不成功 } }打包配置过滤
在构建配置中排除需远程化的 so 文件,避免其打入 APK。示例如下。android { packagingOptions { exclude 'lib/arm64-v8a/libtoyger.so' exclude 'lib/armeabi-v7a/libtoyger.so' exclude 'lib/armeabi/libtoyger.so' } }
so 远程化后包体积说明
功能模块组合 | 双架构 | arm64 | armv7 | 代码模块 |
刷脸模块+质量模块+双安全模块 | 16.04MB | 10.52MB | 9.71MB |
|
远程化aliyun-face中的 so (libtoyger.so, libzkfv_tj.so) | -1.07MB | -0.58MB | -0.48MB | |
远程化aliyun-facade中的 so (libaliyunaf.so) | -0.19MB | -0.11MB | -0.08MB | |
远程化aliyun-facequality中的 so (libxnn.so, libxnnloader.so) | -3.68MB | -1.96MB | -1.73MB | |
远程化 APSecuritySDK中的 so (libAPSE_8.0.1.so, libAPSE_J.so) | -4.05MB | -2.16MB | -1.89MB | |
远程化Android-AliyunFaceGuard中的 so (libfacedevice.so) | -2.15MB | -1.14MB | -1.01MB | |
全部远程化后包大小 | 4.90MB | 4.57MB | 4.52MB |
|