Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
337889c5f1 | ||
|
|
244d2d3866 | ||
|
|
c0fed0ba4f | ||
|
|
affb107b9d | ||
|
|
f96073af99 |
72
.github/workflows/build.yml
vendored
72
.github/workflows/build.yml
vendored
@@ -43,6 +43,20 @@ jobs:
|
|||||||
# Same version as https://gitlab.com/fdroid/fdroiddata/metadata/com.v2ray.ang.yml
|
# Same version as https://gitlab.com/fdroid/fdroiddata/metadata/com.v2ray.ang.yml
|
||||||
with:
|
with:
|
||||||
ndk-version: r27
|
ndk-version: r27
|
||||||
|
add-to-path: true
|
||||||
|
link-to-sdk: true
|
||||||
|
local-cache: true
|
||||||
|
|
||||||
|
- name: Restore Android Symlinks
|
||||||
|
if: steps.cache-libtun2socks-restore.outputs.cache-hit != 'true'
|
||||||
|
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
|
||||||
|
|
||||||
- name: Build libtun2socks
|
- name: Build libtun2socks
|
||||||
if: steps.cache-libtun2socks-restore.outputs.cache-hit != 'true'
|
if: steps.cache-libtun2socks-restore.outputs.cache-hit != 'true'
|
||||||
@@ -65,56 +79,13 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
cp -r ${{ github.workspace }}/build/AndroidLibV2rayLite/libs/* ${{ github.workspace }}/V2rayNG/app/libs/
|
cp -r ${{ github.workspace }}/build/AndroidLibV2rayLite/libs/* ${{ github.workspace }}/V2rayNG/app/libs/
|
||||||
|
|
||||||
- name: Fetch AndroidLibXrayLite
|
- name: Download libv2ray
|
||||||
run: |
|
uses: robinraju/release-downloader@v1
|
||||||
cd ${{ github.workspace }}/build
|
|
||||||
git clone --depth=1 -b main https://github.com/2dust/AndroidLibXrayLite.git
|
|
||||||
|
|
||||||
- name: Restore cached libv2ray
|
|
||||||
id: cache-libv2ray-restore
|
|
||||||
uses: actions/cache/restore@v4
|
|
||||||
with:
|
with:
|
||||||
path: ${{ github.workspace }}/build/AndroidLibXrayLite/
|
repository: '2dust/AndroidLibXrayLite'
|
||||||
key: libv2ray-${{ runner.os }}-${{ hashFiles('build/AndroidLibXrayLite/.git/refs/heads/main') }}
|
latest: true
|
||||||
|
fileName: 'libv2ray.aar'
|
||||||
- name: Setup Golang
|
out-file-path: V2rayNG/app/libs/
|
||||||
if: steps.cache-libv2ray-restore.outputs.cache-hit != 'true'
|
|
||||||
uses: actions/setup-go@v5
|
|
||||||
with:
|
|
||||||
go-version: '1.23.4'
|
|
||||||
cache: false
|
|
||||||
|
|
||||||
- name: Patch Go use 600296
|
|
||||||
if: steps.cache-libv2ray-restore.outputs.cache-hit != 'true'
|
|
||||||
#https://go-review.googlesource.com/c/go/+/600296
|
|
||||||
run: |
|
|
||||||
cd "$(go env GOROOT)"
|
|
||||||
curl "https://go-review.googlesource.com/changes/go~600296/revisions/5/patch" | base64 -d | patch --verbose -p 1
|
|
||||||
|
|
||||||
- name: Install gomobile
|
|
||||||
if: steps.cache-libv2ray-restore.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
go install golang.org/x/mobile/cmd/gomobile@v0.0.0-20240806205939-81131f6468ab
|
|
||||||
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
|
|
||||||
|
|
||||||
- name: Build libv2ray
|
|
||||||
if: steps.cache-libv2ray-restore.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
cd ${{ github.workspace }}/build/AndroidLibXrayLite
|
|
||||||
gomobile init
|
|
||||||
go mod tidy -v
|
|
||||||
gomobile bind -v -androidapi 21 -ldflags='-s -w' ./
|
|
||||||
|
|
||||||
- name: Save libv2ray
|
|
||||||
if: steps.cache-libv2ray-restore.outputs.cache-hit != 'true'
|
|
||||||
uses: actions/cache/save@v4
|
|
||||||
with:
|
|
||||||
path: ${{ github.workspace }}/build/AndroidLibXrayLite/
|
|
||||||
key: libv2ray-${{ runner.os }}-${{ hashFiles('build/AndroidLibXrayLite/.git/refs/heads/main') }}
|
|
||||||
|
|
||||||
- name: Copy libv2ray
|
|
||||||
run: |
|
|
||||||
cp -r ${{ github.workspace }}/build/AndroidLibXrayLite/*.aar ${{ github.workspace }}/V2rayNG/app/libs/
|
|
||||||
|
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
@@ -160,10 +131,11 @@ jobs:
|
|||||||
name: x86-apk
|
name: x86-apk
|
||||||
path: ${{ github.workspace }}/V2rayNG/app/build/outputs/apk/*/release/*x86*.apk
|
path: ${{ github.workspace }}/V2rayNG/app/build/outputs/apk/*/release/*x86*.apk
|
||||||
|
|
||||||
- name: Upload AndroidLibXrayLite to release
|
- name: Upload to release
|
||||||
uses: svenstaro/upload-release-action@v2
|
uses: svenstaro/upload-release-action@v2
|
||||||
if: github.event.inputs.release_tag != ''
|
if: github.event.inputs.release_tag != ''
|
||||||
with:
|
with:
|
||||||
file: ${{ github.workspace }}/V2rayNG/app/build/outputs/apk/*playstore*/release/*.apk
|
file: ${{ github.workspace }}/V2rayNG/app/build/outputs/apk/*playstore*/release/*.apk
|
||||||
tag: ${{ github.event.inputs.release_tag }}
|
tag: ${{ github.event.inputs.release_tag }}
|
||||||
file_glob: true
|
file_glob: true
|
||||||
|
prerelease: true
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ android {
|
|||||||
applicationId = "com.v2ray.ang"
|
applicationId = "com.v2ray.ang"
|
||||||
minSdk = 21
|
minSdk = 21
|
||||||
targetSdk = 35
|
targetSdk = 35
|
||||||
versionCode = 623
|
versionCode = 624
|
||||||
versionName = "1.9.27"
|
versionName = "1.9.28"
|
||||||
multiDexEnabled = true
|
multiDexEnabled = true
|
||||||
|
|
||||||
val abiFilterList = (properties["ABI_FILTERS"] as? String)?.split(';')
|
val abiFilterList = (properties["ABI_FILTERS"] as? String)?.split(';')
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ import com.v2ray.ang.AppConfig.ANG_PACKAGE
|
|||||||
import com.v2ray.ang.AppConfig.GEOIP_PRIVATE
|
import com.v2ray.ang.AppConfig.GEOIP_PRIVATE
|
||||||
import com.v2ray.ang.AppConfig.GEOSITE_PRIVATE
|
import com.v2ray.ang.AppConfig.GEOSITE_PRIVATE
|
||||||
import com.v2ray.ang.AppConfig.TAG_DIRECT
|
import com.v2ray.ang.AppConfig.TAG_DIRECT
|
||||||
|
import com.v2ray.ang.dto.EConfigType
|
||||||
import com.v2ray.ang.dto.ProfileItem
|
import com.v2ray.ang.dto.ProfileItem
|
||||||
import com.v2ray.ang.dto.RoutingType
|
import com.v2ray.ang.dto.RoutingType
|
||||||
import com.v2ray.ang.dto.RulesetItem
|
import com.v2ray.ang.dto.RulesetItem
|
||||||
|
import com.v2ray.ang.dto.V2rayConfig
|
||||||
import com.v2ray.ang.handler.MmkvManager.decodeServerConfig
|
import com.v2ray.ang.handler.MmkvManager.decodeServerConfig
|
||||||
import com.v2ray.ang.handler.MmkvManager.decodeServerList
|
import com.v2ray.ang.handler.MmkvManager.decodeServerList
|
||||||
import com.v2ray.ang.util.JsonUtil
|
import com.v2ray.ang.util.JsonUtil
|
||||||
@@ -91,8 +93,10 @@ object SettingsManager {
|
|||||||
fun saveRoutingRuleset(index: Int, ruleset: RulesetItem?) {
|
fun saveRoutingRuleset(index: Int, ruleset: RulesetItem?) {
|
||||||
if (ruleset == null) return
|
if (ruleset == null) return
|
||||||
|
|
||||||
val rulesetList = MmkvManager.decodeRoutingRulesets()
|
var rulesetList = MmkvManager.decodeRoutingRulesets()
|
||||||
if (rulesetList.isNullOrEmpty()) return
|
if (rulesetList.isNullOrEmpty()) {
|
||||||
|
rulesetList = mutableListOf()
|
||||||
|
}
|
||||||
|
|
||||||
if (index < 0 || index >= rulesetList.count()) {
|
if (index < 0 || index >= rulesetList.count()) {
|
||||||
rulesetList.add(0, ruleset)
|
rulesetList.add(0, ruleset)
|
||||||
@@ -113,6 +117,17 @@ object SettingsManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun routingRulesetsBypassLan(): Boolean {
|
fun routingRulesetsBypassLan(): Boolean {
|
||||||
|
val guid = MmkvManager.getSelectServer() ?: return false
|
||||||
|
val config = MmkvManager.decodeServerConfig(guid) ?: return false
|
||||||
|
if (config.configType == EConfigType.CUSTOM) {
|
||||||
|
val raw = MmkvManager.decodeServerRaw(guid) ?: return false
|
||||||
|
val v2rayConfig = JsonUtil.fromJson(raw, V2rayConfig::class.java)
|
||||||
|
val exist = v2rayConfig.routing.rules.filter { it.outboundTag == TAG_DIRECT }?.any {
|
||||||
|
it.domain?.contains(GEOSITE_PRIVATE) == true || it.ip?.contains(GEOIP_PRIVATE) == true
|
||||||
|
}
|
||||||
|
return exist == true
|
||||||
|
}
|
||||||
|
|
||||||
val rulesetItems = MmkvManager.decodeRoutingRulesets()
|
val rulesetItems = MmkvManager.decodeRoutingRulesets()
|
||||||
val exist = rulesetItems?.filter { it.enabled && it.outboundTag == TAG_DIRECT }?.any {
|
val exist = rulesetItems?.filter { it.enabled && it.outboundTag == TAG_DIRECT }?.any {
|
||||||
it.domain?.contains(GEOSITE_PRIVATE) == true || it.ip?.contains(GEOIP_PRIVATE) == true
|
it.domain?.contains(GEOSITE_PRIVATE) == true || it.ip?.contains(GEOIP_PRIVATE) == true
|
||||||
|
|||||||
Reference in New Issue
Block a user