6.第一个c++安卓程序编译运行

安卓模拟器安装和第一个C++安卓程序编译运行

序号:6 | Mac Intel芯片 | Android Studio Panda 2 | Pixel 9模拟器


🎯 目标

创建一个简单的Android应用,在屏幕上显示 "Hello from C++"

csharp 复制代码
┌──────────────────────────────────────┐
│           TestLog                    │
│                                      │
│        Hello from C++                │
│                                      │
│                                      │
│                                      │
└──────────────────────────────────────┘

📋 准备工作

1. 确认Android Studio已安装

打开Android Studio,确保版本是 Panda 2 | 2025.3.2

2. 安装NDK和CMake

打开Android Studio → Settings → Appearance & Behavior → System Settings → Android SDK

csharp 复制代码
SDK Tools 标签页:
   ☑ NDK (Side by side)       # 选择最新版本
   ☑ CMake                    # 选择最新版本
   ☑ Android Emulator         # 确保已安装

点击"Apply"安装这些工具。

3. 创建模拟器

打开 Device Manager(右下角小手机图标):

arduino 复制代码
1. 点击 "Create device"
2. 选择 "Pixel 9"(推荐选择API 34或35)
3. 点击 "Next"
4. 选择系统镜像(推荐 "Tiramisu" 或 "UpsideDownCake")
5. 点击 "Next"
6. 点击 "Finish"

🚀 第一步:创建新项目

1. 新建Native C++项目

sql 复制代码
File → New → New Project...
   │
   ├── 选择 "Native C++"(在Phone & Tablet分类里)
   │   └── 点击 "Next"
   │
   ├── 填写项目信息:
   │   ├── Name: TestLog(或你喜欢的名字)
   │   ├── Package name: com.example.testlog
   │   ├── Save location: 选择一个目录
   │   └── Language: Java(也可以选Kotlin)
   │   └── Minimum SDK: API 24(推荐)
   │   └── 点击 "Next"
   │
   ├── C++ Standard: 选择 "C++17"
   │   └── 点击 "Finish"

2. 等待项目加载

Android Studio会自动下载必要的依赖,耐心等待。


📝 第二步:修改代码

1. 修改C++代码

打开 app/src/main/cpp/native-lib.cpp

cpp 复制代码
#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_testlog_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

这段代码的意思:

  • extern "C" 告诉编译器用C语言方式导出函数
  • Java_com_example_testlog_MainActivity_stringFromJNI 是JNI函数名
  • 返回字符串 "Hello from C++"

2. 修改布局文件

打开 app/src/main/res/layout/activity_main.xml

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/sample_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp" />

</LinearLayout>

3. 修改MainActivity

打开 app/src/main/java/com/example/testlog/MainActivity.java

java 复制代码
package com.example.testlog;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    // 加载C++库
    static {
        System.loadLibrary("testlog");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取TextView并设置文本
        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    // 声明JNI方法
    public native String stringFromJNI();
}

🔧 第三步:配置构建文件

1. 检查build.gradle

打开 app/build.gradle(Module级别)

gradle 复制代码
android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
            }
        }
    }
    ...
    externalNativeBuild {
        cmake {
            path file("src/main/cpp/CMakeLists.txt")
            version "3.22.1"  // 使用你安装的CMake版本
        }
    }
}

2. 检查CMakeLists.txt

打开 app/src/main/cpp/CMakeLists.txt

cmake 复制代码
cmake_minimum_required(VERSION 3.22.1)

project("testlog")

add_library(
        testlog
        SHARED
        native-lib.cpp)

find_library(
        log-lib
        log)

target_link_libraries(
        testlog
        ${log-lib})

🚀 第四步:编译运行

1. 选择设备

在Android Studio顶部工具栏:

  • 点击设备选择下拉框
  • 选择你创建的 Pixel 9 模拟器

2. 点击运行按钮

arduino 复制代码
点击绿色的 "Run" 按钮 ▶️

3. 等待编译和安装

markdown 复制代码
Android Studio会:
   1. 编译C++代码(ndk-build)
   2. 打包APK
   3. 启动模拟器
   4. 安装并运行APP

✅ 成功!

你应该会看到:

csharp 复制代码
┌──────────────────────────────────────┐
│           TestLog                    │
│                                      │
│        Hello from C++                │
│                                      │
│                                      │
│                                      │
└──────────────────────────────────────┘

📂 项目结构

bash 复制代码
TestLog/
├── app/
│   ├── src/
│   │   └── main/
│   │       ├── cpp/           # C++代码
│   │       │   ├── CMakeLists.txt
│   │       │   └── native-lib.cpp
│   │       ├── java/          # Java代码
│   │       │   └── com/example/testlog/
│   │       │       └── MainActivity.java
│   │       └── res/           # 资源文件
│   │           └── layout/
│   │               └── activity_main.xml
│   └── build.gradle           # 构建配置
└── gradle.properties

💡 常见问题

Q1:编译失败,找不到NDK?

arduino 复制代码
解决方法:
   1. 打开 File → Project Structure
   2. 选择 "SDK Location"
   3. 确认 "Android NDK location" 已设置
   4. 如果为空,点击 "Download NDK"

Q2:模拟器启动慢?

markdown 复制代码
加速技巧:
   1. 确保启用了Intel VT-x(在BIOS中开启)
   2. 打开模拟器设置 → Performance
   3. 选择 "Hardware - GLES 2.0"
   4. 增加模拟器内存(推荐至少2GB)

Q3:应用崩溃,找不到库?

markdown 复制代码
检查:
   1. CMakeLists.txt中的库名是否正确
   2. System.loadLibrary("testlog") 中的名字是否匹配
   3. 确认NDK已正确安装

🎯 总结

步骤回顾

步骤 操作
1 创建Native C++项目
2 修改native-lib.cpp
3 修改布局文件
4 修改MainActivity
5 选择Pixel 9模拟器
6 点击运行

关键概念

scss 复制代码
Java层 ↔ JNI层 ↔ C++层
   │         │         │
   │   调用   │   调用   │
   │         │         │
   ↓         ↓         ↓
stringFromJNI() → JNI桥接 → 返回字符串

本文档整理于 2026-06-14

安卓模拟器安装和第一个C++安卓程序编译运行

序号:6 | Mac Intel芯片 | Android Studio Panda 2 | Pixel 9模拟器


🎯 目标

创建一个简单的Android应用,在屏幕上显示 "Hello from C++"

csharp 复制代码
┌──────────────────────────────────────┐
│           TestLog                    │
│                                      │
│        Hello from C++                │
│                                      │
│                                      │
│                                      │
└──────────────────────────────────────┘

📋 准备工作

1. 确认Android Studio已安装

打开Android Studio,确保版本是 Panda 2 | 2025.3.2

2. 安装NDK和CMake

打开Android Studio → Settings → Appearance & Behavior → System Settings → Android SDK

csharp 复制代码
SDK Tools 标签页:
   ☑ NDK (Side by side)       # 选择最新版本
   ☑ CMake                    # 选择最新版本
   ☑ Android Emulator         # 确保已安装

点击"Apply"安装这些工具。

3. 创建模拟器

打开 Device Manager(右下角小手机图标):

arduino 复制代码
1. 点击 "Create device"
2. 选择 "Pixel 9"(推荐选择API 34或35)
3. 点击 "Next"
4. 选择系统镜像(推荐 "Tiramisu" 或 "UpsideDownCake")
5. 点击 "Next"
6. 点击 "Finish"

🚀 第一步:创建新项目

1. 新建Native C++项目

sql 复制代码
File → New → New Project...
   │
   ├── 选择 "Native C++"(在Phone & Tablet分类里)
   │   └── 点击 "Next"
   │
   ├── 填写项目信息:
   │   ├── Name: TestLog(或你喜欢的名字)
   │   ├── Package name: com.example.testlog
   │   ├── Save location: 选择一个目录
   │   └── Language: Java(也可以选Kotlin)
   │   └── Minimum SDK: API 24(推荐)
   │   └── 点击 "Next"
   │
   ├── C++ Standard: 选择 "C++17"
   │   └── 点击 "Finish"

2. 等待项目加载

Android Studio会自动下载必要的依赖,耐心等待。


📝 第二步:修改代码

1. 修改C++代码(包含日志输出)

打开 app/src/main/cpp/native-lib.cpp

cpp 复制代码
#include <jni.h>
#include <string>
#include <android/log.h>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_testlog_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    
    // 输出日志到Android Logcat
    __android_log_write(ANDROID_LOG_FATAL, "testlog", "test log for android");
    __android_log_print(ANDROID_LOG_FATAL, "testlog", "test log for android");
    
    return env->NewStringUTF(hello.c_str());
}

这段代码的意思:

  • #include <android/log.h> - 引入Android日志库
  • __android_log_write() - 写入日志到Logcat
  • __android_log_print() - 格式化输出日志
  • ANDROID_LOG_FATAL - 日志级别(FATAL级别会显示红色)
  • "testlog" - 日志标签(方便筛选)

2. 修改布局文件

打开 app/src/main/res/layout/activity_main.xml

xml 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/sample_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24sp" />

</LinearLayout>

3. 修改MainActivity

打开 app/src/main/java/com/example/testlog/MainActivity.java

java 复制代码
package com.example.testlog;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    // 加载C++库
    static {
        System.loadLibrary("testlog");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取TextView并设置文本
        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());
    }

    // 声明JNI方法
    public native String stringFromJNI();
}

🔧 第三步:配置构建文件

1. 检查build.gradle

打开 app/build.gradle(Module级别)

gradle 复制代码
android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
            }
        }
    }
    ...
    externalNativeBuild {
        cmake {
            path file("src/main/cpp/CMakeLists.txt")
            version "3.22.1"  // 使用你安装的CMake版本
        }
    }
}

2. 检查CMakeLists.txt

打开 app/src/main/cpp/CMakeLists.txt

cmake 复制代码
cmake_minimum_required(VERSION 3.22.1)

project("testlog")

add_library(
        testlog
        SHARED
        native-lib.cpp)

find_library(
        log-lib
        log)

target_link_libraries(
        testlog
        ${log-lib})

🚀 第四步:编译运行

1. 选择设备

在Android Studio顶部工具栏:

  • 点击设备选择下拉框
  • 选择你创建的 Pixel 9 模拟器

2. 点击运行按钮

arduino 复制代码
点击绿色的 "Run" 按钮 ▶️

3. 等待编译和安装

markdown 复制代码
Android Studio会:
   1. 编译C++代码(ndk-build)
   2. 打包APK
   3. 启动模拟器
   4. 安装并运行APP

✅ 成功!

1. 屏幕显示效果

csharp 复制代码
┌──────────────────────────────────────┐
│           TestLog                    │
│                                      │
│        Hello from C++                │
│                                      │
│                                      │
│                                      │
└──────────────────────────────────────┘

2. Logcat日志输出

打开 Logcat(Android Studio底部面板):

bash 复制代码
搜索框输入:testlog

你会看到日志:
   FATAL  testlog: test log for android
   FATAL  testlog: test log for android

3. 日志级别说明

级别 宏定义 颜色 用途
VERBOSE ANDROID_LOG_VERBOSE 黑色 详细信息
DEBUG ANDROID_LOG_DEBUG 蓝色 调试信息
INFO ANDROID_LOG_INFO 绿色 一般信息
WARN ANDROID_LOG_WARN 黄色 警告信息
ERROR ANDROID_LOG_ERROR 红色 错误信息
FATAL ANDROID_LOG_FATAL 红色 致命错误

📂 项目结构

bash 复制代码
TestLog/
├── app/
│   ├── src/
│   │   └── main/
│   │       ├── cpp/           # C++代码
│   │       │   ├── CMakeLists.txt
│   │       │   └── native-lib.cpp
│   │       ├── java/          # Java代码
│   │       │   └── com/example/testlog/
│   │       │       └── MainActivity.java
│   │       └── res/           # 资源文件
│   │           └── layout/
│   │               └── activity_main.xml
│   └── build.gradle           # 构建配置
└── gradle.properties

💡 常见问题

Q1:编译失败,找不到NDK?

arduino 复制代码
解决方法:
   1. 打开 File → Project Structure
   2. 选择 "SDK Location"
   3. 确认 "Android NDK location" 已设置
   4. 如果为空,点击 "Download NDK"

Q2:模拟器启动慢?

markdown 复制代码
加速技巧:
   1. 确保启用了Intel VT-x(在BIOS中开启)
   2. 打开模拟器设置 → Performance
   3. 选择 "Hardware - GLES 2.0"
   4. 增加模拟器内存(推荐至少2GB)

Q3:应用崩溃,找不到库?

markdown 复制代码
检查:
   1. CMakeLists.txt中的库名是否正确
   2. System.loadLibrary("testlog") 中的名字是否匹配
   3. 确认NDK已正确安装

🎯 总结

步骤回顾

步骤 操作
1 创建Native C++项目
2 修改native-lib.cpp
3 修改布局文件
4 修改MainActivity
5 选择Pixel 9模拟器
6 点击运行

关键概念

scss 复制代码
Java层 ↔ JNI层 ↔ C++层
   │         │         │
   │   调用   │   调用   │
   │         │         │
   ↓         ↓         ↓
stringFromJNI() → JNI桥接 → 返回字符串

本文档整理于 2026-06-14

相关推荐
音视频牛哥7 天前
不只是等待 IDR:SmartMediaKit 播放器对 H.264 GDR 码流的完整适配实践
音视频开发·视频编码·直播
三木彤14 天前
语音转文本python
音视频开发
鹧鸪晏18 天前
Android GLSurfaceView 完全指南
android·音视频开发
ltlovezh21 天前
AAC 元数据:ADTS 与 ASC 的区别、转换和常见坑
后端·ffmpeg·音视频开发
MonkeyKing23 天前
iOS 音频实战:边播边缓存、预加载与断点续播完整实现
音视频开发
11年老程序猿在线搬砖23 天前
2026年语聊APP开发费用深度拆解:从MVP到百万并发的预算清单
音视频开发·创业·技术选型·社交app开发·语聊app·开发费用
码流怪侠1 个月前
Android MediaCodec 全面详解:从入门到精通
android·程序员·音视频开发
L_Xian1 个月前
StarrySky重新维护了,摆烂了一段时间,想想还是搞搞吧。
android·github·音视频开发
ryn483981 个月前
关于我是如何用AI创作一个1分半的短视频的
aigc·音视频开发