Skip to content

Commit 728a0e8

Browse files
committed
fix(fdroid): support fdroid apk patch checks
1 parent 62a86c0 commit 728a0e8

1 file changed

Lines changed: 22 additions & 37 deletions

File tree

scripts/release/verify-fdroid-native-libs.sh

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
55
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
66
APK_DIR="${APK_DIR:-$REPO_ROOT/build/app/outputs/flutter-apk}"
77
APP_NAME="${APP_NAME:-ServerBox}"
8+
APK_PATTERNS="${APK_PATTERNS:-}"
89
KEY_PROPERTIES="${KEY_PROPERTIES:-$REPO_ROOT/android/key.properties}"
910
RESIGN_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-
167146
property_value() {
168147
local name="$1"
169148
grep -E "^[[:space:]]*${name}[[:space:]]*=" "$KEY_PROPERTIES" |
@@ -173,7 +152,16 @@ property_value() {
173152

174153
has_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

179167
require_cmd find
@@ -184,7 +172,6 @@ require_cmd unzip
184172
require_cmd zip
185173

186174
OBJCOPY="${OBJCOPY:-}"
187-
READELF="${READELF:-}"
188175
APKSIGNER="${APKSIGNER:-}"
189176
ZIPALIGN="${ZIPALIGN:-}"
190177

@@ -204,9 +191,6 @@ esac
204191
if [[ -z "$OBJCOPY" ]]; then
205192
OBJCOPY="$(find_llvm_objcopy || true)"
206193
fi
207-
if [[ -z "$READELF" ]]; then
208-
READELF="$(find_readelf || true)"
209-
fi
210194
if [[ "$RESIGN_APKS" == true && -z "$APKSIGNER" ]]; then
211195
APKSIGNER="$(find_latest_android_tool apksigner || true)"
212196
fi
@@ -219,11 +203,6 @@ if [[ -z "$OBJCOPY" || ! -x "$OBJCOPY" ]]; then
219203
exit 1
220204
fi
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-
227206
if [[ "$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)"
271250
trap 'rm -rf "$tmp_dir"' EXIT
272251

273252
apks=()
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

280265
for pattern in "${patterns[@]}"; do
281266
matches=("$APK_DIR"/$pattern)

0 commit comments

Comments
 (0)