You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何确定设备工具链?Android平台C共享库测试应用编译问询

确定Android设备工具链与NDK编译完整指南

一、如何匹配设备对应的工具链

核心是先明确你的Android设备的CPU架构(ABI),这是选择工具链的关键:

  • 查看设备ABI:在电脑上连接设备后,运行命令 adb shell getprop ro.product.cpu.abi,就能直接获取当前设备的ABI类型(比如arm64-v8aarmeabi-v7ax86等)
  • 对应NDK工具链:NDK的工具链按ABI分类存放,比如针对arm64-v8a的是aarch64-linux-android-*系列工具,armeabi-v7a对应arm-linux-androideabi-*,你可以在NDK安装目录的toolchains/llvm/prebuilt/<你的操作系统>/bin路径下找到对应的编译工具(如aarch64-linux-android-gcc

二、完善你的Android.mk配置与编译逻辑

你已经写了预编译共享库的基础代码,我帮你补全测试应用的完整配置,并标注关键注意点:

完整Android.mk示例

LOCAL_PATH := $(call my-dir)

# 预编译第一个依赖共享库
include $(CLEAR_VARS)
LOCAL_MODULE := depend1
# 注意:这里的路径要和你的预编译库存放位置匹配,若按ABI分目录,可写成 jniLibs/arm64-v8a/libdepend1.so
LOCAL_SRC_FILES := libdepend1.so
include $(PREBUILT_SHARED_LIBRARY)

# 预编译第二个依赖共享库
include $(CLEAR_VARS)
LOCAL_MODULE := depend2
LOCAL_SRC_FILES := libdepend2.so
include $(PREBUILT_SHARED_LIBRARY)

# 编译测试应用可执行文件
include $(CLEAR_VARS)
LOCAL_MODULE := test
# 替换成你的测试应用C源码文件名,比如test.c
LOCAL_SRC_FILES := test.c
# 链接依赖的两个共享库
LOCAL_SHARED_LIBRARIES := depend1 depend2
# 明确指定目标ABI,和设备保持一致(可选,但能避免编译多余架构)
LOCAL_MODULE_TARGET_ARCH := arm64-v8a
include $(BUILD_EXECUTABLE)

额外优化:搭配Application.mk统一配置

如果用的是较新版本NDK,建议新增Application.mk来统一全局配置:

# Application.mk示例
APP_ABI := arm64-v8a  # 和设备ABI一致
APP_PLATFORM := android-24  # 对应设备的Android版本API等级,比如Android7.0对应API24

三、编译与运行测试应用的步骤

  1. 把预编译的libdepend1.solibdepend2.so,以及你的test.cAndroid.mkApplication.mk放在同一目录(或按NDK规范,将库放在jniLibs/<ABI>子目录)
  2. 打开终端进入该目录,执行NDK编译命令:
ndk-build
  1. 编译完成后,会在libs/<目标ABI>目录下生成test可执行文件和对应的共享库
  2. 将文件推送到设备:
adb push libs/<目标ABI>/test /data/local/tmp/
adb push libs/<目标ABI>/libdepend1.so /data/local/tmp/
adb push libs/<目标ABI>/libdepend2.so /data/local/tmp/
  1. 赋予权限并运行:
adb shell chmod +x /data/local/tmp/test
adb shell LD_LIBRARY_PATH=/data/local/tmp /data/local/tmp/test

这样就能顺利完成你的C语言测试应用在Android设备上的编译与运行了。

内容的提问来源于stack exchange,提问作者Rohith Mohan

火山引擎 最新活动