第三章:开发环境准备——工欲善其事,必先利其器
SDK 接入改造,说白了就是把别人的代码塞进你自己的项目里。环境配不对,后面全白费。我见过太多人花了两天配环境,最后发现模拟器跑不起来,真机连不上,依赖冲突到想摔键盘。嗯,咱们这节课就把这些坑一个一个填上。
3.1 集成开发工具配置
不同平台的 SDK 接入,IDE 选择其实没太多悬念。
- Android:Android Studio 是唯一官方推荐。版本别太老,至少 Arctic Fox 以上。
- iOS:Xcode,没得选。记得保持最新两个大版本以内。
- 跨平台:VSCode + 对应插件(Flutter、React Native 等)。
我个人习惯在项目根目录放一个 .editorconfig,统一缩进和编码。不要小看这个,团队协作时能省不少口水。
3.2 模拟器 / 真机环境搭建
模拟器快,真机准。两者都得有。
Android 模拟器
- 在 Android Studio 里打开 AVD Manager。
- 选一个系统镜像。我推荐 API 29-31 的 x86_64 镜像,带 Google Play 的。
- 如果开发机是 AMD CPU,记得装 Windows Hyper-V 或 Android Emulator Hypervisor Driver for AMD Processors。这一点经常被忽略。
iOS 模拟器
- Xcode → Preferences → Platforms,下载目标 iOS 版本。
- 模拟器里跑真机,大部分情况没问题,但注意:模拟器没有陀螺仪、相机、蓝牙。我遇到过做 AR SDK 接入的同学,在模拟器里调试了三天,结果一上真机直接崩溃——因为访问了不存在的硬件。
真机调试
| 平台 | 关键步骤 | 常见坑 |
|---|---|---|
| Android | 开启开发者选项 + USB 调试 | 数据线质量差导致频繁断开 |
| iOS | 添加 Apple ID、信任证书 | 每年免费证书只有 7 天有效期 |
3.3 依赖管理——CocoaPods / Gradle / npm
依赖管理,本质就是把你需要的库自动下载、编译、链接。每个平台都有自己的一套。
CocoaPods(iOS)
用 Podfile 声明依赖。我写 Podfile 的习惯是:use_frameworks! 要注释掉,如果某些静态库不支持动态 framework。
还有一个细节:source 'https://cdn.cocoapods.org/' 加上,否则国内网络有时拉不下来。
# Podfile 示例
platform :ios, '11.0'
source 'https://cdn.cocoapods.org/'
target 'YourApp' do
pod 'AFNetworking', '~> 4.0'
pod 'SDWebImage', '~> 5.0'
end
Gradle(Android)
多模块项目用 implementation 代替 compile。如果你从老项目迁移,记得把 compile 全部替换掉,不然编译警告看着心烦。
另外,我强烈建议在 gradle.properties 里加上 android.useAndroidX=true,避免 support 库和 AndroidX 混用。
// build.gradle (app 模块)
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.google.code.gson:gson:2.8.8'
}
注意:版本号不要写 +,那样每次编译都去检查最新版,一来慢,二来容易引入兼容性问题。我就掉过这个坑——一个 + 号让 CI 构建时间从 3 分钟变成 15 分钟。
npm(跨平台 / H5)
package.json 里的版本号用波浪号 ~ 还是脱字符 ^?我推荐 ^,自动 patch 升级,但不会跳大版本。
有一个场景要注意:如果你的 SDK 依赖于某个原生模块(比如 react-native-device-info),那么 npm install 之后还要跑 cd ios && pod install。很多人忘记第二步,结果编译报找不到头文件。
3.4 环境验证清单
配完了别急着写代码,先跑通一个“Hello World”级别的 demo,确认 SDK 调用能通过编译。
| 检查项 | 通过标准 |
|---|---|
| IDE 能识别 SDK 头文件/类 | 自动补全正常,无红色波浪线 |
| 模拟器编译 + 运行 | 应用启动正常,无闪退 |
| 真机编译 + 运行 | 签名正确,能安装到设备 |
| 依赖版本锁定 | git 提交时 lock 文件(Podfile.lock / package-lock.json)已生成 |