Android 15 自杀式“升级”:16K内存分页的适配

Android 15 将强制16K Page Size(内存分页),估计是谷歌里的那些印度人拍脑门了。

一、你的App有没有用到动态库so?

把你的apk拖到Android Studio,后者会把apk按压缩包打开,找到压缩包里的lib文件夹,看里边的各子文件有没有so;不能直接从工程文件夹里找so来判断,因为有的so是你打包后才会形成的。

二、处理流程

if( 你的App没有用到动态库so) {
    恭喜你:无须针对此“升级”适配;
}else {
    if(第三方so动态库) {
        if(第三方so是大厂的) {
            等着他们更新,你再更新相关库;
            // 例如昨天在weibo sdk群问,他们说本周内更新,并且不会再用so。
        } else {// 第三方so是个人的
            // 你倒霉了:因为他们做共享库都是玩票性质,大多好多年没更新了,他们为了适配16k内存分页而复出更新是不太可能的,你也难以联系他们
            你大概率只能去掉相关第三方so的功能或找到替代的纯aar/jar(谈何容易);
        }
    } else {// 自己的so
        本文重点();
    }
}

三、本文重点()// 自己的so如何适配

1、搭建16K Page Size的模拟器,以便测试

网上有不少资料了,主要就是升级到Android Studio的最新版Koala,然后SDK platforms下载Android VanillaIceCream Preview(即 Android 15 预览版),勾选其子项包括 16K Page Size 字样的System Image(X86_64和ARM64),下载。

然后创建相应System Image的模拟器,跑一下你的App,用到so的相关界面大概率是崩溃了(我的app里用到so的界面全部崩溃)。

2、更新NDK编译配置

升级NDK版本至27,然后在Application.mk里加一行:

APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true

不过我的工程这么做后,导致编译so时报错,就换回旧版22了;上述那行版本22肯定不认,所以理论上可以删除,不过我留着了:以后有空解决27编译报错,这句就有用了。

既然恢复到22,那怎么才能让so编译成16K Page Size的呢?

这时就要编辑Android.mk,加一行:

LOCAL_LDFLAGS += "-Wl,-z,max-page-size=16384"

我自己有多个so,所以有多个Android.mk文件在不同文件夹下,别忘记每个Android.mk文件都要加这行。

3、重新编译so

编译的前提是:AGP升至8.3+。升级后,重新编译so,运行至第1步里的16K 模拟器,发现用到自己这些so的相关界面都正常了。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值