Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 128|回复: 0

请简介使用android sdk build tools 和 android NDK with LLDB and CMake ...

[复制链接]

393

主题

556

帖子

3296

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3296
发表于 2025-10-6 22:27:15 | 显示全部楼层 |阅读模式
在 Android 项目中编译 .so 文件(动态链接库),通常需要 Android SDK Build Tools、Android NDK 以及 CMake/LLDB 的配合。以下是详细步骤和简介:

1. 环境准备
1.1 安装 Android NDK 和 CMake
在 Android Studio 中:
File → Settings → Appearance & Behavior → System Settings → Android SDK
切换到 SDK Tools 选项卡,勾选:
NDK (Native Development Kit)
CMake
LLDB (Low-Level Debugger)
点击 Apply 安装。
1.2 配置 local.properties(可选)
如果 NDK 不在默认路径,可以在 local.properties 中指定:
properties
采纳
复制
新建文件
ndk.dir=/path/to/android-ndk
2. 配置 build.gradle
2.1 在 app/build.gradle 中启用 NDK 支持
gradle
采纳
复制
新建文件
android {
    compileSdkVersion 34  // 使用最新 SDK 版本
    defaultConfig {
        applicationId "com.example.myapp"
        minSdkVersion 21
        targetSdkVersion 34
        versionCode 1
        versionName "1.0"

        // 启用 NDK 支持
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"  // 可选:指定 C++ 标准
                arguments "-DANDROID_STL=c++_shared"  // 可选:使用 libc++_shared
            }
        }

        // 指定 ABI(可选,默认包含所有)
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
    }

    // 配置 CMake 路径
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"  // CMake 文件路径
            version "3.22.1"  // 指定 CMake 版本(可选)
        }
    }

    // 可选:配置 NDK 版本
    ndkVersion "25.1.8937393"  // 指定 NDK 版本
}
3. 编写 C/C++ 代码和 CMakeLists.txt
3.1 创建 src/main/cpp 目录
在 app/src/main/ 下新建 cpp 文件夹,存放 C/C++ 代码和 CMakeLists.txt。
3.2 示例 C++ 代码 (native-lib.cpp)
C/C++
采纳
复制
新建文件
#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());
}
3.3 示例 CMakeLists.txt
cmake
采纳
复制
新建文件
cmake_minimum_required(VERSION 3.4.1)

# 创建动态库
add_library(
        native-lib
        SHARED
        native-lib.cpp)  # 替换为你的 C++ 文件

# 查找 log 库(Android NDK 提供)
find_library(
        log-lib
        log)

# 链接 log 库
target_link_libraries(
        native-lib
        ${log-lib})
4. 在 Java/Kotlin 中调用 .so 文件
4.1 加载 .so 文件
Java
采纳
复制
新建文件
public class MainActivity extends AppCompatActivity {
    static {
        System.loadLibrary("native-lib");  // 对应 CMake 中的 add_library 名称
    }

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

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

        TextView tv = findViewById(R.id.sample_text);
        tv.setText(stringFromJNI());  // 调用 native 方法
    }
}
5. 编译和运行
同步 Gradle(点击 Sync Now)。
构建项目(Build → Make Project)。
运行到设备/模拟器(Run → Run 'app')。
检查 app/build/intermediates/cmake/debug/obj/ 目录,确认 .so 文件已生成。
6. 关键点总结
组件        作用
Android NDK        编译 C/C++ 代码为 .so 文件
CMake        管理 C/C++ 项目构建
LLDB        调试 Native 代码
build.gradle        配置 NDK、ABI、CMake 路径
CMakeLists.txt        定义如何编译 C/C++ 代码
System.loadLibrary()        在 Java/Kotlin 中加载 .so 文件
7. 常见问题
7.1 .so 文件未生成?
检查 ndk.dir 是否正确。
确保 abiFilters 包含目标 ABI(如 arm64-v8a)。
检查 CMakeLists.txt 是否正确配置 add_library。
7.2 如何调试 Native 代码?
在 Android Studio 中使用 LLDB(需要 lldb 组件)。
在 build.gradle 中启用调试:
gradle
采纳
复制
新建文件
android {
    defaultConfig {
        externalNativeBuild {
            cmake {
                arguments "-DCMAKE_BUILD_TYPE=Debug"
            }
        }
    }
}
这样,您就可以成功使用 Android SDK Build Tools + NDK + CMake + LLDB 编译 .so 文件并集成到 Android 项目中了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-10-25 10:54 , Processed in 0.010805 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表