第一步、
首先需要下载好android NDK并记录目录路径
第二步、
创建一个空白的记事本文件
添加如下
#使用方法 .\check_so.bat D:\work\Project\AndroidProject\IdcardProject\Sample\src\main\jniLibs\arm64-v8a\libAndroidSIDCard.so
#NDK_PATH设置为自己的ndk路径
@echo off
setlocal
set NDK_PATH=D:\work\SDK\AndroidSDK\ndk-bundle
set SO_FILE=%1
if "%SO_FILE%"=="" (
echo Usage: check_so.bat [path_to_so_file]
exit /b 1
)
if not exist "%SO_FILE%" (
echo Error: SO file not found - %SO_FILE%
exit /b 1
)
echo Checking: %SO_FILE%
echo.
:: 自动检测架构
for %%a in (arm64-v8a armeabi-v7a x86 x86_64) do (
echo %SO_FILE% | find /i "%%a" >nul
if !errorlevel! equ 0 (
set ARCH=%%a
)
)
if "%ARCH%"=="arm64-v8a" (
set READELF=%NDK_PATH%\toolchains\llvm\prebuilt\windows-x86_64\bin\aarch64-linux-android-readelf.exe
) else if "%ARCH%"=="armeabi-v7a" (
set READELF=%NDK_PATH%\toolchains\llvm\prebuilt\windows-x86_64\bin\arm-linux-androideabi-readelf.exe
) else if "%ARCH%"=="x86_64" (
set READELF=%NDK_PATH%\toolchains\llvm\prebuilt\windows-x86_64\bin\x86_64-linux-android-readelf.exe
) else if "%ARCH%"=="x86" (
set READELF=%NDK_PATH%\toolchains\llvm\prebuilt\windows-x86_64\bin\i686-linux-android-readelf.exe
) else (
echo Could not detect architecture, using arm64...
set READELF=%NDK_PATH%\toolchains\llvm\prebuilt\windows-x86_64\bin\aarch64-linux-android-readelf.exe
)
echo Using readelf: %READELF%
echo.
%READELF% -l "%SO_FILE%"
echo.
echo Interpretation:
echo 0x1000 = 4KB pages
echo 0x4000 = 16KB pages ^<- Required for some devices
echo 0x10000 = 64KB pages
endlocal
第三步、
保存后,将txt后缀改为bat.
image.png
第四步、
使用命令行运行脚本,如下命令,后半段命令改为自己需要检测的so文件路径
.\check_so.bat D:\work\Project\AndroidProject\IdcardProject\Sample\src\main\jniLibs\arm64-v8a\libAndroidSIDCard.so
image.png
正常输出应该类似:
text
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 R 0x4000
LOAD 0x004000 0x0000000000004000 0x0000000000004000 0x000000 0x000000 R E 0x4000
✅ Align = 0x4000:支持 16KB 页面
❌ Align = 0x1000:只支持 4KB 页面,需要重新编译
✅ 支持条件
-
硬件架构要求
ARM64 (aarch64):完全支持 16KB 页面
ARMv7 (armeabi-v7a):支持,但需要特定配置
x86_64:支持
x86:支持有限 -
Android 版本要求
Android 10 (API 29)+:原生支持
Android 9 (API 28):部分支持,需要额外配置
Android 8.1及以下:支持有限,不推荐 -
NDK 工具链要求
NDK r21+:完整支持
NDK r18-r20:实验性支持
GCC 版本:建议使用 LLVM/clang 工具链
编译支持16kb的SO库
打开你的android.mk文件,添加如下配置,重新编译即可,注意编译ndk版本要符合上述支持的版本。
-z,max-page-size=0x4000
image.png










网友评论