Compare commits

..

No commits in common. "main" and "1.4.0" have entirely different histories.
main ... 1.4.0

17 changed files with 73 additions and 129 deletions

View File

@ -22,9 +22,7 @@
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="PackageVisibilityPolicy" />
<uses-permission android:name="com.android.permission.GET_INSTALLED_APPS" />
tools:ignore="QueryAllPackagesPermission" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

View File

@ -112,7 +112,7 @@ public abstract class StandardV2RayBean extends AbstractBean {
@Override
public void serialize(ByteBufferOutput output) {
output.writeInt(4);
output.writeInt(3);
super.serialize(output);
output.writeString(uuid);
output.writeString(encryption);
@ -133,15 +133,18 @@ public abstract class StandardV2RayBean extends AbstractBean {
output.writeString(earlyDataHeaderName);
break;
}
case "http":
case "httpupgrade": {
case "http": {
output.writeString(host);
output.writeString(path);
break;
}
case "grpc": {
output.writeString(path);
break;
}
case "httpupgrade": {
output.writeString(host);
output.writeString(path);
}
}
@ -190,20 +193,17 @@ public abstract class StandardV2RayBean extends AbstractBean {
earlyDataHeaderName = input.readString();
break;
}
case "http":
case "httpupgrade": {
case "http": {
host = input.readString();
path = input.readString();
break;
}
case "grpc": {
path = input.readString();
if (version < 4) {
// 解决老版本数据的读取问题
input.readString();
input.readString();
}
break;
}
case "httpupgrade": {
host = input.readString();
path = input.readString();
}
}

View File

@ -2,6 +2,7 @@ package io.nekohasekai.sagernet.ui
import android.content.Intent
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.graphics.drawable.Drawable
import android.os.Bundle
@ -44,11 +45,6 @@ import kotlin.coroutines.coroutineContext
class AppListActivity : ThemedActivity() {
companion object {
private const val SWITCH = "switch"
private val cachedApps
get() = PackageCache.installedPackages.toMutableMap().apply {
remove(BuildConfig.APPLICATION_ID)
}
}
private class ProxiedApp(
@ -100,8 +96,7 @@ class AppListActivity : ThemedActivity() {
var filteredApps = apps
suspend fun reload() {
PackageCache.reload()
apps = cachedApps.mapNotNull { (packageName, packageInfo) ->
apps = getCachedApps().mapNotNull { (packageName, packageInfo) ->
coroutineContext[Job]!!.ensureActive()
packageInfo.applicationInfo?.let { ProxiedApp(packageManager, it, packageName) }
}.sortedWith(compareBy({ !isProxiedApp(it) }, { it.name.toString() }))
@ -161,7 +156,7 @@ class AppListActivity : ThemedActivity() {
private fun initProxiedUids(str: String = DataStore.routePackages) {
proxiedUids.clear()
val apps = cachedApps
val apps = getCachedApps()
for (line in str.lineSequence()) {
val app = (apps[line] ?: continue)
val uid = app.applicationInfo?.uid ?: continue
@ -179,12 +174,14 @@ class AppListActivity : ThemedActivity() {
val adapter = binding.list.adapter as AppsAdapter
withContext(Dispatchers.IO) { adapter.reload() }
adapter.filter.filter(binding.search.text?.toString() ?: "")
if (apps.isEmpty()) {
binding.list.visibility = View.GONE
binding.appPlaceholder.root.crossFadeFrom(loading)
} else {
binding.list.crossFadeFrom(loading)
}
binding.list.crossFadeFrom(loading)
}
}
fun getCachedApps(): MutableMap<String, PackageInfo> {
val packages = PackageCache.installedPackages
return packages.toMutableMap().apply {
remove(BuildConfig.APPLICATION_ID)
}
}
@ -194,14 +191,6 @@ class AppListActivity : ThemedActivity() {
binding = LayoutAppListBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.appPlaceholder.openSettings.setOnClickListener {
val intent =
Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = android.net.Uri.fromParts("package", packageName, null)
}
startActivity(intent)
}
setSupportActionBar(binding.toolbar)
supportActionBar?.apply {
setTitle(R.string.select_apps)

View File

@ -106,7 +106,6 @@ class AppManagerActivity : ThemedActivity() {
var filteredApps = apps
suspend fun reload() {
PackageCache.reload()
apps = cachedApps.mapNotNull { (packageName, packageInfo) ->
coroutineContext[Job]!!.ensureActive()
packageInfo.applicationInfo?.let { ProxiedApp(packageManager, it, packageName) }
@ -185,12 +184,7 @@ class AppManagerActivity : ThemedActivity() {
val adapter = binding.list.adapter as AppsAdapter
withContext(Dispatchers.IO) { adapter.reload() }
adapter.filter.filter(binding.search.text?.toString() ?: "")
if (apps.isEmpty()) {
binding.list.visibility = View.GONE
binding.appPlaceholder.root.crossFadeFrom(loading)
} else {
binding.list.crossFadeFrom(loading)
}
binding.list.crossFadeFrom(loading)
}
}
@ -200,14 +194,6 @@ class AppManagerActivity : ThemedActivity() {
binding = LayoutAppsBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.appPlaceholder.openSettings.setOnClickListener {
val intent =
Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = android.net.Uri.fromParts("package", packageName, null)
}
startActivity(intent)
}
setSupportActionBar(binding.toolbar)
supportActionBar?.apply {
setTitle(R.string.proxied_apps)

View File

@ -67,6 +67,15 @@ object PackageCache {
operator fun get(uid: Int) = uidMap[uid]
operator fun get(packageName: String) = packageMap[packageName]
suspend fun awaitLoad() {
if (::packageMap.isInitialized) {
return
}
loaded.withLock {
// just await
}
}
fun awaitLoadSync() {
if (::packageMap.isInitialized) {
return

View File

@ -128,11 +128,11 @@ object LocalResolverImpl : LocalDNSTransport {
// 老版本系统,继续用阻塞的 InetAddress
try {
val u = SagerNet.underlyingNetwork
val answer = try {
u?.getAllByName(domain)
} catch (e: UnknownHostException) {
null
} ?: InetAddress.getAllByName(domain)
val answer = if (u != null) {
u.getAllByName(domain)
} else {
InetAddress.getAllByName(domain)
}
if (answer != null) {
ctx.success(answer.mapNotNull { it.hostAddress }.joinToString("\n"))
} else {

View File

@ -116,8 +116,4 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:listitem="@layout/layout_apps_item" />
<include
android:id="@+id/app_placeholder"
layout="@layout/layout_app_placeholder" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -1,25 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="32dp"
android:visibility="gone">
<TextView
android:id="@+id/empty_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingBottom="16dp"
android:text="@string/app_list_permission_denied"
android:textColor="?attr/colorOnBackground"
android:textSize="16sp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/open_settings"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/open_app_settings" />
</LinearLayout>

View File

@ -153,8 +153,4 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:listitem="@layout/layout_apps_item" />
<include
android:id="@+id/app_placeholder"
layout="@layout/layout_app_placeholder" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -208,6 +208,7 @@
<string name="action_trojan_go" translatable="false">Trojan Go</string>
<string name="action_mieru" translatable="false">Mieru</string>
<string name="action_naive" translatable="false">Naïve</string>
<string name="action_ping_tunnel" translatable="false">Ping Tunnel</string>
<string name="action_hysteria" translatable="false">Hysteria</string>
<string name="action_ssh" translatable="false">SSH</string>
<string name="action_wireguard" translatable="false">WireGuard</string>
@ -520,7 +521,10 @@
<string name="enable_ech">فعال کردن ECH</string>
<string name="enable_ech_sum">فعال کردن ECH</string>
<string name="ech_settings">تنظیمات ECH</string>
<string name="pq_signature_schemes_enabled">فعال کردن پشتیبانی از امضای مجوز post-quantum همتا</string>
<string name="dynamic_record_sizing_disabled">اندازه تطبیقی ​​رکوردهای TLS را غیرفعال می‌کند</string>
<string name="ech_config">پیکربندی ECH</string>
<string name="dynamic_record_sizing_sum">اگر فعال باشد، همیشه از بزرگترین اندازه رکورد TLS ممکن استفاده می‌شود. در صورت غیرفعال کردن، اندازه رکوردهای TLS ممکن است در تلاش برای بهبود تاخیر تنظیم شود.</string>
<string name="http_upgrade_host">میزبان HTTPUpgrade</string>
<string name="http_upgrade_path">مسیر HTTPUpgrade</string>
<string name="update_current_subscription">به‌روزرسانی اشتراک این گروه</string>

View File

@ -75,9 +75,6 @@
<string name="chain_settings">Настройки цепочки</string>
<string name="character_counter_content_description">Введено символов: %1$d из %2$d</string>
<string name="character_counter_overflowed_content_description">Превышено ограничение на количество символов (%1$d из %2$d)</string>
<string name="check_update_no">Обновления не найдены.</string>
<string name="check_update_preview">Проверить наличие обновлений предварительной версии</string>
<string name="check_update_release">Проверить наличие обновлений релизнойной версии</string>
<string name="circular_reference">Циклическая ссылка</string>
<string name="circular_reference_sum">Маршрут не может содержать сам себя.</string>
<string name="clear_logcat">Очистить журнал</string>
@ -253,7 +250,6 @@
<string name="menu_traffic">Трафик</string>
<string name="metered">Подсказка о соединении с лимитным тарифным планом</string>
<string name="metered_summary">Подсказывать системе, что VPN следует рассматривать как сеть с лимитным тарифным планом</string>
<string name="minimize">Свернуть</string>
<string name="missing_plugin">Отсутствующий плагин</string>
<string name="move">Переместить</string>
<string name="mtrl_badge_numberless_content_description">Новое уведомление</string>
@ -323,7 +319,6 @@
<string name="port_transproxy">Транспрокси-порт</string>
<string name="prefer">Предпочитать</string>
<string name="preference_copied">Текст "%1$s" скопирован в буфер обмена</string>
<string name="preview_version_hint">Это приложение является предварительной версией и может содержать множество проблем. Если вы не хотите тестировать его, скачайте релизную версию с GitHub!</string>
<string name="profile_config">Конфигурация профиля</string>
<string name="profile_empty">Пожалуйста, выберите профиль</string>
<string name="profile_import">Импортировать профиль</string>
@ -347,8 +342,6 @@
<string name="remote_dns">Удаленный DNS</string>
<string name="remove_duplicate">Удалить дубликаты серверов</string>
<string name="reset_connections">Сбросить соединения</string>
<string name="reset_settings">Восстановить настройки по умолчанию</string>
<string name="reset_settings_message">Восстановить настройки по умолчанию, такие данные, как узлы и группы, будут сохранены. Для полной очистки данных, очистите данные приложения непосредственно в системных настройках.</string>
<string name="resolve_destination">Определить адрес назначения</string>
<string name="resolve_destination_summary">Если адрес назначения является доменом, то он передается в соответствии с правилом IPv6.</string>
<string name="route_add">Создать маршрут</string>
@ -411,7 +404,7 @@
<string name="sniff_routing">Перехватывать результат для Маршрутизации</string>
<string name="speed">%s/с</string>
<string name="speed_detail">Прокси %1$s↑ %2$s↓
\nПрямой %3$s↑%4$s↓</string>
Прямой %3$s↑%4$s↓</string>
<string name="speed_interval">Интервал обновления уведомлений о скорости</string>
<string name="ss_cat">Настройки Shadowsocks</string>
<string name="ssh_auth_type_none">Без аутентификации</string>
@ -460,8 +453,6 @@
<string name="unsaved_changes_prompt">Есть несохраненные изменения. Сохранить?</string>
<string name="update_all_subscription">Обновить все подписки</string>
<string name="update_current_subscription">Обновить подписку текущей группы</string>
<string name="update_dialog_message">Текущая версия: %1$s\nДоступная версия: %2$s\nХотите загрузить её?</string>
<string name="update_dialog_title">Доступна новая версия</string>
<string name="update_settings">Обновить настройки</string>
<string name="update_subscription_warning">Прокси-сервер не подключен, вы уверены, что хотите продолжить обновление?</string>
<string name="update_when_connected_only">Обновлять только при подключении</string>

View File

@ -495,6 +495,4 @@
<string name="reset_settings">恢复默认设置</string>
<string name="reset_settings_message">恢复默认设置,但节点、分组等数据将保留。如需完全清除数据,请在系统设置中直接清除应用数据。</string>
<string name="minimize">最小化</string>
<string name="app_list_permission_denied">无法读取已安装的应用。\n这通常是由于系统限制了应用的读取权限例如某些中国厂商系统。\n请在系统设置中授予权限。</string>
<string name="open_app_settings">打开系统设置</string>
</resources>

View File

@ -575,6 +575,4 @@
<string name="reset_settings">Restore default settings</string>
<string name="reset_settings_message">Restore default settings, but data such as nodes and groups will be retained. To completely clear data, clear application data directly in the system settings.</string>
<string name="minimize">Minimize</string>
<string name="app_list_permission_denied">Unable to read installed apps.\nThis is usually because the system has restricted app read permissions.\nPlease grant permissions in the system settings.</string>
<string name="open_app_settings">Open System Settings</string>
</resources>

View File

@ -1,2 +1,2 @@
export COMMIT_SING_BOX="9beb42f553ebdf575f497c01c33ffa7b6df17efb"
export COMMIT_SING_BOX="f39bce4d939a35749aab6ea598b7ff3faf740645"
export COMMIT_LIBNEKO="1c47a3af71990a7b2192e03292b4d246c308ef0b"

View File

@ -8,11 +8,11 @@ require (
github.com/matsuridayo/libneko v1.0.0 // replaced
github.com/miekg/dns v1.1.67
github.com/oschwald/maxminddb-golang v1.13.1
github.com/sagernet/quic-go v0.52.0-sing-box-mod.3
github.com/sagernet/sing v0.7.13
github.com/sagernet/quic-go v0.52.0-beta.1
github.com/sagernet/sing v0.7.10
github.com/sagernet/sing-box v1.0.0 // replaced
github.com/sagernet/sing-tun v0.7.3
github.com/ulikunitz/xz v0.5.15
github.com/sagernet/sing-tun v0.7.2
github.com/ulikunitz/xz v0.5.11
golang.org/x/mobile v0.0.0-20231108233038-35478a0c49da
golang.org/x/sys v0.35.0
)
@ -20,7 +20,7 @@ require (
require (
github.com/ajg/form v1.5.1 // indirect
github.com/andybalholm/brotli v1.1.0 // indirect
github.com/anytls/sing-anytls v0.0.11 // indirect
github.com/anytls/sing-anytls v0.0.8 // indirect
github.com/caddyserver/certmagic v0.23.0 // indirect
github.com/caddyserver/zerossl v0.1.3 // indirect
github.com/cretz/bine v0.2.0 // indirect
@ -42,8 +42,8 @@ require (
github.com/logrusorgru/aurora v2.0.3+incompatible // indirect
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 // indirect
github.com/mdlayher/socket v0.5.1 // indirect
github.com/metacubex/tfo-go v0.0.0-20250921095601-b102db4216c0 // indirect
github.com/metacubex/utls v1.8.3 // indirect
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4 // indirect
github.com/metacubex/utls v1.8.0 // indirect
github.com/mholt/acmez/v3 v3.1.2 // indirect
github.com/quic-go/qpack v0.5.1 // indirect
github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a // indirect
@ -85,3 +85,7 @@ require (
replace github.com/matsuridayo/libneko => ../../libneko
replace github.com/sagernet/sing-box => ../../sing-box
// replace github.com/sagernet/sing-quic => ../../sing-quic
// replace github.com/sagernet/sing => ../../sing

View File

@ -2,8 +2,8 @@ github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU=
github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/anytls/sing-anytls v0.0.11 h1:w8e9Uj1oP3m4zxkyZDewPk0EcQbvVxb7Nn+rapEx4fc=
github.com/anytls/sing-anytls v0.0.11/go.mod h1:7rjN6IukwysmdusYsrV51Fgu1uW6vsrdd6ctjnEAln8=
github.com/anytls/sing-anytls v0.0.8 h1:1u/fnH1HoeeMV5mX7/eUOjLBvPdkd1UJRmXiRi6Vymc=
github.com/anytls/sing-anytls v0.0.8/go.mod h1:7rjN6IukwysmdusYsrV51Fgu1uW6vsrdd6ctjnEAln8=
github.com/caddyserver/certmagic v0.23.0 h1:CfpZ/50jMfG4+1J/u2LV6piJq4HOfO6ppOnOf7DkFEU=
github.com/caddyserver/certmagic v0.23.0/go.mod h1:9mEZIWqqWoI+Gf+4Trh04MOVPD0tGSxtqsxg87hAIH4=
github.com/caddyserver/zerossl v0.1.3 h1:onS+pxp3M8HnHpN5MMbOMyNjmTheJyWRaZYwn+YTAyA=
@ -59,10 +59,10 @@ github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42 h1:A1Cq6Ysb0GM0
github.com/mdlayher/netlink v1.7.3-0.20250113171957-fbb4dce95f42/go.mod h1:BB4YCPDOzfy7FniQ/lxuYQ3dgmM2cZumHbK8RpTjN2o=
github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos=
github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ=
github.com/metacubex/tfo-go v0.0.0-20250921095601-b102db4216c0 h1:Ui+/2s5Qz0lSnDUBmEL12M5Oi/PzvFxGTNohm8ZcsmE=
github.com/metacubex/tfo-go v0.0.0-20250921095601-b102db4216c0/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw=
github.com/metacubex/utls v1.8.3 h1:0m/yCxm3SK6kWve2lKiFb1pue1wHitJ8sQQD4Ikqde4=
github.com/metacubex/utls v1.8.3/go.mod h1:kncGGVhFaoGn5M3pFe3SXhZCzsbCJayNOH4UEqTKTko=
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4 h1:j1VRTiC9JLR4nUbSikx9OGdu/3AgFDqgcLj4GoqyQkc=
github.com/metacubex/tfo-go v0.0.0-20250516165257-e29c16ae41d4/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw=
github.com/metacubex/utls v1.8.0 h1:mSYi6FMnmc5riARl5UZDmWVy710z+P5b7xuGW0lV9ac=
github.com/metacubex/utls v1.8.0/go.mod h1:FdjYzVfCtgtna19hX0ER1Xsa5uJInwdQ4IcaaI98lEQ=
github.com/mholt/acmez/v3 v3.1.2 h1:auob8J/0FhmdClQicvJvuDavgd5ezwLBfKuYmynhYzc=
github.com/mholt/acmez/v3 v3.1.2/go.mod h1:L1wOU06KKvq7tswuMDwKdcHeKpFFgkppZy/y0DFxagQ=
github.com/miekg/dns v1.1.67 h1:kg0EHj0G4bfT5/oOys6HhZw4vmMlnoZ+gDu8tJ/AlI0=
@ -86,11 +86,11 @@ github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a h1:ObwtHN2VpqE0ZN
github.com/sagernet/netlink v0.0.0-20240612041022-b9a21c07ac6a/go.mod h1:xLnfdiJbSp8rNqYEdIW/6eDO4mVoogml14Bh2hSiFpM=
github.com/sagernet/nftables v0.3.0-beta.4 h1:kbULlAwAC3jvdGAC1P5Fa3GSxVwQJibNenDW2zaXr8I=
github.com/sagernet/nftables v0.3.0-beta.4/go.mod h1:OQXAjvjNGGFxaTgVCSTRIhYB5/llyVDeapVoENYBDS8=
github.com/sagernet/quic-go v0.52.0-sing-box-mod.3 h1:ySqffGm82rPqI1TUPqmtHIYd12pfEGScygnOxjTL56w=
github.com/sagernet/quic-go v0.52.0-sing-box-mod.3/go.mod h1:OV+V5kEBb8kJS7k29MzDu6oj9GyMc7HA07sE1tedxz4=
github.com/sagernet/quic-go v0.52.0-beta.1 h1:hWkojLg64zjV+MJOvJU/kOeWndm3tiEfBLx5foisszs=
github.com/sagernet/quic-go v0.52.0-beta.1/go.mod h1:OV+V5kEBb8kJS7k29MzDu6oj9GyMc7HA07sE1tedxz4=
github.com/sagernet/sing v0.6.9/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing v0.7.13 h1:XNYgd8e3cxMULs/LLJspdn/deHrnPWyrrglNHeCUAYM=
github.com/sagernet/sing v0.7.13/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing v0.7.10 h1:2yPhZFx+EkyHPH8hXNezgyRSHyGY12CboId7CtwLROw=
github.com/sagernet/sing v0.7.10/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
github.com/sagernet/sing-mux v0.3.3 h1:YFgt9plMWzH994BMZLmyKL37PdIVaIilwP0Jg+EcLfw=
github.com/sagernet/sing-mux v0.3.3/go.mod h1:pht8iFY4c9Xltj7rhVd208npkNaeCxzyXCgulDPLUDA=
github.com/sagernet/sing-quic v0.5.2-0.20250909083218-00a55617c0fb h1:5Wx3XeTiKrrrcrAky7Hc1bO3CGxrvho2Vu5b/adlEIM=
@ -101,8 +101,8 @@ github.com/sagernet/sing-shadowsocks2 v0.2.1 h1:dWV9OXCeFPuYGHb6IRqlSptVnSzOelnq
github.com/sagernet/sing-shadowsocks2 v0.2.1/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ=
github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11 h1:tK+75l64tm9WvEFrYRE1t0YxoFdWQqw/h7Uhzj0vJ+w=
github.com/sagernet/sing-shadowtls v0.2.1-0.20250503051639-fcd445d33c11/go.mod h1:sWqKnGlMipCHaGsw1sTTlimyUpgzP4WP3pjhCsYt9oA=
github.com/sagernet/sing-tun v0.7.3 h1:MFnAir+l24ElEyxdfwtY8mqvUUL9nPnL9TDYLkOmVes=
github.com/sagernet/sing-tun v0.7.3/go.mod h1:pUEjh9YHQ2gJT6Lk0TYDklh3WJy7lz+848vleGM3JPM=
github.com/sagernet/sing-tun v0.7.2 h1:uJkAZM0KBqIYzrq077QGqdvj/+4i/pMOx6Pnx0jYqAs=
github.com/sagernet/sing-tun v0.7.2/go.mod h1:pUEjh9YHQ2gJT6Lk0TYDklh3WJy7lz+848vleGM3JPM=
github.com/sagernet/sing-vmess v0.2.7 h1:2ee+9kO0xW5P4mfe6TYVWf9VtY8k1JhNysBqsiYj0sk=
github.com/sagernet/sing-vmess v0.2.7/go.mod h1:5aYoOtYksAyS0NXDm0qKeTYW1yoE1bJVcv+XLcVoyJs=
github.com/sagernet/smux v1.5.34-mod.2 h1:gkmBjIjlJ2zQKpLigOkFur5kBKdV6bNRoFu2WkltRQ4=
@ -122,8 +122,8 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
github.com/vishvananda/netns v0.0.5 h1:DfiHV+j8bA32MFM7bfEunvT8IAqQ/NzSJHtcmW5zdEY=
github.com/vishvananda/netns v0.0.5/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
github.com/zeebo/assert v1.1.0 h1:hU1L1vLTHsnO8x8c9KAR5GmM5QscxHg5RNU5z5qbUWY=

View File

@ -1,4 +1,4 @@
PACKAGE_NAME=moe.nb4a
VERSION_NAME=1.4.1
PRE_VERSION_NAME=pre-1.4.1-20251026-2
VERSION_CODE=45
VERSION_NAME=1.4.0
PRE_VERSION_NAME=pre-1.4.0-20250914-1
VERSION_CODE=44