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