APP 定制开发实战:原生与跨平台技术选型、项目架构与上架全流程
定制一个 APP,技术层面要解决的其实就三件事:选什么技术栈、项目怎么组织、最后怎么过审上架。这篇把完整流程走一遍,附代码和配置,照做即可。
一、技术选型:原生 vs 跨平台表格维度原生(Kotlin/Swift)FlutterReact Native性能最高接近原生中等(有桥接损耗)双端代码复用0%(两套代码)90%+80%+包体积最小较大(自带引擎)中等热更新不支持部分支持CodePush 支持硬件能力调用完整需写 Platform Channel需写 Native Module适合场景重度性能/音视频大多数定制项目团队有前端背景经验结论:预算有限、双端都要、迭代快的定制项目,Flutter 是目前性价比最高的选择;只有重度图形、音视频处理才值得上双原生。二、Flutter 项目结构实战一个可维护的定制项目,目录结构建议按功能模块划分(feature-first):
lib/
├── main.dart # 入口
├── app/
│ ├── router.dart # 路由(go_router)
│ └── theme.dart # 全局主题
├── core/
│ ├── network/
│ │ └── api_client.dart # dio 封装
│ └── storage/ # 本地存储
└── features/
├── auth/ # 登录模块
│ ├── data/ # 接口 & 模型
│ ├── logic/ # 状态管理
│ └── view/ # 页面
└── home/
网络层用 dio 封装统一拦截器,Token 过期自动刷新:class ApiClient {
final Dio _dio = Dio(BaseOptions(
baseUrl: ‘https://api.example.com’,
connectTimeout: const Duration(seconds: 10),
));
ApiClient() {
_dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) async {
final token = await TokenStore.read();
if (token != null) {
options.headers[‘Authorization’] = ‘Bearer $token’;
}
handler.next(options);
},
onError: (e, handler) async {
if (e.response?.statusCode == 401) {
await TokenStore.refresh(); // 刷新后重试原请求
}
handler.next(e);
},
));
}
}
三、双端构建与发布配置
Android 侧签名( android/app/build.gradle ):signingConfigs {
release { storeFile file(“…/keystore/release.jks”) storePassword System.getenv(“STORE_PASSWORD”) keyAlias “release” keyPassword System.getenv(“KEY_PASSWORD”) }}buildTypes { release { signingConfig signingConfigs.release minifyEnabled true // 混淆 shrinkResources true // 压缩资源 }}
iOS 侧注意三点: Info.plist 里每个权限都要写用途说明文案(NSCameraUsageDescription 等),缺失直接拒审;隐私清单 PrivacyInfo.xcprivacy 2024 年起强制;第三方 SDK 要逐一申报。
一条命令出双端包:flutter build apk --release --split-per-abi # Android
flutter build ipa --release # iOS(需 macOS)
四、上架审核技术要点
国内安卓市场(应用宝/华为/小米/OPPO/vivo):
软著是硬门槛,提前 1-2 个月申请
APP 备案(工信部)2023 年起强制,未备案无法上架
隐私政策弹窗必须「首次启动、用户同意前不初始化任何 SDK」——这是被打回的最高频原因,代码上要把 SDK 初始化包在同意回调里:void main() {
runApp(const SplashGate()); // 先只弹隐私协议
}
Future onUserAgreed() async {
await initUmeng(); // 同意后再初始化第三方 SDK
await initPush();
runApp(const MyApp());
}
App Store:审核周期 24-48 小时;涉及虚拟商品必须走 IAP 内购;登录页必须提供「游客浏览」或「删除账号」入口,缺一拒审。
五、总结
定制 APP 的技术路线可以概括成:Flutter 一套代码出双端 → feature-first 结构保证可维护 → 签名/混淆/隐私合规提前配置 → 软著和备案与开发并行启动(软著周期最长,千万别等开发完再办)。下篇写 APP 服务端的选型:单体 vs 微服务在中小定制项目里怎么取舍,关注不迷路。
更多推荐

所有评论(0)