Android调用C/C++方法【示例】

在 Android 开发中调用 C/C++ 代码,通常是通过 JNI(Java Native Interface) 或者 NDK(Native Development Kit) 来实现的。大致流程是:

  1. Java/Kotlin 端声明 native 方法
  2. 实现对应的 C/C++ 函数
  3. 编译生成 .so 动态库
  4. 在 Android 运行时加载该库并调用

1. 在 Java/Kotlin 中声明 native 方法

public class NativeLib {
    // 加载本地库
    static {
        System.loadLibrary("mynative");
    }

    // 声明 native 方法
    public native String stringFromJNI();
}

2. 创建 C/C++ 源码

假设你使用 Android Studio,在 app/src/main/cpp 下新建 native-lib.cpp

#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_myapp_NativeLib_stringFromJNI(JNIEnv* env, jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

这里的函数名必须符合 JNI 命名规则:

Java_包名_类名_方法名

3. 配置 CMakeLists.txt

Android Studio 会自动生成一个 CMakeLists.txt,比如:

cmake_minimum_required(VERSION 3.4.1)

add_library( # 库名
             mynative
             SHARED
             native-lib.cpp )

find_library( # log 库
              log-lib
              log )

target_link_libraries( mynative ${log-lib} )

4. 修改 build.gradle

app/build.gradle 中启用 CMake:

android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }
}

5. 在 Activity 中调用

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        NativeLib lib = new NativeLib();
        String result = lib.stringFromJNI();
        Log.d("JNI", "Result: " + result);
    }
}

关键点注意

  • Java/Kotlin 调用 C/C++ 用 JNI 规范传递数据(基本类型直接传,复杂对象需通过 JNIEnv 访问字段)。
  • 如果 C++ 代码复杂,可以使用 NDK + CMake,这样可以直接引入第三方库(Eigen, OpenCV, etc.)。
  • Android 默认使用 ARM 架构(arm64-v8a、armeabi-v7a),CMake 会为这些目标生成 .so
  • 如果是 已有 C++ 项目(比如你的 GNSS 代码),只需要把代码放到 cpp/ 下,并在 CMakeLists.txtadd_library
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值