@@ -5,6 +5,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
55REPO_ROOT=" $( cd " $SCRIPT_DIR /../.." && pwd) "
66APK_DIR=" ${APK_DIR:- $REPO_ROOT / build/ app/ outputs/ flutter-apk} "
77APP_NAME=" ${APP_NAME:- ServerBox} "
8+ APK_PATTERNS=" ${APK_PATTERNS:- } "
89KEY_PROPERTIES=" ${KEY_PROPERTIES:- $REPO_ROOT / android/ key.properties} "
910RESIGN_APKS=" ${RESIGN_APKS:- true} "
1011
@@ -142,28 +143,6 @@ find_llvm_objcopy() {
142143 command -v llvm-objcopy || command -v objcopy
143144}
144145
145- find_readelf () {
146- local sdk_root
147- local matches=()
148- local path
149-
150- while IFS= read -r sdk_root; do
151- if [[ -z " $sdk_root " || ! -d " $sdk_root /ndk" ]]; then
152- continue
153- fi
154- while IFS= read -r path; do
155- matches+=(" $path " )
156- done < <( find " $sdk_root /ndk" -type f -path ' */toolchains/llvm/prebuilt/*/bin/llvm-readelf' )
157- done < <( android_sdk_roots)
158-
159- if [[ ${# matches[@]} -ne 0 ]]; then
160- printf ' %s\n' " ${matches[@]} " | select_latest_android_path
161- return
162- fi
163-
164- command -v readelf || command -v llvm-readelf
165- }
166-
167146property_value () {
168147 local name=" $1 "
169148 grep -E " ^[[:space:]]*${name} [[:space:]]*=" " $KEY_PROPERTIES " |
@@ -173,7 +152,16 @@ property_value() {
173152
174153has_build_id () {
175154 local so_file=" $1 "
176- " $READELF " -n " $so_file " 2> /dev/null | grep -q ' Build ID'
155+ local note_file
156+ note_file=" $( mktemp " $tmp_dir /build-id-note.XXXXXX" ) "
157+
158+ if " $OBJCOPY " --dump-section " .note.gnu.build-id=$note_file " " $so_file " > /dev/null 2>&1 ; then
159+ rm -f " $note_file "
160+ return 0
161+ fi
162+
163+ rm -f " $note_file "
164+ return 1
177165}
178166
179167require_cmd find
@@ -184,7 +172,6 @@ require_cmd unzip
184172require_cmd zip
185173
186174OBJCOPY=" ${OBJCOPY:- } "
187- READELF=" ${READELF:- } "
188175APKSIGNER=" ${APKSIGNER:- } "
189176ZIPALIGN=" ${ZIPALIGN:- } "
190177
204191if [[ -z " $OBJCOPY " ]]; then
205192 OBJCOPY=" $( find_llvm_objcopy || true) "
206193fi
207- if [[ -z " $READELF " ]]; then
208- READELF=" $( find_readelf || true) "
209- fi
210194if [[ " $RESIGN_APKS " == true && -z " $APKSIGNER " ]]; then
211195 APKSIGNER=" $( find_latest_android_tool apksigner || true) "
212196fi
@@ -219,11 +203,6 @@ if [[ -z "$OBJCOPY" || ! -x "$OBJCOPY" ]]; then
219203 exit 1
220204fi
221205
222- if [[ -z " $READELF " || ! -x " $READELF " ]]; then
223- echo ' readelf or llvm-readelf is required to inspect ELF build-id notes' >&2
224- exit 1
225- fi
226-
227206if [[ " $RESIGN_APKS " == true && ( -z " $APKSIGNER " || ! -x " $APKSIGNER " ) ]]; then
228207 echo ' Android build-tools apksigner is required to re-sign patched APKs' >&2
229208 exit 1
@@ -271,11 +250,17 @@ tmp_dir="$(mktemp -d)"
271250trap ' rm -rf "$tmp_dir"' EXIT
272251
273252apks=()
274- patterns=(
275- " ${APP_NAME} _*_arm64.apk"
276- " ${APP_NAME} _*_arm.apk"
277- " ${APP_NAME} _*_amd64.apk"
278- )
253+ patterns=()
254+
255+ if [[ -n " $APK_PATTERNS " ]]; then
256+ read -ra patterns <<< " $APK_PATTERNS"
257+ else
258+ patterns=(
259+ " ${APP_NAME} _*_arm64.apk"
260+ " ${APP_NAME} _*_arm.apk"
261+ " ${APP_NAME} _*_amd64.apk"
262+ )
263+ fi
279264
280265for pattern in " ${patterns[@]} " ; do
281266 matches=(" $APK_DIR " /$pattern )
0 commit comments