| 
 | 
 
在 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 项目中了! |   
 
 
 
 |