启动图,签名更换

This commit is contained in:
谢宇宁
2026-10-08 20:32:46 +07:00
parent 5064de7399
commit 36f57898de
12 changed files with 35 additions and 27 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# 91Dj # huangguomanju
A new Flutter project. 3.16.8 A new Flutter project. 3.16.8
+12 -9
View File
@@ -7,9 +7,12 @@ plugins {
apply plugin: 'top.niunaijun.blackobfuscator' apply plugin: 'top.niunaijun.blackobfuscator'
apply plugin: 'walle' apply plugin: 'walle'
def bundledReleaseKeystore = file('../keystore/nut.jks') // 本产品独立签名:jks 与密码放在 android/key.properties(已 gitignore,勿提交),与其他产品不共用
def legacyBundledReleaseKeystore = file('../keystore/nut.jks.old') def keystoreProperties = new Properties()
def resolvedReleaseKeystore = bundledReleaseKeystore.exists() ? bundledReleaseKeystore : legacyBundledReleaseKeystore def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystorePropertiesFile.withInputStream { keystoreProperties.load(it) }
}
android { android {
namespace "com.xvproject" namespace "com.xvproject"
@@ -31,7 +34,7 @@ android {
} }
defaultConfig { defaultConfig {
applicationId "com.jydj.tzzoer" applicationId "com.hgmj.manju"
minSdk = 24 minSdk = 24
targetSdk = 36 targetSdk = 36
versionCode = 1 versionCode = 1
@@ -40,11 +43,11 @@ android {
signingConfigs { signingConfigs {
release { release {
storeFile resolvedReleaseKeystore storeFile keystoreProperties['storeFile'] ? rootProject.file(keystoreProperties['storeFile']) : null
storePassword 'jiahua123456' storePassword keystoreProperties['storePassword']
storeType 'jks' storeType 'jks'
keyAlias 'nut' keyAlias keystoreProperties['keyAlias']
keyPassword 'jiahua123456' keyPassword keystoreProperties['keyPassword']
v1SigningEnabled false v1SigningEnabled false
v2SigningEnabled true v2SigningEnabled true
} }
@@ -81,7 +84,7 @@ android {
println "outputFileDir= ${outputFileDir}" println "outputFileDir= ${outputFileDir}"
def abi = filters.find { it.filterType.toString() == "ABI" }?.identifier def abi = filters.find { it.filterType.toString() == "ABI" }?.identifier
def abiSuffix = (variant.outputs.size() > 1 && abi) ? "_${abi}" : "" def abiSuffix = (variant.outputs.size() > 1 && abi) ? "_${abi}" : ""
def path = "91dj" + '_release' + "_" + variant.versionName + abiSuffix + "_" + createTime + ".apk" def path = "hgmj" + '_release' + "_" + variant.versionName + abiSuffix + "_" + createTime + ".apk"
println("path= " + path) println("path= " + path)
outputFileName = path outputFileName = path
} }
Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

After

Width:  |  Height:  |  Size: 303 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 838 KiB

+1 -1
View File
@@ -20,7 +20,7 @@ class LineErrorDialog extends StatelessWidget {
const LineErrorDialog({super.key, this.callback}); const LineErrorDialog({super.key, this.callback});
String get officialUrl => '91dj1.net'; String get officialUrl => 'huangguomj.net';
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
+2 -2
View File
@@ -31,8 +31,8 @@ class Address {
/// 图片加载地址 /// 图片加载地址
static String? baseImagePath; static String? baseImagePath;
/// 落地页地址 默认地址 /// 落地页地址(永久域名),后台下发 GUIDE 时覆盖
static String groundUrl = ''; static String groundUrl = 'https://huangguomj.net';
/// 备用落地页地址 默认地址 /// 备用落地页地址 默认地址
static String backUpURl = ''; static String backUpURl = '';
/// tg群里地址 默认地址 /// tg群里地址 默认地址
@@ -17,7 +17,8 @@ class AcgGameRecommendPage extends StatefulWidget {
State<AcgGameRecommendPage> createState() => _AcgGameRecommendPageState(); State<AcgGameRecommendPage> createState() => _AcgGameRecommendPageState();
} }
class _AcgGameRecommendPageState extends State<AcgGameRecommendPage> with UniqueTagMixin { class _AcgGameRecommendPageState extends State<AcgGameRecommendPage>
with UniqueTagMixin {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GetBuilder<AcgGameRecommendLogic>( return GetBuilder<AcgGameRecommendLogic>(
-5
View File
@@ -21,10 +21,8 @@ import '../web_page/h5_page.dart';
import 'collec_history_buy/col_his_buy_page.dart'; import 'collec_history_buy/col_his_buy_page.dart';
import 'identity/mine_identity_page.dart'; import 'identity/mine_identity_page.dart';
import 'message/message_center_page.dart'; import 'message/message_center_page.dart';
import 'mine_drive/mine_drive_page.dart';
import 'mine_following/mine_following_view.dart'; import 'mine_following/mine_following_view.dart';
import 'mine_post/mine_publish_main_page.dart'; import 'mine_post/mine_publish_main_page.dart';
import 'mine_setting/mine_code_page.dart';
import 'mine_setting/mine_password_logic.dart'; import 'mine_setting/mine_password_logic.dart';
import 'mine_setting/mine_password_page.dart'; import 'mine_setting/mine_password_page.dart';
import 'mine_setting/mine_setting_page.dart'; import 'mine_setting/mine_setting_page.dart';
@@ -48,13 +46,10 @@ class MineMainLogic extends GetxController with GetTickerProviderStateMixin {
/// 常用功能: (标题, 图标, 点击事件) /// 常用功能: (标题, 图标, 点击事件)
List<(String, String, void Function())> get commonlyUsedFunction => [ List<(String, String, void Function())> get commonlyUsedFunction => [
("创作中心", 'mine_menu_1.png'.mineImgPath, () => Get.to(MinePublishPostPage(), preventDuplicates: false)),
("意见反馈", 'mine_menu_2.png'.mineImgPath, () => Get.to(() => const MineFeedbackPage())), ("意见反馈", 'mine_menu_2.png'.mineImgPath, () => Get.to(() => const MineFeedbackPage())),
("我的下载", 'mine_follow.png'.mineImgPath, () => Get.to(() => VideoCachePage())), ("我的下载", 'mine_follow.png'.mineImgPath, () => Get.to(() => VideoCachePage())),
("我的关注", 'mine_offical.png'.mineImgPath, () => Get.to(() => MineFollowingPage())), ("我的关注", 'mine_offical.png'.mineImgPath, () => Get.to(() => MineFollowingPage())),
("分享邀请", 'mine_menu_5.png'.mineImgPath, () => Get.to(() => MineSharePage())), ("分享邀请", 'mine_menu_5.png'.mineImgPath, () => Get.to(() => MineSharePage())),
("领取兑换", 'mine_menu_6.png'.mineImgPath, () => Get.to(() => MineExchangeCodePage(type: 1))),
("官方社群", 'mine_menu_7.png'.mineImgPath, () => Get.to(() => MineDrivePage())),
("应用推荐", 'mine_menu_8.png'.mineImgPath, () => Get.to(() => const WelfareHomePage(index: 1), preventDuplicates: false)), ("应用推荐", 'mine_menu_8.png'.mineImgPath, () => Get.to(() => const WelfareHomePage(index: 1), preventDuplicates: false)),
("账号凭证", 'mine_menu_9.png'.mineImgPath, () => Get.dialog(MineAccountIdentityPage())), ("账号凭证", 'mine_menu_9.png'.mineImgPath, () => Get.dialog(MineAccountIdentityPage())),
("锁屏密码", 'mine_menu_10.png'.mineImgPath, _toggleLockPassword), ("锁屏密码", 'mine_menu_10.png'.mineImgPath, _toggleLockPassword),
+17 -8
View File
@@ -82,7 +82,8 @@ class DeviceInfoService {
/// note_this:不要修改这个值 /// note_this:不要修改这个值
static const iosBundleId = "yinse_opera"; static const iosBundleId = "yinse_opera";
static const naticeChannel = 'com.yinse/device'; //原生通道(设备/视频/编解码信息) static const naticeChannel = 'com.yinse/device'; //原生通道(设备/视频/编解码信息)
static const requestChannel = 'com.yinse/request'; //原生系统桥(现只剩换启动图标 changeIcon) static const requestChannel =
'com.yinse/request'; //原生系统桥(现只剩换启动图标 changeIcon)
/// 外部调用入口 /// 外部调用入口
static Future<void> init() async { static Future<void> init() async {
@@ -122,7 +123,9 @@ class DeviceInfoService {
/// 拼装 UA。[deviceId] 可覆盖默认 deviceId /// 拼装 UA。[deviceId] 可覆盖默认 deviceId
static String genUserAgent({String? deviceId}) { static String genUserAgent({String? deviceId}) {
final Map<String, String?> params = { final Map<String, String?> params = {
"DevID": (deviceId == null || deviceId.isEmpty) ? DeviceInfoService.deviceId : deviceId, "DevID": (deviceId == null || deviceId.isEmpty)
? DeviceInfoService.deviceId
: deviceId,
"DevType": DeviceInfoService.devType, "DevType": DeviceInfoService.devType,
"SysType": Platform.operatingSystem, "SysType": Platform.operatingSystem,
"Ver": Config.innerVersion, "Ver": Config.innerVersion,
@@ -133,7 +136,8 @@ class DeviceInfoService {
'device_model': DeviceInfoService.model, 'device_model': DeviceInfoService.model,
}; };
params.removeWhere((key, value) => value == null || value.isEmpty); params.removeWhere((key, value) => value == null || value.isEmpty);
final ua = Uri.encodeComponent(params.entries.map((e) => "${e.key}=${e.value}").join(";")); final ua = Uri.encodeComponent(
params.entries.map((e) => "${e.key}=${e.value}").join(";"));
return ua; return ua;
} }
@@ -147,12 +151,14 @@ class DeviceInfoService {
return oldUa; return oldUa;
} }
final newUa = genUserAgent(deviceId: deviceId); final newUa = genUserAgent(deviceId: deviceId);
if (TextUtil.isNotEmpty(newUa)) lightKV.setString(StoreKeys.UA_CACHE, newUa); if (TextUtil.isNotEmpty(newUa))
lightKV.setString(StoreKeys.UA_CACHE, newUa);
return newUa; return newUa;
} }
/// 清除 UA 缓存 /// 清除 UA 缓存
static Future clearCachedUserAgent() => lightKV.setString(StoreKeys.UA_CACHE, null); static Future clearCachedUserAgent() =>
lightKV.setString(StoreKeys.UA_CACHE, null);
/// 从剪切板 json 里取推广 tid,取不到返回空串 /// 从剪切板 json 里取推广 tid,取不到返回空串
static Future<String> fetchTraceId() async { static Future<String> fetchTraceId() async {
@@ -223,7 +229,8 @@ class DeviceInfoService {
} }
/// Android 回写 SP + 文件 /// Android 回写 SP + 文件
static Future<String> _persistAndroid(SharedPreferences prefs, String id) async { static Future<String> _persistAndroid(
SharedPreferences prefs, String id) async {
await prefs.setString(StoreKeys.DEVICE_ID, id); await prefs.setString(StoreKeys.DEVICE_ID, id);
await _writeIdFile(id); await _writeIdFile(id);
return id; return id;
@@ -257,7 +264,7 @@ class DeviceInfoService {
} }
if (_isInvalidId(raw)) raw = const Uuid().v4(); if (_isInvalidId(raw)) raw = const Uuid().v4();
// 业务规则:91jd_ 前缀,去空格,限制 50 字符(日志系统约束) // 业务规则:91jd_ 前缀,去空格,限制 50 字符(日志系统约束)
return '91dj_${raw.replaceAll(' ', '')}'.limit(50); return 'hgmj_${raw.replaceAll(' ', '')}'.limit(50);
} }
/// 脏值检测:空 / 太短 / 全 0 / 已知脏值 /// 脏值检测:空 / 太短 / 全 0 / 已知脏值
@@ -306,7 +313,9 @@ class DeviceInfoService {
static Future<String> getChannel() async { static Future<String> getChannel() async {
if (!Platform.isAndroid) return ""; if (!Platform.isAndroid) return "";
try { try {
return await const MethodChannel(naticeChannel).invokeMethod("getChannel") ?? ""; return await const MethodChannel(naticeChannel)
.invokeMethod("getChannel") ??
"";
} on PlatformException { } on PlatformException {
return ""; return "";
} }