Compare commits

...

21 Commits

Author SHA1 Message Date
2dust
eb22c7f303 up 1.9.33 2025-01-25 13:40:08 +08:00
alphax-hue3682
d51a4d7a7e Update libs.versions.toml (#4291)
* Update libs.versions.toml

* Update gradle-wrapper.properties

* Update libs.versions.toml

* Update libs.versions.toml
2025-01-25 13:37:47 +08:00
2dust
0fb705e1e2 Update libs.versions.toml 2025-01-25 10:28:23 +08:00
kore kas nadar
10b849ef09 Update Luri Bakhtiari translation (#4286) 2025-01-25 10:03:01 +08:00
solokot
d7d3b23cea Update Russian translation (#4281) 2025-01-25 10:02:51 +08:00
alphax-hue3682
c3786d434e remove patch (#4279)
remove patch
2025-01-19 18:36:46 +08:00
2dust
9e3b92014a logcat content reversed 2025-01-17 13:53:35 +08:00
alphax-hue3682
f4e088131b Update Persian translate (#4269) 2025-01-16 15:56:23 +08:00
2dust
e55e069fe3 Add bandwidth to hysteria2 settings
https://github.com/2dust/v2rayNG/issues/4261
2025-01-16 14:44:19 +08:00
alphax-hue3682
d8d3767798 Update Persian translate (#4264) 2025-01-14 09:53:57 +08:00
2dust
7e99b1ac78 up 1.9.32 2025-01-13 15:04:01 +08:00
2dust
6ff3a73bf2 Adjust UI for subscription 2025-01-13 14:56:48 +08:00
2dust
2a43b52344 Logcat add pull-down refresh 2025-01-13 14:31:36 +08:00
2dust
abff80ec23 Adjust UI 2025-01-13 12:51:26 +08:00
2dust
a4edf86195 Improved logcat 2025-01-13 12:50:35 +08:00
alphax-hue3682
0d0da6bfec Update Persian translate (#4256)
* Update Persian translate

* Update strings.xml
2025-01-12 13:47:18 +08:00
ᡠᠵᡠᡳ ᡠᠵᡠ ᠮᠠᠨᡩ᠋ᠠᠨ
e0c8ece9b5 Reproducible Builds for libhysteria2.so (#4249)
* Patch Go use 600296

* -buildvcs=false for libhysteria2

* fix if

* fixup! Build and cache libhysteria2.so (#4226)
2025-01-11 10:38:47 +08:00
2dust
4d875bc3d4 Add theme to SwitchCompat for tasker 2025-01-09 09:48:37 +08:00
2dust
3a6e23bcef Fix the bug of mux parameter taking 2025-01-08 11:23:21 +08:00
2dust
efd0716707 Custom configuration can use any outbound
https://github.com/2dust/v2rayNG/issues/4243
2025-01-07 17:14:23 +08:00
2dust
c94a5fb743 Update Luri Bakhtiari translation 2025-01-07 14:47:18 +08:00
38 changed files with 380 additions and 182 deletions

View File

@@ -95,7 +95,7 @@ jobs:
if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true' if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true'
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
go-mod-file: 'AndroidLibXrayLite/go.mod' go-version-file: 'AndroidLibXrayLite/go.mod'
- name: Build libhysteria2 - name: Build libhysteria2
if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true' if: steps.cache-libhysteria2-restore.outputs.cache-hit != 'true'

View File

@@ -12,8 +12,8 @@ android {
applicationId = "com.v2ray.ang" applicationId = "com.v2ray.ang"
minSdk = 21 minSdk = 21
targetSdk = 35 targetSdk = 35
versionCode = 627 versionCode = 629
versionName = "1.9.31" versionName = "1.9.33"
multiDexEnabled = true multiDexEnabled = true
val abiFilterList = (properties["ABI_FILTERS"] as? String)?.split(';') val abiFilterList = (properties["ABI_FILTERS"] as? String)?.split(';')
@@ -144,6 +144,7 @@ dependencies {
implementation(libs.androidx.constraintlayout) implementation(libs.androidx.constraintlayout)
implementation(libs.preference.ktx) implementation(libs.preference.ktx)
implementation(libs.recyclerview) implementation(libs.recyclerview)
implementation(libs.androidx.swiperefreshlayout)
// UI Libraries // UI Libraries
implementation(libs.material) implementation(libs.material)

View File

@@ -9,6 +9,7 @@ data class Hysteria2Bean(
val http: Socks5Bean? = null, val http: Socks5Bean? = null,
val tls: TlsBean? = null, val tls: TlsBean? = null,
val transport: TransportBean? = null, val transport: TransportBean? = null,
val bandwidth: BandwidthBean? = null,
) { ) {
data class ObfsBean( data class ObfsBean(
val type: String?, val type: String?,
@@ -37,4 +38,9 @@ data class Hysteria2Bean(
val hopInterval: String?, val hopInterval: String?,
) )
} }
}
data class BandwidthBean(
val down: String?,
val up: String?,
)
}

View File

@@ -1,5 +1,7 @@
package com.v2ray.ang.dto package com.v2ray.ang.dto
import com.v2ray.ang.AppConfig.LOOPBACK
import com.v2ray.ang.AppConfig.PORT_SOCKS
import com.v2ray.ang.AppConfig.TAG_BLOCKED import com.v2ray.ang.AppConfig.TAG_BLOCKED
import com.v2ray.ang.AppConfig.TAG_DIRECT import com.v2ray.ang.AppConfig.TAG_DIRECT
import com.v2ray.ang.AppConfig.TAG_PROXY import com.v2ray.ang.AppConfig.TAG_PROXY
@@ -53,6 +55,8 @@ data class ProfileItem(
var portHopping: String? = null, var portHopping: String? = null,
var portHoppingInterval: String? = null, var portHoppingInterval: String? = null,
var pinSHA256: String? = null, var pinSHA256: String? = null,
var bandwidthDown: String? = null,
var bandwidthUp: String? = null,
) { ) {
companion object { companion object {
@@ -66,6 +70,9 @@ data class ProfileItem(
} }
fun getServerAddressAndPort(): String { fun getServerAddressAndPort(): String {
if (server.isNullOrEmpty() && configType == EConfigType.CUSTOM) {
return "$LOOPBACK:$PORT_SOCKS"
}
return Utils.getIpv6Address(server) + ":" + serverPort return Utils.getIpv6Address(server) + ":" + serverPort
} }

View File

@@ -476,9 +476,9 @@ data class V2rayConfig(
data class MuxBean( data class MuxBean(
var enabled: Boolean, var enabled: Boolean,
var concurrency: Int = 8, var concurrency: Int? = null,
var xudpConcurrency: Int = 8, var xudpConcurrency: Int? = null,
var xudpProxyUDP443: String = "", var xudpProxyUDP443: String? = null,
) )
fun getServerAddress(): String? { fun getServerAddress(): String? {

View File

@@ -85,6 +85,12 @@ object Hysteria2Fmt : FmtBase() {
) )
) )
val bandwidth = if (config.bandwidthDown.isNullOrEmpty() || config.bandwidthUp.isNullOrEmpty()) null else
Hysteria2Bean.BandwidthBean(
down = config.bandwidthDown,
up = config.bandwidthUp,
)
val server = val server =
if (config.portHopping.isNullOrEmpty()) if (config.portHopping.isNullOrEmpty())
config.getServerAddressAndPort() config.getServerAddressAndPort()
@@ -96,6 +102,7 @@ object Hysteria2Fmt : FmtBase() {
auth = config.password, auth = config.password,
obfs = obfs, obfs = obfs,
transport = transport, transport = transport,
bandwidth = bandwidth,
socks5 = Hysteria2Bean.Socks5Bean( socks5 = Hysteria2Bean.Socks5Bean(
listen = "$LOOPBACK:${socksPort}", listen = "$LOOPBACK:${socksPort}",
), ),

View File

@@ -349,10 +349,6 @@ object MmkvManager {
return settingsStorage.decodeBool(key, defaultValue) return settingsStorage.decodeBool(key, defaultValue)
} }
fun decodeSettingsInt(key: String, defaultValue: Int): Int {
return settingsStorage.decodeInt(key, defaultValue)
}
fun decodeSettingsStringSet(key: String): MutableSet<String>? { fun decodeSettingsStringSet(key: String): MutableSet<String>? {
return settingsStorage.decodeStringSet(key) return settingsStorage.decodeStringSet(key)
} }

View File

@@ -438,21 +438,18 @@ object V2rayConfigManager {
|| protocol.equals(EConfigType.HYSTERIA2.name, true) || protocol.equals(EConfigType.HYSTERIA2.name, true)
) { ) {
muxEnabled = false muxEnabled = false
} else if (protocol.equals(EConfigType.VLESS.name, true)
&& outbound.settings?.vnext?.first()?.users?.first()?.flow?.isNotEmpty() == true
) {
muxEnabled = false
} else if (outbound.streamSettings?.network == NetworkType.XHTTP.type) { } else if (outbound.streamSettings?.network == NetworkType.XHTTP.type) {
muxEnabled = false muxEnabled = false
} }
if (muxEnabled == true) { if (muxEnabled == true) {
outbound.mux?.enabled = true outbound.mux?.enabled = true
outbound.mux?.concurrency = outbound.mux?.concurrency = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_CONCURRENCY, "8").orEmpty().toInt()
MmkvManager.decodeSettingsInt(AppConfig.PREF_MUX_CONCURRENCY, 8) outbound.mux?.xudpConcurrency = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_CONCURRENCY, "16").orEmpty().toInt()
outbound.mux?.xudpConcurrency = outbound.mux?.xudpProxyUDP443 = MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_QUIC,"reject")
MmkvManager.decodeSettingsInt(AppConfig.PREF_MUX_XUDP_CONCURRENCY, 16) if (protocol.equals(EConfigType.VLESS.name, true) && outbound.settings?.vnext?.first()?.users?.first()?.flow?.isNotEmpty() == true) {
outbound.mux?.xudpProxyUDP443 = outbound.mux?.concurrency = -1
MmkvManager.decodeSettingsString(AppConfig.PREF_MUX_XUDP_QUIC) ?: "reject" }
} else { } else {
outbound.mux?.enabled = false outbound.mux?.enabled = false
outbound.mux?.concurrency = -1 outbound.mux?.concurrency = -1

View File

@@ -20,6 +20,7 @@ import com.v2ray.ang.AppConfig.ANG_PACKAGE
import com.v2ray.ang.AppConfig.TAG_DIRECT import com.v2ray.ang.AppConfig.TAG_DIRECT
import com.v2ray.ang.AppConfig.VPN import com.v2ray.ang.AppConfig.VPN
import com.v2ray.ang.R import com.v2ray.ang.R
import com.v2ray.ang.dto.EConfigType
import com.v2ray.ang.dto.ProfileItem import com.v2ray.ang.dto.ProfileItem
import com.v2ray.ang.extension.toSpeedString import com.v2ray.ang.extension.toSpeedString
import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.toast
@@ -68,7 +69,10 @@ object V2RayServiceManager {
if (v2rayPoint.isRunning) return if (v2rayPoint.isRunning) return
val guid = MmkvManager.getSelectServer() ?: return val guid = MmkvManager.getSelectServer() ?: return
val config = MmkvManager.decodeServerConfig(guid) ?: return val config = MmkvManager.decodeServerConfig(guid) ?: return
if (!Utils.isValidUrl(config.server) && !Utils.isIpAddress(config.server)) return if (config.configType != EConfigType.CUSTOM
&& !Utils.isValidUrl(config.server)
&& !Utils.isIpAddress(config.server)
) return
// val result = V2rayConfigUtil.getV2rayConfig(context, guid) // val result = V2rayConfigUtil.getV2rayConfig(context, guid)
// if (!result.status) return // if (!result.status) return

View File

@@ -1,13 +1,13 @@
package com.v2ray.ang.ui package com.v2ray.ang.ui
import android.os.Bundle import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.text.method.ScrollingMovementMethod
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.View import androidx.appcompat.widget.SearchView
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.v2ray.ang.AppConfig.ANG_PACKAGE import com.v2ray.ang.AppConfig.ANG_PACKAGE
import com.v2ray.ang.R import com.v2ray.ang.R
import com.v2ray.ang.databinding.ActivityLogcatBinding import com.v2ray.ang.databinding.ActivityLogcatBinding
@@ -18,10 +18,13 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.IOException import java.io.IOException
class LogcatActivity : BaseActivity() {
private val binding by lazy { class LogcatActivity : BaseActivity(), SwipeRefreshLayout.OnRefreshListener {
ActivityLogcatBinding.inflate(layoutInflater) private val binding by lazy { ActivityLogcatBinding.inflate(layoutInflater) }
}
var logsetsAll: MutableList<String> = mutableListOf()
var logsets: MutableList<String> = mutableListOf()
private val adapter by lazy { LogcatRecyclerAdapter(this) }
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -29,24 +32,22 @@ class LogcatActivity : BaseActivity() {
title = getString(R.string.title_logcat) title = getString(R.string.title_logcat)
logcat(false) binding.recyclerView.setHasFixedSize(true)
binding.recyclerView.layoutManager = LinearLayoutManager(this)
binding.recyclerView.adapter = adapter
binding.recyclerView.addItemDecoration(DividerItemDecoration(this, DividerItemDecoration.VERTICAL))
binding.refreshLayout.setOnRefreshListener(this)
logsets.add(getString(R.string.pull_down_to_refresh))
} }
private fun logcat(shouldFlushLog: Boolean) { private fun getLogcat() {
try { try {
binding.pbWaiting.visibility = View.VISIBLE binding.refreshLayout.isRefreshing = true
lifecycleScope.launch(Dispatchers.Default) { lifecycleScope.launch(Dispatchers.Default) {
if (shouldFlushLog) {
val lst = LinkedHashSet<String>()
lst.add("logcat")
lst.add("-c")
withContext(Dispatchers.IO) {
val process = Runtime.getRuntime().exec(lst.toTypedArray())
process.waitFor()
}
}
val lst = LinkedHashSet<String>() val lst = LinkedHashSet<String>()
lst.add("logcat") lst.add("logcat")
lst.add("-d") lst.add("-d")
@@ -57,15 +58,34 @@ class LogcatActivity : BaseActivity() {
val process = withContext(Dispatchers.IO) { val process = withContext(Dispatchers.IO) {
Runtime.getRuntime().exec(lst.toTypedArray()) Runtime.getRuntime().exec(lst.toTypedArray())
} }
// val bufferedReader = BufferedReader(
// InputStreamReader(process.inputStream)) val allText = process.inputStream.bufferedReader().use { it.readLines() }.reversed()
// val allText = bufferedReader.use(BufferedReader::readText)
val allText = process.inputStream.bufferedReader().use { it.readText() }
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
binding.tvLogcat.text = allText logsetsAll = allText.toMutableList()
binding.tvLogcat.movementMethod = ScrollingMovementMethod() logsets = allText.toMutableList()
binding.pbWaiting.visibility = View.GONE adapter.notifyDataSetChanged()
Handler(Looper.getMainLooper()).post { binding.svLogcat.fullScroll(View.FOCUS_DOWN) } binding.refreshLayout.isRefreshing = false
}
}
} catch (e: IOException) {
e.printStackTrace()
}
}
private fun clearLogcat() {
try {
lifecycleScope.launch(Dispatchers.Default) {
val lst = LinkedHashSet<String>()
lst.add("logcat")
lst.add("-c")
withContext(Dispatchers.IO) {
val process = Runtime.getRuntime().exec(lst.toTypedArray())
process.waitFor()
}
launch(Dispatchers.Main) {
logsetsAll.clear()
logsets.clear()
adapter.notifyDataSetChanged()
} }
} }
} catch (e: IOException) { } catch (e: IOException) {
@@ -75,21 +95,55 @@ class LogcatActivity : BaseActivity() {
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_logcat, menu) menuInflater.inflate(R.menu.menu_logcat, menu)
val searchItem = menu.findItem(R.id.search_view)
if (searchItem != null) {
val searchView = searchItem.actionView as SearchView
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean = false
override fun onQueryTextChange(newText: String?): Boolean {
filterLogs(newText)
return false
}
})
searchView.setOnCloseListener {
filterLogs("")
false
}
}
return super.onCreateOptionsMenu(menu) return super.onCreateOptionsMenu(menu)
} }
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
R.id.copy_all -> { R.id.copy_all -> {
Utils.setClipboard(this, binding.tvLogcat.text.toString()) Utils.setClipboard(this, logsets.joinToString("\n"))
toast(R.string.toast_success) toast(R.string.toast_success)
true true
} }
R.id.clear_all -> { R.id.clear_all -> {
logcat(true) clearLogcat()
true true
} }
else -> super.onOptionsItemSelected(item) else -> super.onOptionsItemSelected(item)
} }
}
private fun filterLogs(content: String?): Boolean {
val key = content?.trim()
logsets = if (key.isNullOrEmpty()) {
logsetsAll.toMutableList()
} else {
logsetsAll.filter { it.contains(key) }.toMutableList()
}
adapter?.notifyDataSetChanged()
return true
}
override fun onRefresh() {
getLogcat()
}
}

View File

@@ -0,0 +1,31 @@
package com.v2ray.ang.ui
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.v2ray.ang.databinding.ItemRecyclerLogcatBinding
class LogcatRecyclerAdapter(val activity: LogcatActivity) : RecyclerView.Adapter<LogcatRecyclerAdapter.MainViewHolder>() {
private var mActivity: LogcatActivity = activity
override fun getItemCount() = mActivity.logsets.size
override fun onBindViewHolder(holder: MainViewHolder, position: Int) {
val content = mActivity.logsets[position]
holder.itemSubSettingBinding.logContent.text = content
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainViewHolder {
return MainViewHolder(
ItemRecyclerLogcatBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
class MainViewHolder(val itemSubSettingBinding: ItemRecyclerLogcatBinding) : RecyclerView.ViewHolder(itemSubSettingBinding.root)
}

View File

@@ -126,6 +126,8 @@ class ServerActivity : BaseActivity() {
private val et_port_hop: EditText? by lazy { findViewById(R.id.et_port_hop) } private val et_port_hop: EditText? by lazy { findViewById(R.id.et_port_hop) }
private val et_port_hop_interval: EditText? by lazy { findViewById(R.id.et_port_hop_interval) } private val et_port_hop_interval: EditText? by lazy { findViewById(R.id.et_port_hop_interval) }
private val et_pinsha256: EditText? by lazy { findViewById(R.id.et_pinsha256) } private val et_pinsha256: EditText? by lazy { findViewById(R.id.et_pinsha256) }
private val et_bandwidth_down: EditText? by lazy { findViewById(R.id.et_bandwidth_down) }
private val et_bandwidth_up: EditText? by lazy { findViewById(R.id.et_bandwidth_up) }
private val et_extra: EditText? by lazy { findViewById(R.id.et_extra) } private val et_extra: EditText? by lazy { findViewById(R.id.et_extra) }
private val layout_extra: LinearLayout? by lazy { findViewById(R.id.layout_extra) } private val layout_extra: LinearLayout? by lazy { findViewById(R.id.layout_extra) }
@@ -334,6 +336,8 @@ class ServerActivity : BaseActivity() {
et_port_hop?.text = Utils.getEditable(config.portHopping) et_port_hop?.text = Utils.getEditable(config.portHopping)
et_port_hop_interval?.text = Utils.getEditable(config.portHoppingInterval) et_port_hop_interval?.text = Utils.getEditable(config.portHoppingInterval)
et_pinsha256?.text = Utils.getEditable(config.pinSHA256) et_pinsha256?.text = Utils.getEditable(config.pinSHA256)
et_bandwidth_down?.text = Utils.getEditable(config.bandwidthDown)
et_bandwidth_up?.text = Utils.getEditable(config.bandwidthUp)
} }
val securityEncryptions = val securityEncryptions =
if (config.configType == EConfigType.SHADOWSOCKS) shadowsocksSecuritys else securitys if (config.configType == EConfigType.SHADOWSOCKS) shadowsocksSecuritys else securitys
@@ -513,6 +517,8 @@ class ServerActivity : BaseActivity() {
config.portHopping = et_port_hop?.text?.toString() config.portHopping = et_port_hop?.text?.toString()
config.portHoppingInterval = et_port_hop_interval?.text?.toString() config.portHoppingInterval = et_port_hop_interval?.text?.toString()
config.pinSHA256 = et_pinsha256?.text?.toString() config.pinSHA256 = et_pinsha256?.text?.toString()
config.bandwidthDown = et_bandwidth_down?.text?.toString()
config.bandwidthUp = et_bandwidth_up?.text?.toString()
} }
} }

View File

@@ -77,6 +77,7 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

View File

@@ -1,40 +1,26 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:paddingStart="@dimen/padding_start"
android:paddingEnd="@dimen/padding_end"
tools:context=".ui.LogcatActivity"> tools:context=".ui.LogcatActivity">
<ProgressBar <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/pb_waiting" android:id="@+id/refreshLayout"
style="@android:style/Widget.DeviceDefault.ProgressBar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent">
android:layout_centerHorizontal="true"
android:layout_centerVertical="true" />
<ScrollView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/sv_logcat" android:id="@+id/recycler_view"
android:layout_width="match_parent" android:scrollbars="vertical"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:fillViewport="false"
android:foregroundGravity="bottom">
<TextView
android:id="@+id/tv_logcat"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:gravity="bottom" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
android:maxLines="65536"
android:textAppearance="?android:attr/textAppearanceSmall" /> </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</ScrollView>
</RelativeLayout> </RelativeLayout>

View File

@@ -54,6 +54,7 @@
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
android:scrollbars="vertical"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"

View File

@@ -90,6 +90,44 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_top_height"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/server_lab_bandwidth_down" />
<EditText
android:id="@+id/et_bandwidth_down"
android:layout_width="match_parent"
android:layout_height="@dimen/edit_height"
android:inputType="text" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_top_height"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/server_lab_bandwidth_up" />
<EditText
android:id="@+id/et_bandwidth_up"
android:layout_width="match_parent"
android:layout_height="@dimen/edit_height"
android:inputType="text" />
</LinearLayout>
<include layout="@layout/layout_tls_hysteria2" /> <include layout="@layout/layout_tls_hysteria2" />
<LinearLayout <LinearLayout

View File

@@ -1,4 +1,5 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
@@ -16,18 +17,16 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:checked="true" /> android:checked="true"
app:theme="@style/BrandedSwitch" />
<androidx.appcompat.widget.AppCompatTextView <androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_toStartOf="@id/switch_start_service" android:layout_toStartOf="@id/switch_start_service"
android:layout_toLeftOf="@id/switch_start_service"
android:text="@string/tasker_start_service" android:text="@string/tasker_start_service"
android:textAppearance="@style/TextAppearance.AppCompat.Medium" /> android:textAppearance="@style/TextAppearance.AppCompat.Medium" />

View File

@@ -0,0 +1,24 @@
<?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="wrap_content"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/layout_margin_spacing">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/log_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.AppCompat.Small" />
</LinearLayout>
</LinearLayout>

View File

@@ -44,70 +44,76 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_spacing" android:layout_marginTop="@dimen/layout_margin_spacing"
android:lines="1" android:lines="2"
android:textAppearance="@style/TextAppearance.AppCompat.Small" /> android:textAppearance="@style/TextAppearance.AppCompat.Small" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/sub_height"
android:gravity="center"
android:orientation="vertical"
android:paddingStart="@dimen/padding_start"
android:paddingEnd="@dimen/padding_end">
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_spacing" android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/layout_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/layout_margin_spacing">
<ImageView
android:layout_width="@dimen/png_height"
android:layout_height="@dimen/png_height"
app:srcCompat="@drawable/ic_share_24dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:nextFocusLeft="@+id/info_container"
android:orientation="vertical"
android:padding="@dimen/layout_margin_spacing">
<ImageView
android:layout_width="@dimen/png_height"
android:layout_height="@dimen/png_height"
app:srcCompat="@drawable/ic_edit_24dp" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin_top_height"
android:orientation="horizontal"> android:orientation="horizontal">
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat
android:id="@+id/chk_enable" android:id="@+id/chk_enable"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/sub_setting_enable"
app:theme="@style/BrandedSwitch" /> app:theme="@style/BrandedSwitch" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="@dimen/sub_height"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/layout_share"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/layout_margin_spacing">
<ImageView
android:layout_width="@dimen/png_height"
android:layout_height="@dimen/png_height"
app:srcCompat="@drawable/ic_share_24dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_edit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackgroundBorderless"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:nextFocusLeft="@+id/info_container"
android:orientation="vertical"
android:padding="@dimen/layout_margin_spacing">
<ImageView
android:layout_width="@dimen/png_height"
android:layout_height="@dimen/png_height"
app:srcCompat="@drawable/ic_edit_24dp" />
</LinearLayout>
</LinearLayout>
</LinearLayout> </LinearLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@@ -5,10 +5,10 @@
android:id="@+id/del_config" android:id="@+id/del_config"
android:icon="@drawable/ic_delete_24dp" android:icon="@drawable/ic_delete_24dp"
android:title="@string/menu_item_del_config" android:title="@string/menu_item_del_config"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/save_config" android:id="@+id/save_config"
android:icon="@drawable/ic_action_done" android:icon="@drawable/ic_action_done"
android:title="@string/menu_item_save_config" android:title="@string/menu_item_save_config"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
</menu> </menu>

View File

@@ -5,10 +5,10 @@
android:id="@+id/add_config" android:id="@+id/add_config"
android:icon="@drawable/ic_add_24dp" android:icon="@drawable/ic_add_24dp"
android:title="@string/menu_item_add_config" android:title="@string/menu_item_add_config"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/sub_update" android:id="@+id/sub_update"
android:icon="@drawable/ic_restore_24dp" android:icon="@drawable/ic_restore_24dp"
android:title="@string/title_sub_update" android:title="@string/title_sub_update"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
</menu> </menu>

View File

@@ -24,5 +24,5 @@
android:id="@+id/download_file" android:id="@+id/download_file"
android:icon="@drawable/ic_cloud_download_24dp" android:icon="@drawable/ic_cloud_download_24dp"
android:title="@string/menu_item_download_file" android:title="@string/menu_item_download_file"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
</menu> </menu>

View File

@@ -6,7 +6,7 @@
android:icon="@drawable/ic_description_24dp" android:icon="@drawable/ic_description_24dp"
android:title="@string/menu_item_search" android:title="@string/menu_item_search"
app:actionViewClass="androidx.appcompat.widget.SearchView" app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/select_all" android:id="@+id/select_all"
android:icon="@drawable/ic_select_all_24dp" android:icon="@drawable/ic_select_all_24dp"

View File

@@ -1,14 +1,20 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search_view"
android:icon="@drawable/ic_outline_filter_alt_24"
android:title="@string/menu_item_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView" />
<item <item
android:id="@+id/clear_all" android:id="@+id/clear_all"
android:icon="@drawable/ic_delete_24dp" android:icon="@drawable/ic_delete_24dp"
android:title="@string/logcat_clear" android:title="@string/logcat_clear"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/copy_all" android:id="@+id/copy_all"
android:icon="@drawable/ic_copy" android:icon="@drawable/ic_copy"
android:title="@string/logcat_copy" android:title="@string/logcat_copy"
app:showAsAction="always" /> app:showAsAction="ifRoom" />
</menu> </menu>

View File

@@ -55,7 +55,7 @@
<item <item
android:title="@string/menu_item_import_config_custom" android:title="@string/menu_item_import_config_custom"
app:showAsAction="always"> app:showAsAction="ifRoom">
<menu> <menu>
<item <item
android:id="@+id/import_config_custom_clipboard" android:id="@+id/import_config_custom_clipboard"

View File

@@ -5,10 +5,10 @@
android:id="@+id/scan_code" android:id="@+id/scan_code"
android:icon="@drawable/ic_scan_24dp" android:icon="@drawable/ic_scan_24dp"
android:title="" android:title=""
app:showAsAction="always" /> app:showAsAction="ifRoom" />
<item <item
android:id="@+id/select_photo" android:id="@+id/select_photo"
android:icon="@drawable/ic_image_24dp" android:icon="@drawable/ic_image_24dp"
android:title="" android:title=""
app:showAsAction="always" /> app:showAsAction="ifRoom" />
</menu> </menu>

View File

@@ -8,6 +8,7 @@
<string name="navigation_drawer_close">إغلاق درج التنقل</string> <string name="navigation_drawer_close">إغلاق درج التنقل</string>
<string name="migration_success">نجحت عملية ترحيل البيانات!</string> <string name="migration_success">نجحت عملية ترحيل البيانات!</string>
<string name="migration_fail">فشلت عملية ترحيل البيانات!</string> <string name="migration_fail">فشلت عملية ترحيل البيانات!</string>
<string name="pull_down_to_refresh">Please pull down to refresh!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">إيقاف</string> <string name="notification_action_stop_v2ray">إيقاف</string>
@@ -120,6 +121,8 @@
<string name="server_lab_port_hop">Port Hopping</string> <string name="server_lab_port_hop">Port Hopping</string>
<string name="server_lab_port_hop_interval">Port Hopping Interval</string> <string name="server_lab_port_hop_interval">Port Hopping Interval</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">Bandwidth down (units)</string>
<string name="server_lab_bandwidth_up">Bandwidth up (units)</string>
<string name="server_lab_xhttp_mode">XHTTP Mode</string> <string name="server_lab_xhttp_mode">XHTTP Mode</string>
<string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string>

View File

@@ -8,6 +8,7 @@
<string name="navigation_drawer_close">নেভিগেশন ড্রয়ার বন্ধ করুন</string> <string name="navigation_drawer_close">নেভিগেশন ড্রয়ার বন্ধ করুন</string>
<string name="migration_success">ডেটা স্থানান্তর সফল!</string> <string name="migration_success">ডেটা স্থানান্তর সফল!</string>
<string name="migration_fail">ডেটা স্থানান্তর ব্যর্থ!</string> <string name="migration_fail">ডেটা স্থানান্তর ব্যর্থ!</string>
<string name="pull_down_to_refresh">Please pull down to refresh!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">বন্ধ করুন</string> <string name="notification_action_stop_v2ray">বন্ধ করুন</string>
@@ -119,6 +120,8 @@
<string name="server_lab_port_hop">Port Hopping</string> <string name="server_lab_port_hop">Port Hopping</string>
<string name="server_lab_port_hop_interval">Port Hopping Interval</string> <string name="server_lab_port_hop_interval">Port Hopping Interval</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">Bandwidth down (units)</string>
<string name="server_lab_bandwidth_up">Bandwidth up (units)</string>
<string name="server_lab_xhttp_mode">XHTTP Mode</string> <string name="server_lab_xhttp_mode">XHTTP Mode</string>
<string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string>

View File

@@ -8,6 +8,7 @@
<string name="navigation_drawer_close">بستن نومگه کشاری</string> <string name="navigation_drawer_close">بستن نومگه کشاری</string>
<string name="migration_success">مووفقیت من جاگورویی داده</string> <string name="migration_success">مووفقیت من جاگورویی داده</string>
<string name="migration_fail">جاگورویی داده ٱنجوم نگرؽڌ</string> <string name="migration_fail">جاگورویی داده ٱنجوم نگرؽڌ</string>
<string name="pull_down_to_refresh">Please pull down to refresh!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">واڌاشتن</string> <string name="notification_action_stop_v2ray">واڌاشتن</string>
@@ -40,16 +41,16 @@
<string name="menu_item_import_config_custom_url">کانفیگ سفارشین ز آدرس اینترنتی و من بیار</string> <string name="menu_item_import_config_custom_url">کانفیگ سفارشین ز آدرس اینترنتی و من بیار</string>
<string name="menu_item_import_config_custom_url_scan">نشۊوی اینترنتی اسکن کانفیگ سفارشین بزݩ</string> <string name="menu_item_import_config_custom_url_scan">نشۊوی اینترنتی اسکن کانفیگ سفارشین بزݩ</string>
<string name="del_config_comfirm">پاک بۊ؟</string> <string name="del_config_comfirm">پاک بۊ؟</string>
<string name="del_invalid_config_comfirm">پؽش ز پاک کردن کانفیگ نا موئتبر قوۊل کوݩ! پاک کردن کانفیگن قوۊل اکۊنی؟</string> <string name="del_invalid_config_comfirm">پؽش ز پاک کردن کانفیگ نا موئتبر واجۊری کوݩ! پاک کردن کانفیگن قوۊل اکۊنی؟</string>
<string name="server_lab_remarks">نیشتنا</string> <string name="server_lab_remarks">نیشتنا</string>
<string name="server_lab_address">آدرس</string> <string name="server_lab_address">آدرس</string>
<string name="server_lab_port">پورت</string> <string name="server_lab_port">پورت</string>
<string name="server_lab_id">نوم من توری</string> <string name="server_lab_id">نوم من توری</string>
<string name="server_lab_alterid">alterId</string> <string name="server_lab_alterid">شناسه جایگۊزین</string>
<string name="server_lab_security">ٱمنیت</string> <string name="server_lab_security">ٱمنیت</string>
<string name="server_lab_network">شبکه</string> <string name="server_lab_network">شبکه</string>
<string name="server_lab_more_function">جاگورو</string> <string name="server_lab_more_function">جاگورو</string>
<string name="server_lab_head_type">نوء head</string> <string name="server_lab_head_type">نوء سر بلگ</string>
<string name="server_lab_mode_type">هالت gRPC</string> <string name="server_lab_mode_type">هالت gRPC</string>
<string name="server_lab_request_host">هاست</string> <string name="server_lab_request_host">هاست</string>
<string name="server_lab_request_host_http">هاست http</string> <string name="server_lab_request_host_http">هاست http</string>
@@ -58,14 +59,14 @@
<string name="server_lab_request_host_xhttp">هاست xhttp</string> <string name="server_lab_request_host_xhttp">هاست xhttp</string>
<string name="server_lab_request_host_h2">هاست h2</string> <string name="server_lab_request_host_h2">هاست h2</string>
<string name="server_lab_request_host_quic">ٱمنیت QUIC</string> <string name="server_lab_request_host_quic">ٱمنیت QUIC</string>
<string name="server_lab_request_host_grpc">اختیار gRPC</string> <string name="server_lab_request_host_grpc">Authority gRPC</string>
<string name="server_lab_path">تور</string> <string name="server_lab_path">تور</string>
<string name="server_lab_path_ws">تور ws</string> <string name="server_lab_path_ws">تور WS</string>
<string name="server_lab_path_httpupgrade">تور httpupgrade</string> <string name="server_lab_path_httpupgrade">تور HTTPUpgrade</string>
<string name="server_lab_path_xhttp">تور xhttp</string> <string name="server_lab_path_xhttp">تور XHTTP</string>
<string name="server_lab_path_h2">تور h2</string> <string name="server_lab_path_h2">تور H2</string>
<string name="server_lab_path_quic">کیلیت QUIC</string> <string name="server_lab_path_quic">تور QUIC</string>
<string name="server_lab_path_kcp">سید kcp</string> <string name="server_lab_path_kcp">KCP seed</string>
<string name="server_lab_path_grpc">نوم خدمات gRPC</string> <string name="server_lab_path_grpc">نوم خدمات gRPC</string>
<string name="server_lab_stream_security">TLS</string> <string name="server_lab_stream_security">TLS</string>
<string name="server_lab_stream_fingerprint" translatable="false">Fingerprint</string> <string name="server_lab_stream_fingerprint" translatable="false">Fingerprint</string>
@@ -82,12 +83,12 @@
<string name="server_lab_flow">جریان</string> <string name="server_lab_flow">جریان</string>
<string name="server_lab_public_key">کیلیت پوی وولاتی</string> <string name="server_lab_public_key">کیلیت پوی وولاتی</string>
<string name="server_lab_preshared_key">کیلیت رمز ناهاڌن ازاف (اختیاری)</string> <string name="server_lab_preshared_key">کیلیت رمز ناهاڌن ازاف (اختیاری)</string>
<string name="server_lab_short_id">ShortId</string> <string name="server_lab_short_id">ShortID</string>
<string name="server_lab_spider_x">SpiderX</string> <string name="server_lab_spider_x">SpiderX</string>
<string name="server_lab_secret_key">کیلیت سیخومی</string> <string name="server_lab_secret_key">کیلیت سیخومی</string>
<string name="server_lab_reserved">Reserved(اختیاری، وا کاما ز یک جوڌا ابۊن)</string> <string name="server_lab_reserved">Reserved(اختیاری، وا کاما ز یک جوڌا ابۊن)</string>
<string name="server_lab_local_address">آدرس مهلی (اختیاری IPv4/IPv6، وا کاما ز یک جوڌا ابۊن)</string> <string name="server_lab_local_address">آدرس مهلی (اختیاری IPv4/IPv6، وا کاما ز یک جوڌا ابۊن)</string>
<string name="server_lab_local_mtu">Mtu(اختیاری، خوتکار 1420)</string> <string name="server_lab_local_mtu">Mtu(اختیاری، پؽش فرز 1420)</string>
<string name="toast_success">وا مووفقیت ٱنجوم وابی</string> <string name="toast_success">وا مووفقیت ٱنجوم وابی</string>
<string name="toast_failure">شکست خرد</string> <string name="toast_failure">شکست خرد</string>
<string name="toast_none_data">هیچ داده ای وۊجۊڌ نڌاره</string> <string name="toast_none_data">هیچ داده ای وۊجۊڌ نڌاره</string>
@@ -107,7 +108,7 @@
<string name="toast_asset_copy_failed">لف گیری فایل ٱنجوم نوابی، ز ی برنومه دؽوۉداری فایل هیاری بگرین</string> <string name="toast_asset_copy_failed">لف گیری فایل ٱنجوم نوابی، ز ی برنومه دؽوۉداری فایل هیاری بگرین</string>
<string name="menu_item_add_asset">ازاف کردن دارایی</string> <string name="menu_item_add_asset">ازاف کردن دارایی</string>
<string name="menu_item_add_file">ازاف کردن فایل</string> <string name="menu_item_add_file">ازاف کردن فایل</string>
<string name="menu_item_add_url">ازاف کردن آدرس اینترنتی</string> <string name="menu_item_add_url">ازاف کردن لینگ</string>
<string name="menu_item_scan_qrcode">اسکن QRcode</string> <string name="menu_item_scan_qrcode">اسکن QRcode</string>
<string name="title_url">آدرس اینترنتی</string> <string name="title_url">آدرس اینترنتی</string>
<string name="menu_item_download_file">دانلود فایلا</string> <string name="menu_item_download_file">دانلود فایلا</string>
@@ -115,10 +116,12 @@
<string name="msg_file_not_found">فایلن نجوست</string> <string name="msg_file_not_found">فایلن نجوست</string>
<string name="msg_remark_is_duplicate">ائزارات ز زیتر بیڌسۉݩ</string> <string name="msg_remark_is_duplicate">ائزارات ز زیتر بیڌسۉݩ</string>
<string name="toast_action_not_allowed">ای کار ممنۊ هڌ</string> <string name="toast_action_not_allowed">ای کار ممنۊ هڌ</string>
<string name="server_obfs_password">رزم Obfs</string> <string name="server_obfs_password">رزم obfs</string>
<string name="server_lab_port_hop">پورت گوم (درگا سرورن ز نۊ هؽل اکونه)</string> <string name="server_lab_port_hop">پورت گوم (درگا سرورن ز نۊ هؽل اکونه)</string>
<string name="server_lab_port_hop_interval">فاسله پورت گوم (سانیه)</string> <string name="server_lab_port_hop_interval">فاسله پورت گوم (سانیه)</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">ب لم ٱووڌن پئنا باند (واهڌ)</string>
<string name="server_lab_bandwidth_up">وا روء رئڌن پئنا باند (واهڌ)</string>
<string name="server_lab_xhttp_mode">هالت XHTTP</string> <string name="server_lab_xhttp_mode">هالت XHTTP</string>
<string name="server_lab_xhttp_extra">XHTTP Extra خام JSON، قالوو: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra خام JSON، قالوو: { XHTTPObject }</string>
@@ -176,7 +179,7 @@
<string name="summary_pref_remote_dns">DNS</string> <string name="summary_pref_remote_dns">DNS</string>
<string name="title_pref_vpn_dns">VPN DNS (تینا IPv4/v6)</string> <string name="title_pref_vpn_dns">VPN DNS (تینا IPv4/v6)</string>
<string name="title_pref_vpn_bypass_lan">Does VPN bypass LAN</string> <string name="title_pref_vpn_bypass_lan">VPN ز شبکه مهلی اگوڌرته؟</string>
<string name="title_pref_domestic_dns">DNS منی (اختیاری)</string> <string name="title_pref_domestic_dns">DNS منی (اختیاری)</string>
<string name="summary_pref_domestic_dns">DNS</string> <string name="summary_pref_domestic_dns">DNS</string>
@@ -187,12 +190,12 @@
<string name="title_pref_delay_test_url">آدرس اینترنتی آزمایش تئخیر واقعی (http/https)</string> <string name="title_pref_delay_test_url">آدرس اینترنتی آزمایش تئخیر واقعی (http/https)</string>
<string name="summary_pref_delay_test_url">نشۊوی اینترنتی</string> <string name="summary_pref_delay_test_url">نشۊوی اینترنتی</string>
<string name="title_pref_proxy_sharing_enabled">هشتن منپیزا ز LAN</string> <string name="title_pref_proxy_sharing_enabled">هشتن منپیزا ز شبکه مهلی</string>
<string name="summary_pref_proxy_sharing_enabled">پوی دسگایل ترن وا آدرس IP ایسا، ز ر socks/http و پروکسی منپیز بۊن، تینا من شبکه قابل اعتماد فعال بۊ تا ز منپیز ؛یر موجاز جلو گری بۊ.</string> <string name="summary_pref_proxy_sharing_enabled">پوی دسگایل ترن وا آدرس IP ایسا، ز ر socks/http و پروکسی منپیز بۊن، تینا من شبکه قابل اعتماد فعال بۊ تا ز منپیز غیر موجاز جلو گری بۊ.</string>
<string name="toast_warning_pref_proxysharing_short">منپیزا ز LAN ن موجار کۊنین، موتمعن بۊین ک من ی شبکه قابل ائتماڌ هڌین.</string> <string name="toast_warning_pref_proxysharing_short">منپیزا ز شبکه مهلی ن موجار کۊنین، موتمعن بۊین ک من ی شبکه قابل ائتماڌ هڌین.</string>
<string name="title_pref_allow_insecure">اجازه نا ٱمن</string> <string name="title_pref_allow_insecure">اجازه نا ٱمن</string>
<string name="summary_pref_allow_insecure">مجال و کار بردن TLS ب تۉر پؽش فرز، موجوز نا ٱمن فعال هڌ.</string> <string name="summary_pref_allow_insecure">مجال و کار بوردن TLS ب تۉر پؽش فرز، موجوز نا ٱمن فعال هڌ.</string>
<string name="title_pref_socks_port">پورت پروکسی مهلی</string> <string name="title_pref_socks_port">پورت پروکسی مهلی</string>
<string name="summary_pref_socks_port">پورت پروکسی مهلی</string> <string name="summary_pref_socks_port">پورت پروکسی مهلی</string>
@@ -232,7 +235,7 @@
<string name="title_core_loglevel">سئت داسووا</string> <string name="title_core_loglevel">سئت داسووا</string>
<string name="title_mode">هالت</string> <string name="title_mode">هالت</string>
<string name="title_mode_help">سی هیاری بیشتر ری ای هؽل بزݩ</string> <string name="title_mode_help">سی دووسمندیا وو هیاری بیشتر، ری ای هؽل بزݩ</string>
<string name="title_language">زۉݩ</string> <string name="title_language">زۉݩ</string>
<string name="title_ui_settings">سامووا رابت منتوری</string> <string name="title_ui_settings">سامووا رابت منتوری</string>
<string name="title_pref_ui_mode_night">سامووا هالت رابت منتوری</string> <string name="title_pref_ui_mode_night">سامووا هالت رابت منتوری</string>
@@ -248,12 +251,12 @@
<string name="title_sub_setting">سامووا جرگه اشتراک</string> <string name="title_sub_setting">سامووا جرگه اشتراک</string>
<string name="sub_setting_remarks">نیشتنا</string> <string name="sub_setting_remarks">نیشتنا</string>
<string name="sub_setting_url">نشۊوی اینترنتی اختیاری</string> <string name="sub_setting_url">نشۊوی اینترنتی اختیاری</string>
<string name="sub_setting_filter">نیشتنا فیلتر مئمۊلی</string> <string name="sub_setting_filter">نوم موستعار فیلتر</string>
<string name="sub_setting_enable">فعال بیڌن ورۊ کردن</string> <string name="sub_setting_enable">فعال بیڌن ورۊ کردن</string>
<string name="sub_auto_update">فعال بیڌن ورۊ کردن خوتکار</string> <string name="sub_auto_update">فعال بیڌن ورۊ کردن خوتکار</string>
<string name="sub_setting_pre_profile">نیشتنا پروکسی پؽشی</string> <string name="sub_setting_pre_profile">نوم موستعار پروکسی دیندایی</string>
<string name="sub_setting_next_profile">نیشتنا پروکسی نیایی</string> <string name="sub_setting_next_profile">نوم موستعار پروکسی نیایی</string>
<string name="sub_setting_pre_profile_tip">نیشتنا هڌسۉݩ وو هرف نارن</string> <string name="sub_setting_pre_profile_tip">موتمعن بۊ ک نوم موستعار هڌس وو جۊرس نی</string>
<string name="title_sub_update">ورۊ کردن اشتراک جرگه سکویی</string> <string name="title_sub_update">ورۊ کردن اشتراک جرگه سکویی</string>
<string name="title_ping_all_server">Tcping کانفیگا جرگه سکویی</string> <string name="title_ping_all_server">Tcping کانفیگا جرگه سکویی</string>
<string name="title_real_ping_all_server">تئخیر واقعی کانفیگا جرگه سکویی</string> <string name="title_real_ping_all_server">تئخیر واقعی کانفیگا جرگه سکویی</string>
@@ -340,9 +343,9 @@
</string-array> </string-array>
<string-array name="vpn_bypass_lan"> <string-array name="vpn_bypass_lan">
<item>Follow config</item> <item>پؽش فرز کانفیگ</item>
<item>Bypass</item> <item>دور زیڌه بۊ</item>
<item>Not Bypass</item> <item>دور زیڌه نبۊ</item>
</string-array> </string-array>
</resources> </resources>

View File

@@ -8,6 +8,7 @@
<string name="navigation_drawer_close">بستن منو کشویی</string> <string name="navigation_drawer_close">بستن منو کشویی</string>
<string name="migration_success">موفقیت در انتقال داده</string> <string name="migration_success">موفقیت در انتقال داده</string>
<string name="migration_fail">انتقال داده انجام نشد!</string> <string name="migration_fail">انتقال داده انجام نشد!</string>
<string name="pull_down_to_refresh">لطفاً برای تازه کردن، پایین بکشید!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">توقف</string> <string name="notification_action_stop_v2ray">توقف</string>
@@ -69,7 +70,7 @@
<string name="server_lab_path_grpc">gRPC ServiceName</string> <string name="server_lab_path_grpc">gRPC ServiceName</string>
<string name="server_lab_stream_security">TLS</string> <string name="server_lab_stream_security">TLS</string>
<string name="server_lab_stream_fingerprint">اثرانگشت</string> <string name="server_lab_stream_fingerprint">اثرانگشت</string>
<string name="server_lab_stream_alpn">AlPN</string> <string name="server_lab_stream_alpn">Alpn</string>
<string name="server_lab_allow_insecure">اعطای مجوز ناامن</string> <string name="server_lab_allow_insecure">اعطای مجوز ناامن</string>
<string name="server_lab_sni">SNI</string> <string name="server_lab_sni">SNI</string>
<string name="server_lab_address3">نشانی</string> <string name="server_lab_address3">نشانی</string>
@@ -114,6 +115,8 @@
<string name="server_lab_port_hop">پورت پرش (درگاه سرور را بازنویسی می کند)</string> <string name="server_lab_port_hop">پورت پرش (درگاه سرور را بازنویسی می کند)</string>
<string name="server_lab_port_hop_interval">فاصله پورت پرش (ثانیه)</string> <string name="server_lab_port_hop_interval">فاصله پورت پرش (ثانیه)</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">کاهش پهنای باند (واحد)</string>
<string name="server_lab_bandwidth_up">افزایش پهنای باند (واحد)</string>
<string name="server_lab_xhttp_mode">حالت XHTTP</string> <string name="server_lab_xhttp_mode">حالت XHTTP</string>
<string name="server_lab_xhttp_extra">خام JSON XHTTP Extra، قالب: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">خام JSON XHTTP Extra، قالب: { XHTTPObject }</string>
@@ -155,7 +158,7 @@
<string name="title_pref_speed_enabled">فعال کردن نمایش سرعت</string> <string name="title_pref_speed_enabled">فعال کردن نمایش سرعت</string>
<string name="summary_pref_speed_enabled">نمایش سرعت فعلی در قسمت اعلان. \nآیکون اعلان بر اساس استفاده تغییر می‌کند.</string> <string name="summary_pref_speed_enabled">نمایش سرعت فعلی در قسمت اعلان. \nآیکون اعلان بر اساس استفاده تغییر می‌کند.</string>
<string name="title_pref_sniffing_enabled">فعال کردن تجزیه و تحلیل بسته ها (SNIFFING)</string> <string name="title_pref_sniffing_enabled">فعال کردن تجزیه و تحلیل بسته ها (Sniffing)</string>
<string name="summary_pref_sniffing_enabled">استفاده از تشخیص نام دامنه (Sniff) در بسته ها (به طور پیش فرض فعال است)</string> <string name="summary_pref_sniffing_enabled">استفاده از تشخیص نام دامنه (Sniff) در بسته ها (به طور پیش فرض فعال است)</string>
<string name="title_pref_route_only_enabled">فعال کردن دامنه فقط مسیر یابی (RouteOnly)</string> <string name="title_pref_route_only_enabled">فعال کردن دامنه فقط مسیر یابی (RouteOnly)</string>
<string name="summary_pref_route_only_enabled">از نام دامنه (Snnifed) فقط برای مسیریابی استفاده کنید و آدرس مقصد را به عنوان IP ذخیره کنید.</string> <string name="summary_pref_route_only_enabled">از نام دامنه (Snnifed) فقط برای مسیریابی استفاده کنید و آدرس مقصد را به عنوان IP ذخیره کنید.</string>
@@ -179,8 +182,8 @@
<string name="title_pref_domestic_dns">DNS داخلی (اختیاری)</string> <string name="title_pref_domestic_dns">DNS داخلی (اختیاری)</string>
<string name="summary_pref_domestic_dns">DNS</string> <string name="summary_pref_domestic_dns">DNS</string>
<string name="title_pref_dns_hosts">DNS مستقیم هاست(فرمت: دامنه: آدرس،…)</string> <string name="title_pref_dns_hosts">DNS مستقیم هاست (فرمت: دامنه:آدرس،…)</string>
<string name="summary_pref_dns_hosts">دامنه: آدرس، </string> <string name="summary_pref_dns_hosts">دامنه:آدرس،…</string>
<string name="title_pref_delay_test_url">آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها (HTTP/HTTPS)</string> <string name="title_pref_delay_test_url">آدرس اینترنتی آزمایش تاخیر واقعی کانفیگ ها (HTTP/HTTPS)</string>
<string name="summary_pref_delay_test_url">URL</string> <string name="summary_pref_delay_test_url">URL</string>

View File

@@ -7,6 +7,7 @@
<string name="navigation_drawer_close">Закрыть панель навигации</string> <string name="navigation_drawer_close">Закрыть панель навигации</string>
<string name="migration_success">Успешный перенос данных!</string> <string name="migration_success">Успешный перенос данных!</string>
<string name="migration_fail">Перенос данных не выполнен!</string> <string name="migration_fail">Перенос данных не выполнен!</string>
<string name="pull_down_to_refresh">Потяните вниз для обновления!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">Остановить</string> <string name="notification_action_stop_v2ray">Остановить</string>
@@ -118,6 +119,8 @@
<string name="server_lab_port_hop">Смена портов (переопределяет порт)</string> <string name="server_lab_port_hop">Смена портов (переопределяет порт)</string>
<string name="server_lab_port_hop_interval">Интервал смены портов</string> <string name="server_lab_port_hop_interval">Интервал смены портов</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">Входящая пропускная способность (единицы)</string>
<string name="server_lab_bandwidth_up">Исходящая пропускная способность (единицы)</string>
<string name="server_lab_xhttp_mode">Режим XHTTP</string> <string name="server_lab_xhttp_mode">Режим XHTTP</string>
<string name="server_lab_xhttp_extra">Необработанный JSON XHTTP Extra, формат: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">Необработанный JSON XHTTP Extra, формат: { XHTTPObject }</string>

View File

@@ -7,6 +7,7 @@
<string name="navigation_drawer_close">Đóng Menu ứng dụng</string> <string name="navigation_drawer_close">Đóng Menu ứng dụng</string>
<string name="migration_success">Đã chuyển dữ liệu!</string> <string name="migration_success">Đã chuyển dữ liệu!</string>
<string name="migration_fail">Không thể chuyển dữ liệu!</string> <string name="migration_fail">Không thể chuyển dữ liệu!</string>
<string name="pull_down_to_refresh">Please pull down to refresh!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">Ngắt kết nối v2rayNG</string> <string name="notification_action_stop_v2ray">Ngắt kết nối v2rayNG</string>
@@ -113,6 +114,8 @@
<string name="server_lab_port_hop">Port Hopping</string> <string name="server_lab_port_hop">Port Hopping</string>
<string name="server_lab_port_hop_interval">Port Hopping Interval</string> <string name="server_lab_port_hop_interval">Port Hopping Interval</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">Bandwidth down (units)</string>
<string name="server_lab_bandwidth_up">Bandwidth up (units)</string>
<string name="server_lab_xhttp_mode">XHTTP Mode</string> <string name="server_lab_xhttp_mode">XHTTP Mode</string>
<string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string>

View File

@@ -7,6 +7,7 @@
<string name="navigation_drawer_close">Close navigation drawer</string> <string name="navigation_drawer_close">Close navigation drawer</string>
<string name="migration_success">数据迁移成功!</string> <string name="migration_success">数据迁移成功!</string>
<string name="migration_fail">数据迁移失败啦!</string> <string name="migration_fail">数据迁移失败啦!</string>
<string name="pull_down_to_refresh">请下拉刷新!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">停止</string> <string name="notification_action_stop_v2ray">停止</string>
@@ -113,6 +114,8 @@
<string name="server_lab_port_hop">跳跃端口(会覆盖服务器端口)</string> <string name="server_lab_port_hop">跳跃端口(会覆盖服务器端口)</string>
<string name="server_lab_port_hop_interval">端口跳跃间隔(秒)</string> <string name="server_lab_port_hop_interval">端口跳跃间隔(秒)</string>
<string name="server_lab_stream_pinsha256">SHA256证书指纹</string> <string name="server_lab_stream_pinsha256">SHA256证书指纹</string>
<string name="server_lab_bandwidth_down">带宽下行 (单位)</string>
<string name="server_lab_bandwidth_up">带宽上行 (单位)</string>
<string name="server_lab_xhttp_mode">XHTTP 模式</string> <string name="server_lab_xhttp_mode">XHTTP 模式</string>
<string name="server_lab_xhttp_extra">XHTTP Extra 原始 JSON格式 { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra 原始 JSON格式 { XHTTPObject }</string>

View File

@@ -7,6 +7,7 @@
<string name="navigation_drawer_close">關閉導覽匣</string> <string name="navigation_drawer_close">關閉導覽匣</string>
<string name="migration_success">資料遷移成功!</string> <string name="migration_success">資料遷移成功!</string>
<string name="migration_fail">資料遷移失敗!</string> <string name="migration_fail">資料遷移失敗!</string>
<string name="pull_down_to_refresh">請下拉刷新!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">停止</string> <string name="notification_action_stop_v2ray">停止</string>
@@ -113,6 +114,8 @@
<string name="server_lab_port_hop">跳躍連接埠(會覆蓋伺服器連接埠)</string> <string name="server_lab_port_hop">跳躍連接埠(會覆蓋伺服器連接埠)</string>
<string name="server_lab_port_hop_interval">連接埠跳躍間隔(秒)</string> <string name="server_lab_port_hop_interval">連接埠跳躍間隔(秒)</string>
<string name="server_lab_stream_pinsha256">SHA256憑證指紋</string> <string name="server_lab_stream_pinsha256">SHA256憑證指紋</string>
<string name="server_lab_bandwidth_down">頻寬下行 (單位)</string>
<string name="server_lab_bandwidth_up">頻寬上行 (單位)</string>
<string name="server_lab_xhttp_mode">XHTTP 模式</string> <string name="server_lab_xhttp_mode">XHTTP 模式</string>
<string name="server_lab_xhttp_extra">XHTTP Extra 原始 JSON格式 { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra 原始 JSON格式 { XHTTPObject }</string>

View File

@@ -8,6 +8,7 @@
<string name="navigation_drawer_close">Close navigation drawer</string> <string name="navigation_drawer_close">Close navigation drawer</string>
<string name="migration_success">Data migration success!</string> <string name="migration_success">Data migration success!</string>
<string name="migration_fail">Data migration failed!</string> <string name="migration_fail">Data migration failed!</string>
<string name="pull_down_to_refresh">Please pull down to refresh!</string>
<!-- Notifications --> <!-- Notifications -->
<string name="notification_action_stop_v2ray">Stop</string> <string name="notification_action_stop_v2ray">Stop</string>
@@ -119,6 +120,8 @@
<string name="server_lab_port_hop">Port Hopping(will override the port)</string> <string name="server_lab_port_hop">Port Hopping(will override the port)</string>
<string name="server_lab_port_hop_interval">Port Hopping Interval</string> <string name="server_lab_port_hop_interval">Port Hopping Interval</string>
<string name="server_lab_stream_pinsha256">pinSHA256</string> <string name="server_lab_stream_pinsha256">pinSHA256</string>
<string name="server_lab_bandwidth_down">Bandwidth down (units)</string>
<string name="server_lab_bandwidth_up">Bandwidth up (units)</string>
<string name="server_lab_xhttp_mode">XHTTP Mode</string> <string name="server_lab_xhttp_mode">XHTTP Mode</string>
<string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string> <string name="server_lab_xhttp_extra">XHTTP Extra raw JSON, format: { XHTTPObject }</string>

View File

@@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.7.3" agp = "8.8.0"
desugar_jdk_libs = "2.1.4" desugar_jdk_libs = "2.1.4"
gradleLicensePlugin = "0.9.8" gradleLicensePlugin = "0.9.8"
kotlin = "2.1.0" kotlin = "2.1.0"
@@ -9,14 +9,15 @@ junitVersion = "1.2.1"
espressoCore = "3.6.1" espressoCore = "3.6.1"
appcompat = "1.7.0" appcompat = "1.7.0"
material = "1.12.0" material = "1.12.0"
activity = "1.9.3" activity = "1.10.0"
constraintlayout = "2.2.0" constraintlayout = "2.2.0"
mmkvStatic = "1.3.11" mmkvStatic = "1.3.11"
gson = "2.11.0" gson = "2.11.0"
quickieFoss = "1.13.1" quickieFoss = "1.13.1"
rxjava = "3.1.9" rxjava = "3.1.10"
rxandroid = "3.0.2" rxandroid = "3.0.2"
rxpermissions = "0.12" rxpermissions = "0.12"
swiperefreshlayout = "1.1.0"
toastcompat = "1.1.0" toastcompat = "1.1.0"
editorkit = "2.9.0" editorkit = "2.9.0"
core = "3.5.3" core = "3.5.3"
@@ -26,9 +27,10 @@ multidex = "2.0.1"
mockitoMockitoInline = "4.0.0" mockitoMockitoInline = "4.0.0"
flexbox = "3.0.0" flexbox = "3.0.0"
preferenceKtx = "1.2.1" preferenceKtx = "1.2.1"
recyclerview = "1.3.2" recyclerview = "1.4.0"
[libraries] [libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "swiperefreshlayout" }
desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" } desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" }
gradle-license-plugin = { module = "com.jaredsburrows:gradle-license-plugin", version.ref = "gradleLicensePlugin" } gradle-license-plugin = { module = "com.jaredsburrows:gradle-license-plugin", version.ref = "gradleLicensePlugin" }
junit = { group = "junit", name = "junit", version.ref = "junit" } junit = { group = "junit", name = "junit", version.ref = "junit" }
@@ -64,4 +66,3 @@ preference-ktx = { module = "androidx.preference:preference-ktx", version.ref =
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
android-library = { id = "com.android.library", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" }

View File

@@ -1,6 +1,6 @@
#Thu Nov 14 12:42:51 BDT 2024 #Thu Nov 14 12:42:51 BDT 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@@ -14,7 +14,7 @@ for target in "${targets[@]}"; do
echo "Building for ${abi} with ${ndk_target} (${goarch})" 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=" ./app 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
echo "Built libhysteria2.so for ${abi}" echo "Built libhysteria2.so for ${abi}"
done done