Repository navigation
105 lines (88 loc) · 3.08 KB
/
Copy pathreact-native-android.yml
File metadata and controls
105 lines (88 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
name: React Native Android CI/CD
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
env:
NODE_VERSION: 18
JAVA_VERSION: 17
jobs:
build-and-release:
name: Build and Release APK
runs-on: ubuntu-latest
steps:
# 1. 检出代码
- name: Checkout code
uses: actions/checkout@v4
# 2. 设置JDK环境
- name: Set up JDK ${{ env.JAVA_VERSION }}
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: ${{ env.JAVA_VERSION }}
# 3. 设置Node.js环境
- name: Set up Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'yarn'
# 4. 提取版本号(从package.json)
- name: Get version from package.json
id: package-version
run: |
VERSION=$(node -p "require('./package.json').version")
echo "APP_VERSION=$VERSION" >> $GITHUB_ENV
echo "APK_NAME=app-release-$VERSION.apk" >> $GITHUB_ENV
echo "APK_PATH=android/app/build/outputs/apk/release/app-release.apk" >> $GITHUB_ENV
# 5. 清理和安装依赖
- name: Clean conflicting lock files
run: rm -f package-lock.json
- name: Install dependencies
run: yarn install --frozen-lockfile
# 6. 生成 React Native Bundle
- name: Create assets directory
run: mkdir -p android/app/src/main/assets
- name: Generate React Native Bundle
run: |
npx react-native bundle \
--platform android \
--dev false \
--entry-file index.js \
--bundle-output android/app/src/main/assets/index.android.bundle \
--assets-dest android/app/src/main/res/
# 7. 修复Gradle权限
- name: Fix Gradle permissions
run: chmod +x android/gradlew
# 8. 构建APK
- name: Build Android APK
run: |
cd android
./gradlew assembleRelease --no-daemon --stacktrace
# 9. 重命名APK文件(带版本号)
- name: Rename APK with version
run: |
mv ${{ env.APK_PATH }} ./app-release-${{ env.APP_VERSION }}.apk
# 10. 验证APK文件
- name: Verify APK
run: |
if [ ! -f "app-release-${{ env.APP_VERSION }}.apk" ]; then
echo "::error::APK file not found!"
ls -R android/app/build/outputs/apk/ # 打印目录结构用于调试
exit 1
fi
# 11. 创建Release并上传APK
- name: Create Release and Upload APK
if: github.ref == 'refs/heads/master'
uses: softprops/action-gh-release@v1
with:
tag_name: v${{ env.APP_VERSION }} # 使用package.json版本号作为Tag
name: Release v${{ env.APP_VERSION }}
body: |
Automated release from GitHub Actions
Version: ${{ env.APP_VERSION }}
files: |
app-release-${{ env.APP_VERSION }}.apk
draft: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}