diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 66dabd71..f4173ad5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,47 +21,41 @@ jobs: submodules: 'recursive' fetch-depth: '0' + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + with: + log-accepted-android-sdk-licenses: false + cmdline-tools-version: '12266719' + packages: 'platforms;android-35 build-tools;35.0.0 platform-tools' + + - name: Install NDK + run: | + echo "y" | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager \ + --channel=3 \ + --install "ndk;29.0.13113456" + echo "NDK_HOME=$ANDROID_HOME/ndk/29.0.13113456" >> $GITHUB_ENV + sed -i '10i\ + \ + ndkVersion = "29.0.13113456"' ${{ github.workspace }}/V2rayNG/app/build.gradle.kts + - name: Restore cached libtun2socks id: cache-libtun2socks-restore uses: actions/cache/restore@v4 with: path: ${{ github.workspace }}/libs - key: libtun2socks-${{ runner.os }}-${{ hashFiles('.git/modules/badvpn/HEAD') }}-${{ hashFiles('.git/modules/libancillary/HEAD') }} - - - name: Setup Android NDK - uses: nttld/setup-ndk@v1 - id: setup-ndk - # Same version as https://gitlab.com/fdroid/fdroiddata/metadata/com.v2ray.ang.yml - with: - ndk-version: r27 - add-to-path: true - link-to-sdk: true - local-cache: true - - - name: Restore Android Symlinks - run: | - directory="${{ steps.setup-ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin" - find "$directory" -type l | while read link; do - current_target=$(readlink "$link") - new_target="$directory/$(basename "$current_target")" - ln -sf "$new_target" "$link" - echo "Changed $(basename "$link") from $current_target to $new_target" - done + key: libtun2socks-${{ runner.os }}-${{ env.NDK_HOME }}-${{ hashFiles('.git/modules/badvpn/HEAD') }}-${{ hashFiles('.git/modules/libancillary/HEAD') }} - name: Build libtun2socks if: steps.cache-libtun2socks-restore.outputs.cache-hit != 'true' run: | bash compile-tun2socks.sh - tar -xvzf libtun2socks.so.tgz - env: - NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - name: Save libtun2socks if: steps.cache-libtun2socks-restore.outputs.cache-hit != 'true' uses: actions/cache/save@v4 with: path: ${{ github.workspace }}/libs - key: libtun2socks-${{ runner.os }}-${{ hashFiles('.git/modules/badvpn/HEAD') }}-${{ hashFiles('.git/modules/libancillary/HEAD') }} + key: libtun2socks-${{ runner.os }}-${{ env.NDK_HOME }}-${{ hashFiles('.git/modules/badvpn/HEAD') }}-${{ hashFiles('.git/modules/libancillary/HEAD') }} - name: Copy libtun2socks run: | @@ -88,27 +82,26 @@ jobs: uses: actions/cache/restore@v4 with: path: ${{ github.workspace }}/hysteria/libs - key: libhysteria2-${{ runner.os }}-${{ hashFiles('.git/modules/hysteria/HEAD') }}-${{ hashFiles('libhysteria2.sh') }} + key: libhysteria2-${{ runner.os }}-${{ env.NDK_HOME }}-${{ hashFiles('.git/modules/hysteria/HEAD') }}-${{ hashFiles('libhysteria2.sh') }} - name: Setup Golang if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true' uses: actions/setup-go@v5 with: go-version-file: 'AndroidLibXrayLite/go.mod' + cache: false - name: Build libhysteria2 if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true' run: | bash libhysteria2.sh - env: - ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - name: Save libhysteria2 if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true' uses: actions/cache/save@v4 with: path: ${{ github.workspace }}/hysteria/libs - key: libhysteria2-${{ runner.os }}-${{ hashFiles('.git/modules/hysteria/HEAD') }}-${{ hashFiles('libhysteria2.sh') }} + key: libhysteria2-${{ runner.os }}-${{ env.NDK_HOME }}-${{ hashFiles('.git/modules/hysteria/HEAD') }}-${{ hashFiles('libhysteria2.sh') }} - name: Copy libhysteria2 run: | @@ -120,9 +113,6 @@ jobs: distribution: 'temurin' java-version: '21' - - name: Setup Android environment - uses: android-actions/setup-android@v3 - - name: Decode Keystore uses: timheuer/base64-to-file@v1 id: android_keystore @@ -133,12 +123,11 @@ jobs: - name: Build APK run: | cd ${{ github.workspace }}/V2rayNG + echo "sdk.dir=${ANDROID_HOME}" > local.properties chmod 755 gradlew ./gradlew licenseFdroidReleaseReport ./gradlew assembleRelease -Pandroid.injected.signing.store.file=${{ steps.android_keystore.outputs.filePath }} -Pandroid.injected.signing.store.password=${{ secrets.APP_KEYSTORE_PASSWORD }} -Pandroid.injected.signing.key.alias=${{ secrets.APP_KEYSTORE_ALIAS }} -Pandroid.injected.signing.key.password=${{ secrets.APP_KEY_PASSWORD }} - env: - ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} - + - name: Upload arm64-v8a APK uses: actions/upload-artifact@v4 if: ${{ success() }} diff --git a/compile-tun2socks.sh b/compile-tun2socks.sh index 11bea0d2..c0db6218 100644 --- a/compile-tun2socks.sh +++ b/compile-tun2socks.sh @@ -23,11 +23,10 @@ $NDK_HOME/ndk-build \ NDK_PROJECT_PATH=. \ APP_BUILD_SCRIPT=./tun2socks.mk \ APP_ABI=all \ - APP_PLATFORM=android-19 \ + APP_PLATFORM=android-21 \ NDK_LIBS_OUT=$TMPDIR/libs \ NDK_OUT=$TMPDIR/tmp \ - APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -j4 \ - LOCAL_LDFLAGS=-Wl,--build-id=none -tar cvfz $__dir/libtun2socks.so.tgz libs + APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -j4 +cp -r $TMPDIR/libs $__dir/ popd rm -rf $TMPDIR diff --git a/libhysteria2.sh b/libhysteria2.sh index b2a72117..1bd88967 100644 --- a/libhysteria2.sh +++ b/libhysteria2.sh @@ -14,7 +14,7 @@ for target in "${targets[@]}"; do echo "Building for ${abi} with ${ndk_target} (${goarch})" - CC="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${ndk_target}-clang" CGO_ENABLED=1 CGO_LDFLAGS="-Wl,-z,max-page-size=16384" GOOS=android GOARCH=$goarch go build -o libs/$abi/libhysteria2.so -trimpath -ldflags "-s -w -buildid=" -buildvcs=false ./app + CC="${NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/${ndk_target}-clang" CGO_ENABLED=1 GOOS=android GOARCH=$goarch go build -o libs/$abi/libhysteria2.so -trimpath -ldflags "-s -w -buildid=" -buildvcs=false ./app echo "Built libhysteria2.so for ${abi}" done diff --git a/tun2socks.mk b/tun2socks.mk index 04ac8df3..1fab134e 100644 --- a/tun2socks.mk +++ b/tun2socks.mk @@ -37,7 +37,6 @@ LOCAL_CFLAGS += -DNDEBUG -DANDROID LOCAL_CFLAGS += -I LOCAL_STATIC_LIBRARIES := libancillary LOCAL_C_INCLUDES := \ - $(LOCAL_PATH)/badvpn/libancillary \ $(LOCAL_PATH)/badvpn/lwip/src/include/ipv4 \ $(LOCAL_PATH)/badvpn/lwip/src/include/ipv6 \ $(LOCAL_PATH)/badvpn/lwip/src/include \ @@ -110,6 +109,7 @@ TUN2SOCKS_SOURCES := \ socks_udp_client/SocksUdpClient.c LOCAL_MODULE := tun2socks LOCAL_LDLIBS := -ldl -llog +LOCAL_LDFLAGS=-Wl,--build-id=none LOCAL_SRC_FILES := $(addprefix badvpn/, $(TUN2SOCKS_SOURCES)) LOCAL_BUILD_SCRIPT := BUILD_EXECUTABLE LOCAL_MAKEFILE := $(local-makefile)