删除打包后带入的本地目录和切换图标功能

This commit is contained in:
谢宇宁
2026-11-09 20:29:13 +07:00
parent b29916a6bb
commit f39c8eef17
45 changed files with 116 additions and 445 deletions
+1 -251
View File
@@ -1,6 +1,6 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.xvproject">
package="com.hgdj.app">
<!-- release 包只用 main manifest,INTERNET 必须在这里声明;
否则 release 无网络权限,启动选线 host lookup errno=7,弹"线路检测失败" -->
@@ -36,256 +36,6 @@
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity-alias
android:name=".lld"
android:targetActivity=".MainActivity"
android:label="黄果短剧"
android:enabled="false"
android:icon="@mipmap/ic_launcher"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".aiyinyue"
android:targetActivity=".MainActivity"
android:label="爱音乐"
android:enabled="false"
android:icon="@mipmap/icon_1"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".aiyuedu"
android:targetActivity=".MainActivity"
android:label="爱阅读"
android:enabled="false"
android:icon="@mipmap/icon_2"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".alipay"
android:targetActivity=".MainActivity"
android:label="支付宝"
android:enabled="false"
android:icon="@mipmap/icon_3"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".bilibili"
android:targetActivity=".MainActivity"
android:label="哔哩哔哩"
android:enabled="false"
android:icon="@mipmap/icon_4"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".binggandazhuozhan"
android:targetActivity=".MainActivity"
android:label="金铲铲之战"
android:enabled="false"
android:icon="@mipmap/icon_5"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".meisijiejian"
android:targetActivity=".MainActivity"
android:label="美食借鉴"
android:enabled="false"
android:icon="@mipmap/icon_6"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".myworld"
android:targetActivity=".MainActivity"
android:label="我的世界"
android:enabled="false"
android:icon="@mipmap/icon_7"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".shenxuanzhizhan"
android:targetActivity=".MainActivity"
android:label="神选之战"
android:enabled="false"
android:icon="@mipmap/icon_8"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".shuixinwuxian"
android:targetActivity=".MainActivity"
android:label="随心无线"
android:enabled="false"
android:icon="@mipmap/icon_9"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".texuanxiaoshuo"
android:targetActivity=".MainActivity"
android:label="特轩小说"
android:enabled="false"
android:icon="@mipmap/icon_10"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".tiantianmajiang"
android:targetActivity=".MainActivity"
android:label="天天麻将"
android:enabled="false"
android:icon="@mipmap/icon_11"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".tuyou"
android:targetActivity=".MainActivity"
android:label="途游"
android:enabled="false"
android:icon="@mipmap/icon_12"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".weichat"
android:targetActivity=".MainActivity"
android:label="微信"
android:enabled="false"
android:icon="@mipmap/icon_13"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".wendao"
android:targetActivity=".MainActivity"
android:label="问道"
android:enabled="false"
android:icon="@mipmap/icon_14"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".yinyutusujiao"
android:targetActivity=".MainActivity"
android:label="英语图书角"
android:enabled="false"
android:icon="@mipmap/icon_15"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".icon_16"
android:targetActivity=".MainActivity"
android:label="91PO黄果短剧RN"
android:enabled="false"
android:icon="@mipmap/icon_16"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".icon_17"
android:targetActivity=".MainActivity"
android:label="黄果短剧"
android:enabled="false"
android:icon="@mipmap/icon_17"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<activity-alias
android:name=".icon_18"
android:targetActivity=".MainActivity"
android:label="黄果短剧"
android:enabled="false"
android:icon="@mipmap/icon_18"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity-alias>
<provider
android:name="androidx.core.content.FileProvider"
@@ -1,4 +1,4 @@
package com.xvproject
package com.hgdj.app
import io.flutter.app.FlutterApplication
@@ -0,0 +1,13 @@
package com.hgdj.app
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.JPNativePlugin
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
JPNativePlugin.registerWith(this, flutterEngine)
}
}
@@ -1,77 +0,0 @@
package com.xvproject
import android.annotation.SuppressLint
import android.app.ActivityManager
import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.JPNativePlugin
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
JPNativePlugin.registerWith(this, flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
.setMethodCallHandler { call, result ->
when (call.method) {
METHOD_CHANGE_ICON -> {
val index = call.argument<Int>(ARG_ICON_INDEX) ?: -1
ICON_ALIASES.getOrNull(index)?.let { switchIcon("$ALIAS_PACKAGE.$it") }
result.success(true)
}
// 不回 result 的话 Dart 那边的 Future 永远不完成
else -> result.notImplemented()
}
}
}
/// 切换启动图标:禁用当前入口 + 启用目标 alias,再杀掉桌面进程让图标立刻刷新
private fun switchIcon(alias: String) {
val pm = packageManager
pm.setComponentEnabledSetting(
componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
)
pm.setComponentEnabledSetting(
ComponentName(this, alias),
PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
)
restartLauncher(pm)
}
/// 杀掉桌面进程,强制它重读图标
@SuppressLint("ServiceCast")
private fun restartLauncher(pm: PackageManager) {
val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager
val intent = Intent(Intent.ACTION_MAIN)
.addCategory(Intent.CATEGORY_HOME)
.addCategory(Intent.CATEGORY_DEFAULT)
for (info in pm.queryIntentActivities(intent, 0)) {
am.killBackgroundProcesses(info.activityInfo?.packageName ?: continue)
}
}
companion object {
//这个跟flutter的通道名称保持一致
private const val CHANNEL = "com.yinse/request"
private const val METHOD_CHANGE_ICON = "changeIcon"
private const val ARG_ICON_INDEX = "iconIndex"
/// 图标 alias 所在包名:AndroidManifest 里 activity-alias 写的是相对名(manifest package=com.xvproject),
/// 与 applicationId 不同,不能用 packageName 拼
private const val ALIAS_PACKAGE = "com.xvproject"
/// 下标即 Flutter 传来的 iconIndex,顺序必须与 manifest 里 activity-alias 的声明顺序一致
private val ICON_ALIASES = listOf(
"lld", "aiyinyue", "aiyuedu", "alipay", "bilibili", "binggandazhuozhan",
"meisijiejian", "myworld", "shenxuanzhizhan", "shuixinwuxian", "texuanxiaoshuo",
"tiantianmajiang", "tuyou", "weichat", "wendao", "yinyutusujiao",
"icon_16", "icon_17", "icon_18", //清明 / 端午 / 劳动
)
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB