remove geoip embed and sideload

we had geoip.metadb and geosite.dat in asserts
This commit is contained in:
wwqgtxx 2024-09-11 14:41:22 +08:00
parent a1d838a98a
commit 262a6b563c
26 changed files with 3 additions and 411 deletions

View File

@ -21,9 +21,6 @@ jobs:
distribution: 'zulu' distribution: 'zulu'
java-version: 17 java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Setup Go - name: Setup Go
uses: actions/setup-go@v5 uses: actions/setup-go@v5
with: with:
@ -37,10 +34,6 @@ jobs:
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: | restore-keys: |
${{ runner.os }}-go- ${{ runner.os }}-go-
- name: Download GeoIP Database
run: |
./gradlew :core:downloadGeoipDatabase
- name: Install update-go-mod-replace - name: Install update-go-mod-replace
run: | run: |

View File

@ -45,45 +45,14 @@ class OverrideSettingsActivity : BaseActivity<OverrideSettingsDesign>() {
withClash { withClash {
clearOverride(Clash.OverrideSlot.Persist) clearOverride(Clash.OverrideSlot.Persist)
} }
service.sideloadGeoip = ""
} }
finish() finish()
} }
} }
OverrideSettingsDesign.Request.EditSideloadGeoip -> {
withContext(Dispatchers.IO) {
val list = querySideloadProviders()
val initial = service.sideloadGeoip
val exist = list.any { info -> info.packageName == initial }
service.sideloadGeoip =
design.requestSelectSideload(if (exist) initial else "", list)
}
}
} }
} }
} }
} }
} }
private fun querySideloadProviders(): List<AppInfo> {
val apps = packageManager.getInstalledPackages(PackageManager.GET_META_DATA)
.filter {
it.applicationInfo.metaData?.containsKey(Metadata.GEOIP_FILE_NAME)
?: false
}
.map { it.toAppInfo(packageManager) }
return listOf(
AppInfo(
packageName = "",
label = getString(R.string.use_built_in),
icon = getDrawableCompat(R.drawable.ic_baseline_work)!!,
installTime = 0,
updateDate = 0,
)
) + apps
}
} }

View File

@ -11,10 +11,6 @@ plugins {
id("golang-android") id("golang-android")
} }
val geoipDatabaseUrl =
"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb"
val geoipInvalidate = Duration.ofDays(7)!!
val geoipOutput = buildDir.resolve("intermediates/golang_blob")
val golangSource = file("src/main/golang/native") val golangSource = file("src/main/golang/native")
golang { golang {
@ -66,52 +62,4 @@ afterEvaluate {
tasks.withType(GolangBuildTask::class.java).forEach { tasks.withType(GolangBuildTask::class.java).forEach {
it.inputs.dir(golangSource) it.inputs.dir(golangSource)
} }
} }
task("downloadGeoipDatabase") {
val databaseFile = geoipOutput.resolve("Country.mmdb")
val moduleFile = geoipOutput.resolve("go.mod")
val sourceFile = geoipOutput.resolve("blob.go")
val moduleContent = """
module "cfa/blob"
""".trimIndent()
val sourceContent = """
package blob
import _ "embed"
//go:embed Country.mmdb
var GeoipDatabase []byte
""".trimIndent()
outputs.dir(geoipOutput)
onlyIf {
System.currentTimeMillis() - databaseFile.lastModified() > geoipInvalidate.toMillis()
}
doLast {
geoipOutput.mkdirs()
moduleFile.writeText(moduleContent)
sourceFile.writeText(sourceContent)
URL(geoipDatabaseUrl).openConnection().getInputStream().use { input ->
FileOutputStream(databaseFile).use { output ->
input.copyTo(output)
}
}
}
}
afterEvaluate {
val downloadTask = tasks["downloadGeoipDatabase"]
tasks.forEach {
if (it.name.startsWith("externalGolangBuild")) {
it.dependsOn(downloadTask)
}
}
}

View File

@ -4,8 +4,6 @@ go 1.20
require cfa v0.0.0 require cfa v0.0.0
require cfa/blob v0.0.0-00010101000000-000000000000 // indirect
require ( require (
github.com/3andne/restls-client-go v0.1.6 // indirect github.com/3andne/restls-client-go v0.1.6 // indirect
github.com/RyuaNerin/go-krypto v1.2.4 // indirect github.com/RyuaNerin/go-krypto v1.2.4 // indirect
@ -115,5 +113,3 @@ replace github.com/sagernet/sing => github.com/metacubex/sing v0.0.0-20240724044
replace cfa => ../../main/golang replace cfa => ../../main/golang
replace github.com/metacubex/mihomo => ./clash replace github.com/metacubex/mihomo => ./clash
replace cfa/blob => ../../../build/intermediates/golang_blob

View File

@ -287,33 +287,6 @@ Java_com_github_kr328_clash_core_bridge_Bridge_nativeClearOverride(JNIEnv *env,
clearOverride(slot); clearOverride(slot);
} }
JNIEXPORT void JNICALL
Java_com_github_kr328_clash_core_bridge_Bridge_nativeInstallSideloadGeoip(JNIEnv *env, jobject thiz,
jbyteArray data) {
TRACE_METHOD();
if (data == NULL) {
installSideloadGeoip(NULL, 0);
return;
}
jbyte *bytes = (*env)->GetByteArrayElements(env, data, NULL);
int size = (*env)->GetArrayLength(env, data);
scoped_string err = installSideloadGeoip(bytes, size);
(*env)->ReleaseByteArrayElements(env, data, bytes, JNI_ABORT);
if (err != NULL) {
(*env)->ThrowNew(
env,
find_class("com/github/kr328/clash/core/bridge/ClashException"),
err
);
}
}
JNIEXPORT jstring JNICALL JNIEXPORT jstring JNICALL
Java_com_github_kr328_clash_core_bridge_Bridge_nativeQueryConfiguration(JNIEnv *env, jobject thiz) { Java_com_github_kr328_clash_core_bridge_Bridge_nativeQueryConfiguration(JNIEnv *env, jobject thiz) {
TRACE_METHOD(); TRACE_METHOD();

View File

@ -5,7 +5,6 @@
<option name="MOVE_ALL_IMPORTS_IN_ONE_DECLARATION" value="true" /> <option name="MOVE_ALL_IMPORTS_IN_ONE_DECLARATION" value="true" />
<option name="MOVE_ALL_STDLIB_IMPORTS_IN_ONE_GROUP" value="true" /> <option name="MOVE_ALL_STDLIB_IMPORTS_IN_ONE_GROUP" value="true" />
<option name="GROUP_STDLIB_IMPORTS" value="true" /> <option name="GROUP_STDLIB_IMPORTS" value="true" />
<option name="GROUP_CURRENT_PROJECT_IMPORTS" value="true" />
</GoCodeStyleSettings> </GoCodeStyleSettings>
</code_scheme> </code_scheme>
</component> </component>

View File

@ -5,7 +5,6 @@ go 1.20
require ( require (
github.com/dlclark/regexp2 v1.11.4 github.com/dlclark/regexp2 v1.11.4
github.com/metacubex/mihomo v1.7.0 github.com/metacubex/mihomo v1.7.0
github.com/oschwald/maxminddb-golang v1.12.0
golang.org/x/sync v0.8.0 golang.org/x/sync v0.8.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )
@ -71,6 +70,7 @@ require (
github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect github.com/oasisprotocol/deoxysii v0.0.0-20220228165953-2091330c22b7 // indirect
github.com/onsi/ginkgo/v2 v2.9.5 // indirect github.com/onsi/ginkgo/v2 v2.9.5 // indirect
github.com/openacid/low v0.1.21 // indirect github.com/openacid/low v0.1.21 // indirect
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/pierrec/lz4/v4 v4.1.14 // indirect github.com/pierrec/lz4/v4 v4.1.14 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/puzpuzpuz/xsync/v3 v3.4.0 // indirect github.com/puzpuzpuz/xsync/v3 v3.4.0 // indirect

View File

@ -4,8 +4,6 @@ import (
"errors" "errors"
"syscall" "syscall"
"cfa/blob"
"github.com/metacubex/mihomo/component/process" "github.com/metacubex/mihomo/component/process"
"github.com/metacubex/mihomo/log" "github.com/metacubex/mihomo/log"
@ -13,14 +11,12 @@ import (
"cfa/native/platform" "cfa/native/platform"
"github.com/metacubex/mihomo/component/dialer" "github.com/metacubex/mihomo/component/dialer"
"github.com/metacubex/mihomo/component/mmdb"
"github.com/metacubex/mihomo/constant" "github.com/metacubex/mihomo/constant"
) )
var errBlocked = errors.New("blocked") var errBlocked = errors.New("blocked")
func Init(home, versionName string, platformVersion int) { func Init(home, versionName string, platformVersion int) {
mmdb.LoadFromBytes(blob.GeoipDatabase)
constant.SetHomeDir(home) constant.SetHomeDir(home)
app.ApplyVersionName(versionName) app.ApplyVersionName(versionName)
app.ApplyPlatformVersion(platformVersion) app.ApplyPlatformVersion(platformVersion)

View File

@ -109,16 +109,3 @@ func updateProvider(completable unsafe.Pointer, pType C.c_string, name C.c_strin
func suspend(suspended C.int) { func suspend(suspended C.int) {
tunnel.Suspend(suspended != 0) tunnel.Suspend(suspended != 0)
} }
//export installSideloadGeoip
func installSideloadGeoip(block unsafe.Pointer, blockSize C.int) *C.char {
if block == nil {
_ = tunnel.InstallSideloadGeoip(nil)
return nil
}
bytes := C.GoBytes(block, blockSize)
return marshalString(tunnel.InstallSideloadGeoip(bytes))
}

View File

@ -1,24 +0,0 @@
package tunnel
import (
"fmt"
"github.com/metacubex/mihomo/component/mmdb"
"github.com/oschwald/maxminddb-golang"
)
func InstallSideloadGeoip(block []byte) error {
if block == nil {
mmdb.InstallOverride(nil)
return nil
}
db, err := maxminddb.FromBytes(block)
if err != nil {
return fmt.Errorf("load sideload geoip mmdb: %s", err.Error())
}
mmdb.InstallOverride(db)
return nil
}

View File

@ -208,10 +208,6 @@ object Clash {
Bridge.nativeClearOverride(slot.ordinal) Bridge.nativeClearOverride(slot.ordinal)
} }
fun installSideloadGeoip(data: ByteArray?) {
Bridge.nativeInstallSideloadGeoip(data)
}
fun queryConfiguration(): UiConfiguration { fun queryConfiguration(): UiConfiguration {
return Json.Default.decodeFromString( return Json.Default.decodeFromString(
UiConfiguration.serializer(), UiConfiguration.serializer(),

View File

@ -46,7 +46,6 @@ object Bridge {
external fun nativeReadOverride(slot: Int): String external fun nativeReadOverride(slot: Int): String
external fun nativeWriteOverride(slot: Int, content: String) external fun nativeWriteOverride(slot: Int, content: String)
external fun nativeClearOverride(slot: Int) external fun nativeClearOverride(slot: Int)
external fun nativeInstallSideloadGeoip(data: ByteArray?)
external fun nativeQueryConfiguration(): String external fun nativeQueryConfiguration(): String
external fun nativeSubscribeLogcat(callback: LogcatInterface) external fun nativeSubscribeLogcat(callback: LogcatInterface)
external fun nativeCoreVersion(): String external fun nativeCoreVersion(): String

View File

@ -5,7 +5,6 @@ import android.view.View
import com.github.kr328.clash.core.model.ConfigurationOverride import com.github.kr328.clash.core.model.ConfigurationOverride
import com.github.kr328.clash.core.model.LogMessage import com.github.kr328.clash.core.model.LogMessage
import com.github.kr328.clash.core.model.TunnelState import com.github.kr328.clash.core.model.TunnelState
import com.github.kr328.clash.design.adapter.SideloadProviderAdapter
import com.github.kr328.clash.design.databinding.DesignSettingsOverideBinding import com.github.kr328.clash.design.databinding.DesignSettingsOverideBinding
import com.github.kr328.clash.design.databinding.DialogPreferenceListBinding import com.github.kr328.clash.design.databinding.DialogPreferenceListBinding
import com.github.kr328.clash.design.dialog.FullScreenDialog import com.github.kr328.clash.design.dialog.FullScreenDialog
@ -23,7 +22,7 @@ class OverrideSettingsDesign(
configuration: ConfigurationOverride configuration: ConfigurationOverride
) : Design<OverrideSettingsDesign.Request>(context) { ) : Design<OverrideSettingsDesign.Request>(context) {
enum class Request { enum class Request {
ResetOverride, EditSideloadGeoip ResetOverride
} }
private val binding = DesignSettingsOverideBinding private val binding = DesignSettingsOverideBinding
@ -52,49 +51,6 @@ class OverrideSettingsDesign(
} }
} }
suspend fun requestSelectSideload(initial: String, apps: List<AppInfo>): String =
withContext(Dispatchers.Main) {
suspendCancellableCoroutine { ctx ->
val binding = DialogPreferenceListBinding
.inflate(context.layoutInflater, context.root, false)
val adapter = SideloadProviderAdapter(context, apps, initial)
val dialog = FullScreenDialog(context)
dialog.setContentView(binding.root)
binding.surface = dialog.surface
binding.titleView.text = context.getString(R.string.sideload_geoip)
binding.newView.visibility = View.INVISIBLE
binding.mainList.applyLinearAdapter(context, adapter)
binding.resetView.setOnClickListener {
ctx.resume("")
dialog.dismiss()
}
binding.cancelView.setOnClickListener {
dialog.dismiss()
}
binding.okView.setOnClickListener {
ctx.resume(adapter.selectedPackageName)
dialog.dismiss()
}
dialog.setOnDismissListener {
if (!ctx.isCompleted)
ctx.resume(initial)
}
dialog.show()
}
}
init { init {
binding.self = this binding.self = this
@ -247,15 +203,6 @@ class OverrideSettingsDesign(
placeholder = R.string.dont_modify, placeholder = R.string.dont_modify,
) )
clickable(
title = R.string.sideload_geoip,
summary = R.string.sideload_geoip_summary
) {
clicked {
requests.trySend(Request.EditSideloadGeoip)
}
}
category(R.string.dns) category(R.string.dns)
val dnsDependencies: MutableList<Preference> = mutableListOf() val dnsDependencies: MutableList<Preference> = mutableListOf()

View File

@ -1,48 +0,0 @@
package com.github.kr328.clash.design.adapter
import android.content.Context
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.github.kr328.clash.design.databinding.AdapterSideloadProviderBinding
import com.github.kr328.clash.design.model.AppInfo
import com.github.kr328.clash.design.util.layoutInflater
import com.github.kr328.clash.design.util.root
class SideloadProviderAdapter(
private val context: Context,
private val apps: List<AppInfo>,
var selectedPackageName: String
) : RecyclerView.Adapter<SideloadProviderAdapter.Holder>() {
class Holder(val binding: AdapterSideloadProviderBinding) :
RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
return Holder(
AdapterSideloadProviderBinding
.inflate(context.layoutInflater, context.root, false)
)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
val current = apps[position]
holder.binding.appInfo = current
holder.binding.selected = selectedPackageName == current.packageName
holder.binding.root.setOnClickListener {
val index = apps.indexOfFirst { it.packageName == selectedPackageName }
selectedPackageName = current.packageName
if (index >= 0)
notifyItemChanged(index)
notifyItemChanged(position)
}
}
override fun getItemCount(): Int {
return apps.size
}
}

View File

@ -119,8 +119,6 @@
<string name="log_level">ログレベル</string> <string name="log_level">ログレベル</string>
<string name="ipv6">IPv6</string> <string name="ipv6">IPv6</string>
<string name="hosts">ホスト</string> <string name="hosts">ホスト</string>
<string name="sideload_geoip">GeoIPを読み込み中</string>
<string name="sideload_geoip_summary">外部のGeoIPデータベース</string>
<string name="_new">新規</string> <string name="_new">新規</string>
<string name="value"></string> <string name="value"></string>
<string name="strategy">ポリシー</string> <string name="strategy">ポリシー</string>

View File

@ -119,8 +119,6 @@
<string name="log_level">로그 레벨</string> <string name="log_level">로그 레벨</string>
<string name="ipv6">IPv6</string> <string name="ipv6">IPv6</string>
<string name="hosts">호스트</string> <string name="hosts">호스트</string>
<string name="sideload_geoip">Sideload GEOIP</string>
<string name="sideload_geoip_summary">외부 GEOIP 데이터베이스</string>
<string name="_new">신규</string> <string name="_new">신규</string>
<string name="value"></string> <string name="value"></string>
<string name="strategy">정책</string> <string name="strategy">정책</string>

View File

@ -145,8 +145,6 @@
<string name="log_level">Уровень логов</string> <string name="log_level">Уровень логов</string>
<string name="ipv6">IPv6</string> <string name="ipv6">IPv6</string>
<string name="hosts">Hosts</string> <string name="hosts">Hosts</string>
<string name="sideload_geoip">Загрузить GeoIP</string>
<string name="sideload_geoip_summary">Внешняя база GeoIP</string>
<string name="_new">Новый</string> <string name="_new">Новый</string>
<string name="value">Значение</string> <string name="value">Значение</string>

View File

@ -175,8 +175,6 @@
<string name="format_fetching_provider">正在下載外部資源 %s</string> <string name="format_fetching_provider">正在下載外部資源 %s</string>
<string name="initializing">正在初始化</string> <string name="initializing">正在初始化</string>
<string name="verifying">正在校驗</string> <string name="verifying">正在校驗</string>
<string name="sideload_geoip">旁加載 GEOIP</string>
<string name="sideload_geoip_summary">外部 GEOIP 數據庫</string>
<string name="force_enable">強制啓用</string> <string name="force_enable">強制啓用</string>
<string name="document">文檔</string> <string name="document">文檔</string>
<string name="clash_wiki">Clash Wiki</string> <string name="clash_wiki">Clash Wiki</string>

View File

@ -175,8 +175,6 @@
<string name="format_fetching_provider">正在下載外部資源 %s</string> <string name="format_fetching_provider">正在下載外部資源 %s</string>
<string name="initializing">正在初始化</string> <string name="initializing">正在初始化</string>
<string name="verifying">正在校驗</string> <string name="verifying">正在校驗</string>
<string name="sideload_geoip">旁載入 GEOIP</string>
<string name="sideload_geoip_summary">外部 GEOIP 資料庫</string>
<string name="force_enable">強制啟用</string> <string name="force_enable">強制啟用</string>
<string name="document">文件</string> <string name="document">文件</string>
<string name="clash_wiki">Clash Wiki</string> <string name="clash_wiki">Clash Wiki</string>

View File

@ -176,8 +176,6 @@
<string name="format_fetching_provider">正在下载外部资源 %s</string> <string name="format_fetching_provider">正在下载外部资源 %s</string>
<string name="initializing">正在初始化</string> <string name="initializing">正在初始化</string>
<string name="verifying">正在校验</string> <string name="verifying">正在校验</string>
<string name="sideload_geoip">旁加载 GEOIP</string>
<string name="sideload_geoip_summary">外部 GEOIP 数据库</string>
<string name="force_enable">强制启用</string> <string name="force_enable">强制启用</string>
<string name="document">文档</string> <string name="document">文档</string>
<string name="clash_wiki">Clash Wiki</string> <string name="clash_wiki">Clash Wiki</string>

View File

@ -149,8 +149,6 @@
<string name="external_controller">External Controller</string> <string name="external_controller">External Controller</string>
<string name="secret">Secret</string> <string name="secret">Secret</string>
<string name="hosts">Hosts</string> <string name="hosts">Hosts</string>
<string name="sideload_geoip">Sideload GEOIP</string>
<string name="sideload_geoip_summary">External GEOIP database</string>
<string name="_new">New</string> <string name="_new">New</string>
<string name="value">Value</string> <string name="value">Value</string>

View File

@ -27,7 +27,6 @@ class ClashService : BaseService() {
val close = install(CloseModule(self)) val close = install(CloseModule(self))
val config = install(ConfigurationModule(self)) val config = install(ConfigurationModule(self))
val network = install(NetworkObserveModule(self)) val network = install(NetworkObserveModule(self))
val sideload = install(SideloadDatabaseModule(self))
if (store.dynamicNotification) if (store.dynamicNotification)
install(DynamicNotificationModule(self)) install(DynamicNotificationModule(self))
@ -49,11 +48,6 @@ class ClashService : BaseService() {
true true
} }
sideload.onEvent {
reason = it.message
true
}
network.onEvent { network.onEvent {
false false
} }

View File

@ -33,7 +33,6 @@ class TunService : VpnService(), CoroutineScope by CoroutineScope(Dispatchers.De
val tun = install(TunModule(self)) val tun = install(TunModule(self))
val config = install(ConfigurationModule(self)) val config = install(ConfigurationModule(self))
val network = install(NetworkObserveModule(self)) val network = install(NetworkObserveModule(self))
val sideload = install(SideloadDatabaseModule(self))
if (store.dynamicNotification) if (store.dynamicNotification)
install(DynamicNotificationModule(self)) install(DynamicNotificationModule(self))
@ -57,11 +56,6 @@ class TunService : VpnService(), CoroutineScope by CoroutineScope(Dispatchers.De
true true
} }
sideload.onEvent {
reason = it.message
true
}
network.onEvent { n -> network.onEvent { n ->
if (Build.VERSION.SDK_INT in 22..28) @TargetApi(22) { if (Build.VERSION.SDK_INT in 22..28) @TargetApi(22) {
setUnderlyingNetworks(n?.let { arrayOf(it) }) setUnderlyingNetworks(n?.let { arrayOf(it) })

View File

@ -1,87 +0,0 @@
package com.github.kr328.clash.service.clash.module
import android.app.Service
import android.content.Intent
import com.github.kr328.clash.common.constants.Intents
import com.github.kr328.clash.common.log.Log
import com.github.kr328.clash.core.Clash
import com.github.kr328.clash.service.sideload.readGeoipDatabaseFrom
import com.github.kr328.clash.service.store.ServiceStore
import com.github.kr328.clash.service.util.packageName
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.selects.select
import java.io.FileNotFoundException
import java.io.IOException
class SideloadDatabaseModule(service: Service) :
Module<SideloadDatabaseModule.LoadException>(service) {
data class LoadException(val message: String)
private val store = ServiceStore(service)
private var current: String = ""
override suspend fun run() {
val packagesChanged = receiveBroadcast(false) {
addAction(Intent.ACTION_PACKAGE_ADDED)
addAction(Intent.ACTION_PACKAGE_REPLACED)
addAction(Intent.ACTION_PACKAGE_FULLY_REMOVED)
addDataScheme("package")
}
val profileChanged = receiveBroadcast(capacity = Channel.CONFLATED) {
addAction(Intents.ACTION_PROFILE_CHANGED)
}
val initial = Channel<Unit>(1).apply { send(Unit) }
while (true) {
val (reload, force) = select<Pair<Boolean, Boolean>> {
packagesChanged.onReceive {
when (it.action) {
Intent.ACTION_PACKAGE_ADDED ->
(it.packageName == store.sideloadGeoip) to true
Intent.ACTION_PACKAGE_REPLACED ->
(it.packageName == current) to true
Intent.ACTION_PACKAGE_FULLY_REMOVED ->
(it.packageName == current) to true
else -> false to false
}
}
profileChanged.onReceive {
true to false
}
initial.onReceive {
true to true
}
}
if (!reload) continue
val pkg = store.sideloadGeoip
try {
if (!force && pkg == current)
continue
current = pkg
if (pkg.isNotBlank()) {
val data = service.readGeoipDatabaseFrom(pkg)
Clash.installSideloadGeoip(data)
if (data != null) {
Log.d("Sideload geoip loaded, pkg = $pkg")
} else {
Log.d("Sideload geoip not found")
}
}
} catch (e: FileNotFoundException) {
return enqueueEvent(LoadException("file $pkg/assets/${e.message} not found"))
} catch (e: IOException) {
return enqueueEvent(LoadException("read data from $pkg: ${e.message}"))
} catch (e: Exception) {
return enqueueEvent(LoadException(e.toString()))
}
}
}
}

View File

@ -1,21 +0,0 @@
package com.github.kr328.clash.service.sideload
import android.content.Context
import android.content.pm.PackageManager
import com.github.kr328.clash.common.constants.Metadata
import com.github.kr328.clash.common.log.Log
import java.io.InputStream
fun Context.readGeoipDatabaseFrom(packageName: String): ByteArray? {
return try {
val appInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA)
val path = appInfo.metaData.getString(Metadata.GEOIP_FILE_NAME) ?: return null
createPackageContext(packageName, 0)
.resources.assets.open(path).use(InputStream::readBytes)
} catch (e: PackageManager.NameNotFoundException) {
Log.w("Sideload geoip: $packageName not found", e)
null
}
}

View File

@ -60,9 +60,4 @@ class ServiceStore(context: Context) {
key = "dynamic_notification", key = "dynamic_notification",
defaultValue = true defaultValue = true
) )
var sideloadGeoip by store.string(
key = "sideload_geoip",
defaultValue = ""
)
} }