Android学习9 -- NDK3--VNDK(TODO)

(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 应用中显示结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值