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

JNI_OnLoad是否支持NativeActivity?配置后为何未被调用?

NativeActivity中JNI_OnLoad未被调用的排查方案
  • 检查共享库的加载配置
    NativeActivity默认加载libmain.so,如果你的库名不同,必须在AndroidManifest.xml的<application>内添加meta-data指定:
<meta-data android:name="android.app.lib_name" android:value="你的库文件名" />

系统只有正确加载你的共享库,才会触发JNI_OnLoad。

  • 确认JNI_OnLoad的函数签名绝对正确
    必须严格遵循标准签名,任何拼写、参数类型错误都会导致系统无法识别:
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
    // 初始化逻辑
    return JNI_VERSION_1_6; // 按需返回对应JNI版本
}

注意函数名是JNI_OnLoad(全大写开头),返回值为jint,参数是JavaVM指针和void指针,不能有任何偏差。

  • 验证共享库的导出符号
    用nm工具检查.so文件,确认JNI_OnLoad是全局导出符号:
nm -D lib你的库名.so | grep JNI_OnLoad

如果输出没有T JNI_OnLoad,说明函数未正确导出:

  • 不要用static修饰JNI_OnLoad

  • 若用C++编写,必须用extern "C"包裹函数避免名字混淆:

    extern "C" {
        jint JNI_OnLoad(JavaVM* vm, void* reserved) {
            // ...
            return JNI_VERSION_1_6;
        }
    }
    
  • 排查NativeActivity启动状态
    在ANativeActivity_onCreate中添加日志,确认进程正常启动。如果进程直接崩溃,用readelf -d lib你的库名.so检查依赖库是否在设备中存在。

  • 检查API版本兼容性
    JNI_OnLoad在Android 2.3(API level 9)及以上才会被NativeActivity触发,确保minSdkVersion不低于9。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:57:02