在Android NDK中调用C++需配置JNI与CMake,创建C++函数并按Java_包名_类名_方法名命名,通过System.loadLibrary加载库,在Java声明native方法后即可调用。

在Android NDK中调用C++代码是实现高性能计算、复用已有C++库或进行游戏开发的常见需求。通过JNI(Java Native Interface),你可以在Java/Kotlin代码中调用C++函数,实现Android与C++的混合开发。
配置NDK环境与创建C++源文件
要在Android项目中使用C++,首先确保你的开发环境支持NDK。在app/build.gradle中启用C++支持:
android { ... defaultConfig { ... ndk { abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } externalNativeBuild { cmake { cppFlags "-std=c++17" } } } externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } }}
然后在src/main/cpp目录下创建C++源文件,例如native-lib.cpp:
#include #includeextern "C" JNIEXPORT jstring JNICALLJava_com_example_myapp_MainActivity_stringFromJNI(JNIEnv env,jobject / this */) {std::string hello = "Hello from C++";return env->NewStringUTF(hello.c_str());}
编写JNI接口函数
JNI函数命名必须遵循特定规则:
Java_包名_类名_方法名,且参数包含JNIEnv*和jobject。
立即学习“C++免费学习笔记(深入)”;
上面的例子中,函数名对应Java类MainActivity中的native方法stringFromJNI。
你可以定义更多复杂的函数,比如传入int、数组或对象:
extern "C" JNIEXPORT jint JNICALLJava_com_example_myapp_MainActivity_add( JNIEnv* env, jobject thiz, jint a, jint b) { return a + b;}
在Java/Kotlin中声明并调用native方法
在Java或Kotlin类中声明native方法,并确保静态代码块加载so库:
public class MainActivity extends AppCompatActivity { static { System.loadLibrary("native-lib"); // 对应CMake中设置的库名 }public native String stringFromJNI();public native int add(int a, int b);@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.sample_text); tv.setText(stringFromJNI() + " | 5 + 3 = " + add(5, 3));}
}
CMakeLists.txt配置编译脚本
在cpp目录下创建CMakeLists.txt,用于告诉CMake如何编译C++代码:
cmake_minimum_required(VERSION 3.18)project("myapp")add_library(native-libSHAREDnative-lib.cpp)
find_library(log-lib log)
target_link_libraries(native-lib${log-lib})
如果你使用了STL或其他特性,可在build.gradle中添加:
cppFlags "-std=c++17", "-frtti", "-fexceptions"
基本上就这些。只要配置好NDK、CMake和JNI接口,就能顺利在Android中调用C++代码。调试时注意日志输出和ABI兼容性,避免崩溃。混合开发虽然灵活,但要小心内存管理和线程安全。不复杂但容易忽略细节。基本上就这些。
以上就是c++++怎么在Android NDK中调用C++代码_C++与Android混合开发实践的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1483666.html
微信扫一扫
支付宝扫一扫