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

Android无法加载生成的Native库问题求助

问题分析与解决方案

核心原因

你现在遇到的问题本质是运行环境不匹配:你直接在本地JVM(电脑的Java虚拟机)里运行TestClass的main方法,但Android Studio构建出来的libnative-lib.so是专门针对Android设备架构(比如armeabi-v7a、arm64-v8a等)编译的,本地JVM(x86/x64架构)既无法识别这些Android专用的so文件,也找不到APK里的so存放路径,所以才会抛出UnsatisfiedLinkError。

正确的Android环境测试方案(推荐)

因为你开发的是Android库,最准确的测试方式是在Android设备或模拟器上运行,步骤如下:

  1. 创建Instrumented测试类
    在app/src/androidTest/java/com/example/目录下新建测试类:

    package com.example;
    
    import android.support.test.runner.AndroidJUnit4;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    
    @RunWith(AndroidJUnit4.class)
    public class NativeLibTest {
        @Test
        public void testHelloNative() {
            new TestClass().helloNative();
        }
    }
    

    右键这个类选择「Run」,在连接的Android设备或模拟器上执行,就能正确加载APK里的native库了。

  2. 确认Gradle与CMake配置正确
    检查你的app/build.gradle是否包含正确的NDK构建配置:

    android {
        ...
        defaultConfig {
            ...
            externalNativeBuild {
                cmake {
                    cppFlags ""
                    // 指定需要支持的Android架构,默认会生成主流架构版本
                    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                }
            }
        }
        externalNativeBuild {
            cmake {
                path "src/main/cpp/CMakeLists.txt" // 指向你的CMake配置文件
            }
        }
    }
    

    同时确认src/main/cpp/CMakeLists.txt里正确声明了native库:

    add_library(
                native-lib
                SHARED
                native-lib.cpp )
    
    find_library(
                  log-lib
                  log )
    
    target_link_libraries(
                          native-lib
                          ${log-lib} )
    

本地JVM测试方案(不推荐,仅作验证)

如果非要在本地电脑的JVM里测试native方法,需要单独编译适配本地架构的so文件:

  1. 生成JNI头文件
    在Terminal中进入app/src/java目录,执行以下命令:

    javac com/example/TestClass.java
    javah com.example.TestClass
    

    会生成com_example_TestClass.h头文件。

  2. 编译本地so文件
    使用gcc/g编译(需要提前安装C编译工具链):

    # Linux/macOS示例,替换$JAVA_HOME为你的JDK路径
    g++ -shared -fPIC -I$JAVA_HOME/include -I$JAVA_HOME/include/linux com/example/TestClass.java native-lib.cpp -o libnative-lib.so
    
  3. 指定库路径运行
    在Android Studio的Run Configuration中,给TestClass的运行配置添加VM参数:

    -Djava.library.path=/你的so文件所在目录路径
    

    或者直接在Terminal中运行:

    java -Djava.library.path=. com.example.TestClass
    

总结

优先选择Android设备/模拟器测试,因为本地JVM的JNI行为和Android环境存在差异,测试结果不能完全代表实际Android设备上的运行情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:16:52