-
Notifications
You must be signed in to change notification settings - Fork 7
145 lines (129 loc) · 4.79 KB
/
install-apk.yaml
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
name: Install Extract APK
run-name: Install Extract - ${{inputs.run_name}}
on:
push:
branches:
- main
schedule:
- cron: '30 5,15 * * *'
workflow_dispatch:
inputs:
apk_zip_url:
description: 'url to download apks zipped'
required: true
type: string
default: https://url/apks.zip
run_name:
required: false
type: string
env:
avd_port: 9999
avd_name: localhost:9999
default_apk_zip_url: https://github.com/clearbluejar/apk-install/releases/download/v0.0.1/example.apk.zip
all_apk_dir: all_apks
jobs:
generate-matrix:
runs-on: ubuntu-latest
outputs:
apkpaths: ${{ steps.getpaths.outputs.apkpaths }}
steps:
- name: Checkout code
uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Download and unzip APKs
run: |
mkdir ${{env.all_apk_dir}}
# worfklow_dispatch
[ -n "${{inputs.apk_zip_url}}" ] && wget ${{inputs.apk_zip_url}} -O ${{env.all_apk_dir}}.zip
# default run
[ -z "${{inputs.apk_zip_url}}" ] && wget ${{env.default_apk_zip_url}} -O ${{env.all_apk_dir}}.zip
unzip ${{env.all_apk_dir}}.zip -d ${{env.all_apk_dir}}
find .
- name: Setup paths
id: getpaths
run: |
echo "apkpaths=$(python -c 'import pathlib; print([str(file) for file in pathlib.Path.glob(pathlib.Path("${{env.all_apk_dir}}"),"**/*.apk")])')" >> "$GITHUB_OUTPUT"
shell: bash
- name: Upload APKs
uses: actions/upload-artifact@v3
with:
name: ${{env.all_apk_dir}}
path: ${{env.all_apk_dir}}
retention-days: 15
download-install-and-extract:
needs: generate-matrix
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
apkpath: ${{fromJson(needs.generate-matrix.outputs.apkpaths)}}
arch: ['arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64']
steps:
- name: Checkout code
uses: actions/checkout@v3
- name : install adb
run: |
sudo apt install adb aapt
- name: Install reDroid dependencies
run: |
## install required kernel modules
sudo apt install linux-modules-extra-`uname -r`
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
#sudo modprobe ashmem_linux
- name: Run emulator
run: |
mkdir data
docker run -itd --rm --privileged --pull always -v $(pwd)/data:/data -p ${{env.avd_port}}:5555 redroid/redroid:12.0.0-latest
- name: Download runner artifacts
uses: actions/download-artifact@v3
with:
name: ${{env.all_apk_dir}}
path: ${{env.all_apk_dir}}
- name: adb connect install
run: |
adb connect ${{env.avd_name}}
adb devices -l
adb -s ${{env.avd_name}} install --abi ${{matrix.arch}} "${{matrix.apkpath}}"
- name: adb start main activity
run: |
# adb -s localhost:5555 shell am start -n com.whatsapp/com.whatsapp.Main
./adb-run.sh "${{matrix.apkpath}}"
- name: get package name ver
run : |
echo "apkpkgver=$(./get-pkgver.sh '${{matrix.apkpath}}')" >> "$GITHUB_ENV"
echo "apkpkg=$(./get-pkg.sh '${{matrix.apkpath}}')" >> "$GITHUB_ENV"
echo "$apkpkgver"
echo "$apkpkg"
- name: create output dir
run: |
mkdir ${{ env.apkpkgver }}
- name: aapt dump badging
run: |
aapt dump badging "${{matrix.apkpath}}" > ${{ env.apkpkgver }}/${{ env.apkpkgver }}.badging.txt
cat ${{ env.apkpkgver }}/${{ env.apkpkgver }}.badging.txt
- name: fix data permissions
if: always()
run: |
# stop docker containers
docker stop $(docker ps -a -q)
sudo chown -R runner:runner data
- name: compress archive data
run: |
mv data data-${{ env.apkpkgver }}-${{matrix.arch}}
tar cvzf ${{ env.apkpkgver }}/${{ env.apkpkgver }}.${{matrix.arch}}.data.tar.gz data-${{ env.apkpkgver }}-${{matrix.arch}}/data/${{ env.apkpkg }}
- name: Upload data
uses: actions/upload-artifact@v3
if: always()
with:
name: all_package_data
path: ${{ env.apkpkgver }}
retention-days: 25
- name: Upload all data
uses: actions/upload-artifact@v3
if: always()
with:
name: all_data
path: data-${{ env.apkpkgver }}-${{matrix.arch}}/data/
retention-days: 5