第三章 开发环境搭建:Android Studio安装与配置、NDK与CMake工具链集成、串口调试工具准备、驱动库导入

好,咱们正式开始动手了。这一章,说白了就是“磨刀不误砍柴工”。环境搭不好,后面全是坑。我见过太多人卡在编译阶段,最后发现是NDK版本不对——这种错误,真的让人抓狂。

我个人习惯,先把所有工具列个清单,再一个一个装。这样心里有数,不会漏东西。

3.1 Android Studio安装与配置

Android Studio,咱们的主力IDE。版本的话,我建议用最新的稳定版。别追预览版,容易出幺蛾子。

安装步骤:

  1. 去官网下载安装包。Windows选.exe,Mac选.dmg,Linux选.tar.gz。
  2. 安装时,记得勾选“Android Virtual Device”。虽然咱们调试PDA用真机,但偶尔跑个模拟器测试UI也挺方便。
  3. 第一次启动,它会自动下载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:

  1. 在Android Studio里,打开 SDK ManagerSDK Tools 选项卡。
  2. 勾选 NDK (Side by side)CMake
  3. 点击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-v7aarm64-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项目里。

步骤:

  1. app/src/main 下创建 jniLibs 文件夹。
  2. jniLibs 里创建 armeabi-v7aarm64-v8a 子文件夹。
  3. 把对应的 .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扫出条码来。