Skip to content

Build SFA SagerNet

Build SFA SagerNet #7

Workflow file for this run

name: Build SFA SagerNet
on:
workflow_dispatch: # 只保留手动触发选项
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout sing-box repository
uses: actions/[email protected]
with:
path: sing-box
repository: SagerNet/sing-box
fetch-depth: 0
- name: Get latest tag and checkout
id: get_latest_tag
run: |
cd sing-box
git fetch --tags
latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)
echo "latest_tag=$latest_tag" >> $GITHUB_OUTPUT
git checkout $latest_tag
- name: Get latest go version
id: go
run: |
echo version=$(curl -s https://raw.githubusercontent.com/actions/go-versions/update-versions-manifest-file/versions-manifest.json | grep -oE '"version": "[0-9]{1}.[0-9]{1,}(.[0-9]{1,})?"' | head -1 | cut -d':' -f2 | sed 's/ //g; s/"//g') >> $GITHUB_OUTPUT
- name: Setup go
uses: actions/[email protected]
with:
go-version: ${{steps.go.outputs.version}}
- name: Setup java
uses: actions/[email protected]
with:
distribution: 'oracle'
java-version: 21
- name: Setup ndk
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r26b
- name: Get latest build tools version
id: sdk
run: echo version=$(ls $ANDROID_HOME/build-tools | tail -n 1) >> $GITHUB_OUTPUT
- name: Set sing-box version
id: sing-box
run: echo "version=${{ steps.get_latest_tag.outputs.latest_tag }}" >> $GITHUB_OUTPUT
- name: Build libbox
env:
CC: ${{steps.setup-ndk.outputs.ndk-path}}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android34-clang
TAGS: with_quic,with_dhcp,with_wireguard,with_ech,with_utls,with_clash_api,with_gvisor
VERSION: ${{steps.sing-box.outputs.version}}
CGO_ENABLED: '0'
run: |
cd sing-box
go mod tidy
make lib_install
gomobile bind -v -a -trimpath -androidapi 21 -javapkg=io.nekohasekai -libname=box -tags ${TAGS} -ldflags "-X github.com/sagernet/sing-box/constant.Version=${VERSION} -s -w -buildid=" ./experimental/libbox
- name: Checkout app repository
uses: actions/[email protected]
with:
path: sfa
repository: SagerNet/sing-box-for-android
ref: dev
submodules: recursive
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install Build Tools
run: |
sdkmanager --install "build-tools;30.0.3"
echo "$ANDROID_HOME/build-tools/30.0.3" >> $GITHUB_PATH
- name: Setup build env && build app
env:
VERSION: ${{steps.sing-box.outputs.version}}
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
run: |
mkdir -p sfa/app/libs/
cp ./sing-box/libbox.aar sfa/app/libs/
cd sfa
echo "" >> gradle.properties
echo "org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 -XX:+UseParallelGC" >> gradle.properties
echo "org.gradle.caching=true" >> gradle.properties
echo "org.gradle.parallel=true" >> gradle.properties
echo "VERSION_NAME=${VERSION}" > local.properties
echo "VERSION_CODE=$(date +%Y%m%d%H)" >> local.properties
chmod +x ./gradlew
./gradlew assembleRelease \
-Pandroid.injected.signing.store.file=$PWD/app/release.keystore \
-Pandroid.injected.signing.store.password=$KEYSTORE_PASSWORD \
-Pandroid.injected.signing.key.alias=$KEY_ALIAS \
-Pandroid.injected.signing.key.password=$KEY_PASSWORD \
-Pandroid.injected.signing.v1-signing-enabled=true \
-Pandroid.injected.signing.v2-signing-enabled=true \
-Pandroid.injected.signing.v3-signing-enabled=true \
-Pandroid.injected.signing.v4-signing-enabled=true
- name: Verify APK signatures
run: |
for apk in sfa/app/build/outputs/apk/other/release/*.apk; do
apksigner verify --verbose "$apk"
done
for apk in sfa/app/build/outputs/apk/play/release/*.apk; do
apksigner verify --verbose "$apk"
done
- name: Upload arm64-v8a apk
uses: actions/[email protected]
env:
version: ${{steps.sing-box.outputs.version}}
with:
name: SFA-${{env.version}}-arm64-v8a
path: sfa/app/build/outputs/apk/**/*arm64-v8a*.apk
compression-level: 9
- name: Upload armeabi-v7a apk
uses: actions/[email protected]
env:
version: ${{steps.sing-box.outputs.version}}
with:
name: SFA-${{env.version}}-armeabi-v7a
path: sfa/app/build/outputs/apk/**/*armeabi-v7a*.apk
compression-level: 9
- name: Upload x86_64 apk
uses: actions/[email protected]
env:
version: ${{steps.sing-box.outputs.version}}
with:
name: SFA-${{env.version}}-x86_64
path: sfa/app/build/outputs/apk/**/*x86_64*.apk
compression-level: 9
- name: Upload x86 apk
uses: actions/[email protected]
env:
version: ${{steps.sing-box.outputs.version}}
with:
name: SFA-${{env.version}}-x86
path: sfa/app/build/outputs/apk/**/*x86*.apk
compression-level: 9
- name: Upload universal apk
uses: actions/[email protected]
env:
version: ${{steps.sing-box.outputs.version}}
with:
name: SFA-${{env.version}}-universal
path: sfa/app/build/outputs/apk/**/*universal*.apk
compression-level: 9