#!/bin/sh # 86 · 관리자 지시 4: Android (arm64) 용 7-Zip (7zz - 7z · RAR 풀기) 을 공식 소스에서 빌드해 # third_party/7zip/android/arm64-v8a/lib7zz.so 로 둔다 (rsync 와 같은 방식 - APK 의 jniLibs 로 들어가 앱의 네이티브 라이브러리 # 폴더에서 실행된다. Android 의 libc · libm · libdl 만 쓰고 libc++ 는 정적으로). # 소스: https://www.7-zip.org/a/7z2501-src.7z (7-Zip 25.01, SHA-256 고정, 고치지 않음) # 라이선스: GNU LGPL 2.1+ · BSD 3/2-clause · unRAR 라이선스 제한 (RAR 은 풀기만 - 앱은 RAR 을 만들지 않는다) # 빌드: CPP/7zip/Bundles/Alone2 (7zz) 를 NDK clang 으로 (cmpl_clang_arm64.mak). 어셈블리는 끄고 (USE_ASM=), # Windows 에서 빌드할 때 makefile 이 SystemDrive 로 MinGW 빌드라고 여기지 않게 SystemDrive · SYSTEMDRIVE 를 비운다. # 새 NDK clang 의 새 경고로 실패하지 않게 경고 묶음 (-Weverything -Werror) 은 끈다 (코드는 그대로). # 사용법 (Git Bash): sh tool/build_7zz_android.sh - Android NDK 가 필요 (ANDROID_NDK 또는 tools/android-sdk/ndk/*) # .7z 소스를 풀 7-Zip 이 필요 (Windows: third_party/7zip/windows/7z.exe - tool/fetch_7zip.ps1, 아니면 PATH 의 7z · 7zz) set -e APP=$(cd "$(dirname "$0")/.." && pwd) VER=2501 SHA=2aed39b8f1238464475e9de7dda169a5e873a1dc8bbf4f664b943eaba5620181 NDK_ROOT=${ANDROID_NDK:-$(ls -d "$APP"/../tools/android-sdk/ndk/* | sort | tail -1)} case "$(uname -s)" in MINGW*|MSYS*|CYGWIN*) HOST=windows-x86_64; EXE=.exe ;; Darwin) HOST=darwin-x86_64; EXE= ;; *) HOST=linux-x86_64; EXE= ;; esac TC=$NDK_ROOT/toolchains/llvm/prebuilt/$HOST/bin MAKE=$NDK_ROOT/prebuilt/$HOST/bin/make$EXE [ -x "$MAKE" ] || MAKE=make SZ="$APP/third_party/7zip/windows/7z.exe" [ -x "$SZ" ] || SZ=$(command -v 7zz || command -v 7z) WORK=${TMPDIR:-/tmp}/jj_7zz_android rm -rf "$WORK" && mkdir -p "$WORK" && cd "$WORK" curl -sSLf -o src.7z "https://www.7-zip.org/a/7z$VER-src.7z" echo "$SHA src.7z" | sha256sum -c - "$SZ" x -y -osrc src.7z > /dev/null cd src/CPP/7zip/Bundles/Alone2 mkdir -p b/c_arm64 "$MAKE" -j8 -f ../../cmpl_clang_arm64.mak SHELL=/bin/sh SystemDrive= SYSTEMDRIVE= MSYSTEM= \ CC="$TC/clang$EXE --target=aarch64-linux-android24" CXX="$TC/clang++$EXE --target=aarch64-linux-android24" \ USE_ASM= LIB2=-ldl LDFLAGS_STATIC_3=-static-libstdc++ CFLAGS_WARN= CFLAGS_WARN_WALL= > make.log 2>&1 || { tail -30 make.log; exit 1; } OUT="$APP/third_party/7zip/android/arm64-v8a" mkdir -p "$OUT" "$TC/llvm-strip$EXE" -o "$OUT/lib7zz.so" b/c_arm64/7zz cp ../../../../DOC/License.txt "$OUT/../License.txt" ls -l "$OUT/lib7zz.so"