You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新本地共享库以兼容Android 15 16KB内存页设备?

问题:Ananas库在Android 15 16KB内存页模拟器中加载libphotoprocessing.so失败

我们的应用使用Ananas库,在Android 15 16KB系统镜像模拟器(Pixel 8a API 35,镜像路径system-images/android-35/google_apis_playstore_ps16k/x86_64/)中测试时,添加图片滤镜时应用卡住无响应,Logcat报错:

2025-01-14 19:27:52.368 16574-18462 nativeloader            io....amutkarshtiwari.ananasproject  D  Load /data/app/~~K2DsRcC_nLSnacu1r-e0kA==/io.github.iamutkarshtiwari.ananasproject-Sla3ZLIGIN1Ma-aDhtc6TA==/lib/x86_64/libphotoprocessing.so using ns clns-7 from class loader (caller=/data/app/~~K2DsRcC_nLSnacu1r-e0kA==/io.github.iamutkarshtiwari.ananasproject-Sla3ZLIGIN1Ma-aDhtc6TA==/base.apk!classes2.dex): dlopen failed: empty/missing DT_HASH/DT_GNU_HASH in "/data/app/~~K2DsRcC_nLSnacu1r-e0kA==/io.github.iamutkarshtiwari.ananasproject-Sla3ZLIGIN1Ma-aDhtc6TA==/lib/x86_64/libphotoprocessing.so" (new hash type from the future?)

但在普通Android 15模拟器(Pixel 7 API 35,镜像路径system-images/android-35/google_apis_playstore/x86_64/)中测试正常,问题明确源于16KB内存页兼容性。

已尝试但无效的操作

  • 将targetSdkVersion、compileSdk更新至34,升级AGP至8.6.0并修复编译错误;
  • 在Gradle中指定ndkVersion = "27.2.12479018";
  • 配置Gradle关联NDK:
    externalNativeBuild {
       ndkBuild {
          path file('jni/Android.mk')
       }
    }
    
  • 重建libphotoprocessing.so库:
    ~/Library/Android/sdk/ndk/27.2.12479018/ndk-build -C /MY_PROJECT_PATH/Ananas/ananas clean
    ~/Library/Android/sdk/ndk/27.2.12479018/ndk-build -C /MY_PROJECT_PATH/Ananas/ananas
    
  • 在Application.mk中添加APP_SUPPORT_FLEXIBLE_PAGE_SIZES := true。

使用官方check_elf_alignment.sh脚本检测APK,显示库仍未对齐:

-e /var/folders/22/7bl_jpq137l883cghrfhxzt80000gn/T/app-debug_out_XXXXX.DA2PVl6sGv/lib/x86_64/libphotoprocessing.so: \e[31mUNALIGNED\e[0m (2**12)

最终解决步骤

通过以下修改解决了问题:

  1. 移除Android.mk中的LOCAL_CFLAGS,在build.gradle的ndkBuild块中设置:
    externalNativeBuild {
        ndkBuild {
            path file('jni/Android.mk')
            cFlags "-DANDROID_NDK -DDISABLE_IMPORTGL -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"
            abiFilters 'arm64-v8a', 'armeabi-v7a', 'riscv64', 'x86', 'x86_64'
        }
    }
    
  2. 在Application.mk中指定全ABI支持:
    APP_ABI := arm64-v8a armeabi-v7a riscv64 x86 x86_64
    
  3. 删除项目中的build和.gradle文件夹,重置项目配置;
  4. 重新编译原生库:
    ~/Library/Android/sdk/ndk/27.2.12479018/ndk-build -C /MY_PROJECT_PATH/Ananas/ananas clean
    ~/Library/Android/sdk/ndk/27.2.12479018/ndk-build -C /MY_PROJECT_PATH/Ananas/ananas -B V=1 NDK_LOG=1
    

验证结果

编译后在同款Android 15 16KB模拟器中测试,滤镜功能正常。再次使用check_elf_alignment.sh检测,显示x86_64架构库已对齐:

-e /var/folders/22/7bl_jpq137l883cghrfhxzt80000gn/T/app-debug_out_XXXXX.wQrETumTaI/lib/x86_64/libphotoprocessing.so: \e[32mALIGNED\e[0m (2**14)

用readelf查看.so文件,所有LOAD行的Align列均为0x4000。

内容的提问来源于stack exchange,提问作者Fercho_27

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:23:21