第三章 开发环境搭建:Android Studio安装与配置、NDK与CMake工具链集成、串口调试工具准备、驱动库导入
好,咱们正式开始动手了。这一章,说白了就是“磨刀不误砍柴工”。环境搭不好,后面全是坑。我见过太多人卡在编译阶段,最后发现是NDK版本不对——这种错误,真的让人抓狂。
我个人习惯,先把所有工具列个清单,再一个一个装。这样心里有数,不会漏东西。
3.1 Android Studio安装与配置
Android Studio,咱们的主力IDE。版本的话,我建议用最新的稳定版。别追预览版,容易出幺蛾子。
安装步骤:
- 去官网下载安装包。Windows选.exe,Mac选.dmg,Linux选.tar.gz。
- 安装时,记得勾选“Android Virtual Device”。虽然咱们调试PDA用真机,但偶尔跑个模拟器测试UI也挺方便。
- 第一次启动,它会自动下载SDK。嗯,这里要注意——SDK路径不要有中文。我以前吃过这个亏,编译时莫名其妙报错,查了半天才发现是路径里有中文。
小技巧: 我个人习惯把SDK放在磁盘根目录,比如
D:\Android\SDK。这样路径短,不容易出错。
配置Gradle:
Android Studio默认用Gradle构建。咱们做PDA开发,建议用Gradle 7.0以上版本。为什么?因为NDK集成更友好。
// 项目级 build.gradle
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.4"
}
}
3.2 NDK与CMake工具链集成
PDA条码扫描,核心代码往往是C/C++写的。所以NDK(Native Development Kit)是必须的。说白了,就是让Java能调用C代码的桥梁。
安装NDK:
- 在Android Studio里,打开 SDK Manager → SDK Tools 选项卡。
- 勾选 NDK (Side by side) 和 CMake。
- 点击Apply,等着下载就行。
避坑指南: 我曾经遇到过NDK版本不匹配的问题。比如你用NDK 25,但某个库只支持NDK 23。这时候编译会报“undefined reference”。解决办法:在
local.properties 里指定NDK路径。
# local.properties
ndk.dir=D\:\\Android\\SDK\\ndk\\23.1.7779620
CMake配置:
CMake是用来管理C/C++编译的。咱们在 app/build.gradle 里配置:
android {
defaultConfig {
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
// 指定要生成的ABI
abiFilters "armeabi-v7a", "arm64-v8a"
}
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
}
你想想看,为什么只保留 armeabi-v7a 和 arm64-v8a?因为现在市面上的PDA,基本都是ARM架构。x86的?我做了这么多年,几乎没见过。
3.3 串口调试工具准备
PDA和电脑通信,最常用的就是串口。别小看这一步,工具选对了,效率翻倍。
推荐工具:
- Windows: SecureCRT 或 Putty。我个人偏爱SecureCRT,因为它支持标签页,可以同时开多个串口会话。
- Mac: screen 命令 或 Serial.app。screen是系统自带的,轻量好用。
- Linux: minicom 或 picocom。minicom功能强,但配置稍复杂。
串口参数设置:
| 参数 | 典型值 | 说明 |
|---|---|---|
| 波特率 | 115200 | PDA模块常用这个速率 |
| 数据位 | 8 | 标准设置 |
| 停止位 | 1 | 一般用1位 |
| 校验位 | None | 无校验,简单可靠 |
| 流控 | None | 硬件流控容易出问题,建议关闭 |
重要: 连接PDA之前,先确认串口线是交叉线还是直连线。我遇到过好几次,因为线序不对,折腾了半天才发现是线的问题。
3.4 驱动库导入
驱动库,就是厂商提供的.so文件。咱们要把它集成到Android项目里。
步骤:
- 在
app/src/main下创建jniLibs文件夹。 - 在
jniLibs里创建armeabi-v7a和arm64-v8a子文件夹。 - 把对应的
.so文件放进去。
app/
├── src/
│ └── main/
│ ├── java/
│ ├── jniLibs/
│ │ ├── armeabi-v7a/
│ │ │ └── libscanner.so
│ │ └── arm64-v8a/
│ │ └── libscanner.so
│ └── res/
加载驱动:
在Java代码里,用 System.loadLibrary() 加载:
public class ScannerManager {
static {
System.loadLibrary("scanner");
}
// 声明native方法
public native int openScanner();
public native int closeScanner();
public native byte[] readBarcode();
}
经验之谈: 有些厂商的驱动库依赖其他系统库。比如
libscanner.so 可能依赖 libusb.so。这时候,你得把所有依赖库都放进去。否则运行时会报 UnsatisfiedLinkError。我曾经因为这个,排查了整整一个下午。
嗯,到这里,开发环境就搭好了。是不是感觉挺简单的?其实环境搭建就是这样,按部就班,别跳步。下一章,咱们开始写真正的代码——让PDA扫出条码来。