-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
168 lines (121 loc) · 4.02 KB
/
Dockerfile
File metadata and controls
168 lines (121 loc) · 4.02 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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# syntax=docker/dockerfile:1.7-labs
FROM archlinux:latest AS base_env
RUN --mount=type=cache,target=/var/cache/pacman/pkg <<EOF
set -euo pipefail
echo "Installing repo packages..."
pacman-key --init
pacman -Sy --noconfirm --noprogressbar \
sudo fakeroot binutils unzip wget jq p7zip jdk-openjdk
echo "Configuring..."
# allow all users to all commands without password
cat <<CFG >/etc/sudoers
ALL ALL=(ALL:ALL) NOPASSWD: ALL
CFG
# no debug symbols, no compression
sed -iE '
/^OPTIONS=/ s/!*debug/!debug/g
/^(PKG|SRC)EXT=/ s/\.(zst|gz)//g
' /etc/makepkg.conf
useradd -ms /bin/bash devuser
EOF
#######################################
FROM base_env AS android_env
USER devuser
WORKDIR /home/devuser
RUN <<EOF
set -euo pipefail
wget() { command wget --no-verbose --show-progress --progress=dot:giga "$@"; }
export -f wget
echo "Installing AUR packages..."
# use specific known good commits, never the latest version
declare -A pkgs=(
[android-sdk]='https://aur.archlinux.org/cgit/aur.git/snapshot/aur-81fe6b333003848e1a9d9c1d382fbe8fc8ffc625.tar.gz'
[android-platform]='https://aur.archlinux.org/cgit/aur.git/snapshot/aur-3bf7523a73d536561329749cde01162a36905ea3.tar.gz'
[android-sdk-platform-tools]='https://aur.archlinux.org/cgit/aur.git/snapshot/aur-486dff3428bca912bda70e51ad5d2ab7095fa6b1.tar.gz'
[android-sdk-build-tools]='https://aur.archlinux.org/cgit/aur.git/snapshot/aur-ce7b51fed9ef7e0db9ee681883204adde1ef3808.tar.gz'
[payload-dumper-go]='https://aur.archlinux.org/cgit/aur.git/snapshot/aur-140208028f9427ce244a6d7a0d56236b9cfc7b24.tar.gz'
[dex2jar]='https://aur.archlinux.org/cgit/aur.git/snapshot/aur-505e75dcc7c117127ed5f7ac2ab66835afad0e35.tar.gz'
)
for name in "${!pkgs[@]}"; do
echo "> $name"
declare -n url="pkgs[${name@Q}]"
wget -O "$name.tgz" "$url"
tar -xzf "$name.tgz"
mv aur* "$name"
cd "$name"
makepkg -si --noconfirm --noprogressbar >/dev/null
rm -rf "$name.tgz" "$name"
cd -
done
EOF
#######################################
FROM android_env AS android_proj
USER root
WORKDIR /project
COPY --parents .*.sh bin foreign dex-lister ./
RUN <<EOF
set -euo pipefail
wget() { command wget --no-verbose --show-progress --progress=dot:giga "$@"; }
export -f wget
to='dex-lister/lib/'
mkdir -p "$to"
echo "Getting LineageOS system libraries..."
bash bin/get-lineageos-libs.sh
# cp -vrlaPf 'foreign/lib/'*.jar "$to"
# only expose required libraries
for n in framework.jar; do
cp -vrlaPf "foreign/lib/$n" "$to"
done
echo "Getting project libraries..."
wget -P "$to" https://repo.mavenlibs.com/maven/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar
EOF
#######################################
FROM android_proj AS build_lister
WORKDIR /project
ENV TERM=linux
RUN <<EOF
set -euo pipefail
wget() { command wget --no-verbose --show-progress --progress=dot:giga "$@"; }
export -f wget
echo "Building dex-lister"
bash dex-lister/build.sh
EOF
#######################################
FROM python:3.10.12-slim-buster AS py_env
WORKDIR /project
COPY requirements.txt .
ENV PIP_ROOT_USER_ACTION=ignore
ENV PIP_CACHE_DIR=/var/cache/pip
RUN --mount=type=cache,target=/var/cache/apt \
--mount=type=cache,target=/var/cache/pip \
<<EOF
set -eu
apt update
apt -y install binutils git
pip install --cache-dir "$PIP_CACHE_DIR" -r requirements.txt
pip install --cache-dir "$PIP_CACHE_DIR" pyinstaller
# do not embed these libraries
apt -y remove openssl
EOF
#######################################
FROM py_env AS build_proj
WORKDIR /project
COPY . .
COPY --link --parents --from=build_lister \
/project/dex-lister/build/lister.jar /
RUN bash build.sh --clean
#######################################
FROM debian:buster-slim AS release
COPY --link --from=build_proj \
/project/dist /dist
RUN --mount=type=cache,target=/var/cache/apt <<EOF
set -eu
apt update
apt -y install openssl ca-certificates libusb-1.0.0
EOF
RUN <<EOF
set -eu
/dist/adb-updater/adb-updater || : # generate adbkey
stat /root/.android/adbkey
EOF
CMD ["/dist/adb-updater/adb-updater"]