启动图,签名更换

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
+12 -9
View File
@@ -7,9 +7,12 @@ plugins {
apply plugin: 'top.niunaijun.blackobfuscator'
apply plugin: 'walle'
def bundledReleaseKeystore = file('../keystore/nut.jks')
def legacyBundledReleaseKeystore = file('../keystore/nut.jks.old')
def resolvedReleaseKeystore = bundledReleaseKeystore.exists() ? bundledReleaseKeystore : legacyBundledReleaseKeystore
// 本产品独立签名:jks 与密码放在 android/key.properties(已 gitignore,勿提交),与其他产品不共用
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystorePropertiesFile.withInputStream { keystoreProperties.load(it) }
}
android {
namespace "com.xvproject"
@@ -31,7 +34,7 @@ android {
}
defaultConfig {
applicationId "com.jydj.tzzoer"
applicationId "com.hgmj.manju"
minSdk = 24
targetSdk = 36
versionCode = 1
@@ -40,11 +43,11 @@ android {
signingConfigs {
release {
storeFile resolvedReleaseKeystore
storePassword 'jiahua123456'
storeFile keystoreProperties['storeFile'] ? rootProject.file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
storeType 'jks'
keyAlias 'nut'
keyPassword 'jiahua123456'
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
v1SigningEnabled false
v2SigningEnabled true
}
@@ -81,7 +84,7 @@ android {
println "outputFileDir= ${outputFileDir}"
def abi = filters.find { it.filterType.toString() == "ABI" }?.identifier
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)
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});
String get officialUrl => '91dj1.net';
String get officialUrl => 'huangguomj.net';
@override
Widget build(BuildContext context) {
+2 -2
View File
@@ -31,8 +31,8 @@ class Address {
/// 图片加载地址
static String? baseImagePath;
/// 落地页地址 默认地址
static String groundUrl = '';
/// 落地页地址(永久域名),后台下发 GUIDE 时覆盖
static String groundUrl = 'https://huangguomj.net';
/// 备用落地页地址 默认地址
static String backUpURl = '';
/// tg群里地址 默认地址
@@ -17,7 +17,8 @@ class AcgGameRecommendPage extends StatefulWidget {
State<AcgGameRecommendPage> createState() => _AcgGameRecommendPageState();
}
class _AcgGameRecommendPageState extends State<AcgGameRecommendPage> with UniqueTagMixin {
class _AcgGameRecommendPageState extends State<AcgGameRecommendPage>
with UniqueTagMixin {
@override
Widget build(BuildContext context) {
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 'identity/mine_identity_page.dart';
import 'message/message_center_page.dart';
import 'mine_drive/mine_drive_page.dart';
import 'mine_following/mine_following_view.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_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 => [
("创作中心", 'mine_menu_1.png'.mineImgPath, () => Get.to(MinePublishPostPage(), preventDuplicates: false)),
("意见反馈", 'mine_menu_2.png'.mineImgPath, () => Get.to(() => const MineFeedbackPage())),
("我的下载", 'mine_follow.png'.mineImgPath, () => Get.to(() => VideoCachePage())),
("我的关注", 'mine_offical.png'.mineImgPath, () => Get.to(() => MineFollowingPage())),
("分享邀请", '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_9.png'.mineImgPath, () => Get.dialog(MineAccountIdentityPage())),
("锁屏密码", 'mine_menu_10.png'.mineImgPath, _toggleLockPassword),
+17 -8
View File
@@ -82,7 +82,8 @@ class DeviceInfoService {
/// note_this:不要修改这个值
static const iosBundleId = "yinse_opera";
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 {
@@ -122,7 +123,9 @@ class DeviceInfoService {
/// 拼装 UA。[deviceId] 可覆盖默认 deviceId
static String genUserAgent({String? deviceId}) {
final Map<String, String?> params = {
"DevID": (deviceId == null || deviceId.isEmpty) ? DeviceInfoService.deviceId : deviceId,
"DevID": (deviceId == null || deviceId.isEmpty)
? DeviceInfoService.deviceId
: deviceId,
"DevType": DeviceInfoService.devType,
"SysType": Platform.operatingSystem,
"Ver": Config.innerVersion,
@@ -133,7 +136,8 @@ class DeviceInfoService {
'device_model': DeviceInfoService.model,
};
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;
}
@@ -147,12 +151,14 @@ class DeviceInfoService {
return oldUa;
}
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;
}
/// 清除 UA 缓存
static Future clearCachedUserAgent() => lightKV.setString(StoreKeys.UA_CACHE, null);
static Future clearCachedUserAgent() =>
lightKV.setString(StoreKeys.UA_CACHE, null);
/// 从剪切板 json 里取推广 tid,取不到返回空串
static Future<String> fetchTraceId() async {
@@ -223,7 +229,8 @@ class DeviceInfoService {
}
/// 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 _writeIdFile(id);
return id;
@@ -257,7 +264,7 @@ class DeviceInfoService {
}
if (_isInvalidId(raw)) raw = const Uuid().v4();
// 业务规则:91jd_ 前缀,去空格,限制 50 字符(日志系统约束)
return '91dj_${raw.replaceAll(' ', '')}'.limit(50);
return 'hgmj_${raw.replaceAll(' ', '')}'.limit(50);
}
/// 脏值检测:空 / 太短 / 全 0 / 已知脏值
@@ -306,7 +313,9 @@ class DeviceInfoService {
static Future<String> getChannel() async {
if (!Platform.isAndroid) return "";
try {
return await const MethodChannel(naticeChannel).invokeMethod("getChannel") ?? "";
return await const MethodChannel(naticeChannel)
.invokeMethod("getChannel") ??
"";
} on PlatformException {
return "";
}