You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
7.3 KiB
7.3 KiB
📱 Android APK 打包完整流程文档
🔧 前置条件检查
1. 项目信息
- 项目路径:
/Library/code/app
- 项目类型: Expo + React Native 0.76.9
- 原NDK版本: 25.2.9519653 (不兼容)
- 目标NDK版本: 26.1.10909125 (兼容RN 0.76)
📋 完整操作流程
步骤1: 安装正确的NDK版本
# 在项目根目录执行
cd /Library/code/app
# 安装NDK 26.1.10909125
sudo /Users/mac/Library/Android/sdk/cmdline-tools/19.0/bin/sdkmanager "ndk;26.1.10909125"
步骤2: 更新EAS配置
文件路径: /Library/code/app/eas.json
修改内容:
{
"cli": {
"version": ">= 16.4.1",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"android": {
"buildType": "apk",
"ndk": "26.1.10909125"
}
},
"preview": {
"distribution": "internal",
"android": {
"buildType": "apk",
"ndk": "26.1.10909125"
},
"ios": {
"simulator": true
}
},
"production": {
"autoIncrement": true,
"android": {
"buildType": "app-bundle",
"ndk": "26.1.10909125"
}
}
},
"submit": {
"production": {}
}
}
步骤3: 重新生成Android项目
# 删除旧的Android目录
rm -rf android
# 重新生成Android项目
npx expo prebuild --platform android
步骤4: 创建网络安全配置文件
创建目录:
mkdir -p android/app/src/main/res/xml
文件路径: /Library/code/app/android/app/src/main/res/xml/network_security_config.xml
新建文件,内容:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<!-- 允许开发环境的HTTP连接 -->
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
<domain includeSubdomains="true">127.0.0.1</domain>
<domain includeSubdomains="true">10.0.2.2</domain>
<domain includeSubdomains="true">10.0.3.2</domain>
</domain-config>
<!-- 生产环境HTTPS域名配置 -->
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.brainnel.com</domain>
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</domain-config>
<!-- 基础配置 -->
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
步骤5: 更新AndroidManifest.xml
文件路径: /Library/code/app/android/app/src/main/AndroidManifest.xml
修改内容:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<!-- 添加网络权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<queries>
<intent>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="https"/>
</intent>
</queries>
<!-- 在application标签中添加网络安全配置引用 -->
<application android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="true"
android:theme="@style/AppTheme"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config">
<!-- 其他配置保持不变 -->
</application>
</manifest>
关键修改点:
- 添加
ACCESS_NETWORK_STATE
和ACCESS_WIFI_STATE
权限 - 在
application
标签中添加android:networkSecurityConfig="@xml/network_security_config"
步骤6: 构建APK
# 进入Android目录
cd android
# 构建Debug版本(需要Metro服务器)
./gradlew assembleDebug
# 构建Release版本(独立运行,推荐)
./gradlew assembleRelease
📁 生成的文件位置
Debug APK
- 路径:
/Library/code/app/android/app/build/outputs/apk/debug/app-debug.apk
- 大小: 228MB
- 特点: 需要Metro开发服务器
Release APK ⭐
- 路径:
/Library/code/app/android/app/build/outputs/apk/release/app-release.apk
- 大小: 107MB
- 特点: 独立运行,生产就绪
🔧 修改的文件汇总
文件路径 | 操作类型 | 修改内容 |
---|---|---|
eas.json |
修改 | 更新NDK版本为26.1.10909125 |
android/app/src/main/res/xml/network_security_config.xml |
新建 | 网络安全配置 |
android/app/src/main/AndroidManifest.xml |
修改 | 添加网络权限和安全配置引用 |
⚠️ 重要注意事项
- NDK版本兼容性: React Native 0.76+ 需要NDK 26+
- 网络配置: 解决APK网络访问问题的关键
- 构建选择: 推荐使用Release版本进行测试和发布
- 权限设置: 确保所有必要的网络权限已添加
🚀 快速重现命令
如果需要重新构建,执行以下命令序列:
# 1. 进入项目目录
cd /Library/code/app
# 2. 重新生成Android项目(如果需要)
rm -rf android && npx expo prebuild --platform android
# 3. 创建网络配置(如果文件不存在)
mkdir -p android/app/src/main/res/xml
# 然后手动添加network_security_config.xml文件
# 4. 构建Release APK
cd android && ./gradlew assembleRelease
最终APK位置: /Library/code/app/android/app/build/outputs/apk/release/app-release.apk
✅ 验证步骤
- 检查APK大小: Release版本约107MB
- 安装测试: 在Android设备上安装APK
- 网络测试: 验证应用能正常访问网络API
- 功能测试: 确认所有功能正常工作
🔄 Google 登录配置
当前状态
- ✅ Android CLIENT_ID: 已配置
- 🔄 iOS CLIENT_ID: 需要提供
- ✅ 原生登录: 已配置,无需浏览器
文件位置
/Library/code/app/app/screens/loginList/index.tsx
// 配置 Google 登录
GoogleSignin.configure({
iosClientId: "YOUR_IOS_CLIENT_ID_HERE.apps.googleusercontent.com", // 需要替换
webClientId: "529750832779-d0jpf2493plgm8eutkmk9e9t3rhkta8b.apps.googleusercontent.com", // Android CLIENT_ID
scopes: ['profile', 'email'],
offlineAccess: true,
});
📝 构建记录
- 构建日期: 2024年5月23日
- 构建时间: Debug 17分钟,Release 25分钟
- NDK版本: 26.1.10909125
- React Native版本: 0.76.9
- 构建结果: ✅ 成功
此文档记录了完整的Android APK打包流程,可作为后续开发和部署的参考。