(TODO)
要使用 Android NDK 和 CMake 编译一个简单的 C++ "Hello World" 项目,你可以按照以下步骤设置项目结构和文件。这个例子将展示如何使用 CMake 和 Android Studio 来编译和运行一个简单的 C++ 程序。
### 项目结构
创建一个目录结构如下:
```
MyNDKProject/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── cpp/
│ │ │ │ └── hello.cpp
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── myapp/
│ │ │ └── MainActivity.java
│ └── build.gradle
├── CMakeLists.txt
└── build.gradle
```
### 1. 编写 C++ 源文件
在 `app/src/main/cpp/` 目录下创建一个简单的 C++ 文件 `hello.cpp`:
```cpp
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_myapp_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
```
### 2. 创建 CMakeLists.txt
在项目根目录下创建 `CMakeLists.txt` 文件:
```cmake
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-lib
SHARED
src/main/cpp/hello.cpp
)
find_library(
log-lib
log
)
target_link_libraries(
native-lib
${log-lib}
)
```
### 3. 编写 Java 代码
在 `app/src/main/java/com/example/myapp/` 目录下创建 `MainActivity.java`:
```java
package com.example.myapp;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
public native String stringFromJNI();
}
```
### 4. 配置 Gradle 脚本
#### 项目级别 `build.gradle`
确保你的项目级别 `build.gradle` 文件包含以下内容:
```groovy
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.0"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
```
#### 模块级别 `build.gradle`
在 `app/build.gradle` 中配置 CMake:
```groovy
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.example.myapp"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
}
```
### 5. 编译和运行
- **打开 Android Studio**:使用 Android Studio 打开项目。
- **编译项目**:点击“Build”来编译项目。
- **运行应用**:在模拟器或物理设备上运行应用,你应该会看到 "Hello from C++" 显示在屏幕上。
### 总结
这个例子展示了如何使用 Android NDK 和 CMake 在 Android Studio 中编译和运行一个简单的 C++ "Hello World" 项目。通过 JNI,C++ 代码可以与 Java 代码交互,并在 Android 应用中显示结果。