首先确保正确安装并配置NDK路径,在Android Studio中通过SDK Tools下载NDK,并在local.properties中手动设置ndk.dir指向实际安装目录,同时在build.gradle中指定匹配的ndkVersion;若仍无法识别,重启Android Studio或检查CMake版本与配置一致性即可解决。

C++移动开发环境搭建,核心在于配置Android NDK,让C++代码能在Android设备上运行。这涉及到JDK、Android SDK、NDK以及CMake等工具的安装和配置,以及在Android Studio中正确链接它们。
配置Android NDK环境,让你的C++代码在Android设备上飞起来!
为什么我的Android Studio死活找不到NDK?
这个问题太常见了,简直是每个初学者的噩梦。首先,确保你已经下载了NDK。在Android Studio中,依次点击
File->
Settings->
Appearance & Behavior->
System Settings->
Android SDK,然后在
SDK Tools选项卡下勾选
NDK (Side by side),点击
Apply并等待下载完成。
如果下载后还是找不到,可能是Android Studio没有正确识别NDK的路径。这时,你需要手动指定NDK的路径。在
local.properties文件中(通常位于项目的根目录下),添加或修改
ndk.dir属性,指向你NDK的安装目录。例如:
立即学习“C++免费学习笔记(深入)”;
ndk.dir=/Users/your_username/Library/Android/sdk/ndk/23.1.7779620
注意替换
/Users/your_username/Library/Android/sdk/ndk/23.1.7779620为你实际的NDK安装路径。 另外,检查一下
build.gradle文件中是否正确配置了NDK的版本。
android {
...
externalNativeBuild {
cmake {
path 'src/main/cpp/CMakeLists.txt'
version '3.18.1' // 或者你安装的CMake版本
}
}
ndkVersion '23.1.7779620' // 确保NDK版本与你安装的版本一致
...
}如果这些都检查过了,还是不行,尝试重启Android Studio,有时候玄学问题就这么解决了。
CMakeLists.txt怎么写才能让我的C++代码跑起来?
CMakeLists.txt是CMake构建系统的配置文件,它告诉CMake如何编译你的C++代码。一个基本的
CMakeLists.txt文件可能长这样:
cmake_minimum_required(VERSION 3.18)
project("MyCppApp")
include_directories(src/main/cpp/include) # 如果你有头文件
add_library( # Sets the name of the library.
native-lib
# Sets the library as a shared library.
SHARED
# Provides a relative path to the source file(s) that
# comprise the library.
src/main/cpp/native-lib.cpp )
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
target_link_libraries( # Specifies the target library.
native-lib
# Links the target library to the log-lib library
# included in the NDK.
${log-lib} )这里,
cmake_minimum_required指定了CMake的最低版本。
project指定了项目名称。
add_library定义了要构建的库,
SHARED表示构建动态库,
src/main/cpp/native-lib.cpp是你的C++源代码文件。
find_library用于查找NDK提供的库,例如
log库。
target_link_libraries将你的库链接到其他库。
如果你使用了第三方库,需要使用
include_directories指定头文件路径,并使用
target_link_libraries链接相应的库。
如何在Java代码中调用C++函数?
要在Java代码中调用C++函数,你需要使用JNI(Java Native Interface)。首先,在你的C++代码中声明一个JNI函数,例如:
#include#include extern "C" JNIEXPORT jstring JNICALL Java_com_example_mycppapp_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); }
这个函数的名字必须遵循一定的规则:
Java_包名_类名_方法名。例如,如果你的Java类是
com.example.mycppapp.MainActivity,方法名是
stringFromJNI,那么C++函数的名字就应该是
Java_com_example_mycppapp_MainActivity_stringFromJNI。
然后,在你的Java代码中声明一个native方法:
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
// Example of a call to a native method
TextView tv = binding.sampleText;
tv.setText(stringFromJNI());
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
}注意
System.loadLibrary("native-lib"),它加载了你的C++库。public native String stringFromJNI()声明了一个native方法,它没有实现,它的实现是在C++代码中。
NDK版本选择有什么讲究?
NDK版本选择确实是个需要注意的点。一方面,要考虑兼容性。如果你的应用需要支持比较老的Android系统,那么需要选择一个比较老的NDK版本。另一方面,要考虑新特性。新的NDK版本通常会带来一些性能优化和新的API,但同时也可能引入一些新的问题。
通常来说,建议选择一个稳定版的NDK,并且与你的Android Studio版本兼容。可以在Android Studio的
SDK Manager中查看推荐的NDK版本。
另外,要注意NDK的ABI(Application Binary Interface)。ABI定义了C++代码在Android设备上的运行环境。常见的ABI有
armeabi-v7a、
arm64-v8a、
x86、
x86_64等。在
build.gradle文件中,可以指定要支持的ABI:
android {
...
defaultConfig {
...
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
...
}选择合适的ABI可以提高应用的性能和兼容性。通常来说,建议支持
armeabi-v7a和
arm64-v8a,因为它们覆盖了大部分Android设备。
如何调试C++代码?
调试C++代码是开发过程中必不可少的一环。Android Studio提供了强大的调试功能,可以让你像调试Java代码一样调试C++代码。
首先,确保你已经安装了LLDB调试器。在Android Studio中,依次点击
File->
Settings->
Appearance & Behavior->
System Settings->
Android SDK,然后在
SDK Tools选项卡下勾选
LLDB,点击
Apply并等待下载完成。
然后,在你的C++代码中设置断点,就像在Java代码中一样。运行你的应用,当代码执行到断点时,Android Studio会自动暂停,你可以查看变量的值、单步执行代码等。
如果调试器无法连接到你的设备,可能是因为你的设备没有启用调试模式,或者你的设备驱动没有正确安装。确保你的设备已经启用了开发者选项,并且已经安装了正确的驱动。
另外,可以使用
adb logcat命令查看C++代码的日志输出。在C++代码中使用
__android_log_print函数可以输出日志:
#include#define TAG "MyCppApp" __android_log_print(ANDROID_LOG_INFO, TAG, "Hello from C++");
这些日志可以在Android Studio的
Logcat窗口中查看。










