Android 11 签名压缩 so 库

Android 11对于预装的APK,要求targetsdk为30以上的应用必须包含未压缩的SO库。通过unzip命令检查,如果SO库显示Defi则表示已压缩。设置android:extractNativeLibs为false可避免压缩,使APK在运行时直接加载未压缩库,节省设备存储空间,但会增加APK大小。设置为true则会在安装时提取SO库。检查结果显示SO库为Stored状态,表明未压缩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 11 要求,预装的apk,target sdk 为 30 以上,必须在 apk 中使用未压缩的 so 库。
检查方式,运行命令 unzip -v your_app.apk ‘lib//.so’
如果 so 库文件显示 Defi,表示经过压缩

$ unzip -v demo.apk 'lib/*/*.so'
Archive:  demo.apk
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
43016  Defl:N    18785  56% 1980-00-00 00:00 8e1effa3  lib/arm64-v8a/libpl_gif.so
46812  Defl:N    23961  49% 1980-00-00 00:00 122a3c0e  lib/armeabi-v7a/libpl_gif.so
--------          -------  ---                            -------

android:extractNativeLibs
软件包安装程序是否将原生库从 APK 提取到文件系统。如果设为 false,则原生库必须保持页面对齐状态并以未压缩的形式存储在 APK 中。无需更改代码,因为链接器在运行时直接从 APK 加载库。默认值为 “true”。

意思是:

  • extractNativeLibs = false ,签名过程中 so 库对齐不压缩,安装时不会将应用内的 so 库提取到系统中,运行时直接从 APK 中加载 so。好处是 so 只有一份,可以随 apk 升级,节省空间;缺点是 APK 包变大。
  • extractNativeLibs = true,签名过程中 so 库会被压缩,安装时需要将应用内的 so 库提取到系统中,运行时才能调用 so。

Android 11 要求预装 apk 设成 false:

<application
    ......
    android:extractNativeLibs="false"
    >

</application>

检查结果:

$ unzip -v demo.apk 'lib/*/*.so'
Archive:  demo.apk
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
43016  Stored    18785  56% 1980-00-00 00:00 8e1effa3  lib/arm64-v8a/libpl_gif.so
46812  Stored    23961  49% 1980-00-00 00:00 122a3c0e  lib/armeabi-v7a/libpl_gif.so
--------          -------  ---                            -------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值