Build SFA SagerNet #7
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |