android.mk和cmake,android studio项目中CMake和NDK-build之间的区别
时间: 2024-03-30 21:40:22 浏览: 30
Android.mk和CMake都是Android NDK中的构建系统,而NDK-build是另一种构建系统。Android.mk使用Makefile语法,而CMake使用CMakeLists.txt语法。Android Studio默认使用CMake作为构建系统,但也支持使用NDK-build。
CMake比Android.mk更加灵活,支持跨平台构建,可以生成不同平台的构建文件。CMake也可以更容易地集成到其他IDE(如CLion)中。
NDK-build是Android NDK最初的构建系统,它使用Makefile语法。虽然它仍然可以使用,但Google已经不再推荐使用它并计划在未来的版本中删除它。
总的来说,CMake比Android.mk和NDK-build更为强大,更灵活,并且更易于维护。在Android Studio中,CMake也是首选的构建系统。
相关问题
如何在Android Studio中使用ndk-build?
在Android Studio中使用ndk-build可以通过以下步骤:
1.在`app/build.gradle`文件中添加以下代码:
```gradle
android {
...
externalNativeBuild {
ndkBuild {
path "src/main/jni/Android.mk"
}
}
}
```
其中,`path`后面的路径需要根据项目实际情况进行修改。
2.创建`src/main/jni`目录,并在该目录下创建`Android.mk`文件和`Application.mk`文件。
3.在`Android.mk`文件中指定要编译的源文件和生成的动态库:
```makefile
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := native-lib.cpp
include $(BUILD_SHARED_LIBRARY)
```
4.在`Application.mk`文件中指定编译选项:
```makefile
APP_ABI := armeabi-v7a x86
APP_PLATFORM := android-24
```
5.使用ndk-build命令编译生成动态库:
```shell
cd app/src/main
ndk-build
```
以上就是在Android Studio中使用ndk-build的基本步骤。需要注意的是,如果你的项目中使用了CMake,则需要在`app/build.gradle`文件中将`ndkBuild`替换为`cmake`,并修改路径为CMakeLists.txt所在的目录。
Android studio 中怎么使用C++编写的so库
在 Android Studio 中使用 C++ 编写的 so 库,需要先进行以下几个步骤:
1. 创建 C++ 代码文件,例如 `native-lib.cpp`。
2. 在 C++ 代码文件中,声明需要使用的函数,并实现这些函数。
例如:
```
#include <jni.h>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
```
3. 在 Android Studio 中创建 JNI 文件夹。
在 `app/src/main` 目录下创建一个名为 `jni` 的文件夹,并在其中创建一个名为 `Android.mk` 的文件和一个名为 `Application.mk` 的文件。
4. 在 `Android.mk` 文件中添加以下内容:
```
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := native-lib.cpp
include $(BUILD_SHARED_LIBRARY)
```
5. 在 `Application.mk` 文件中添加以下内容:
```
APP_ABI := all
APP_STL := c++_shared
```
6. 在 `build.gradle` 文件中添加以下内容:
```
android {
// ...
defaultConfig {
// ...
externalNativeBuild {
cmake {
cppFlags "-std=c++11" // 添加 C++11 支持
arguments "-DANDROID_PLATFORM=android-23",
"-DANDROID_TOOLCHAIN=clang"
// 如果使用 ndk-build 则添加以下配置
/* arguments "-DANDROID_PLATFORM=android-23",
"-DANDROID_TOOLCHAIN=clang",
"-DANDROID_STL=c++_shared" */
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
// 如果使用 ndk-build 则添加以下配置
/* ndkBuild {
path "jni/Android.mk"
} */
}
}
```
7. 在 Java 中加载 so 库并调用其中的函数。
例如:
```
static {
System.loadLibrary("native-lib");
}
public native String stringFromJNI();
```
8. 编译并运行应用程序。
以上就是在 Android Studio 中使用 C++ 编写的 so 库的基本步骤。具体实现可以参考官方文档或相关教程。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)