启动图,签名更换
@@ -1,4 +1,4 @@
|
|||||||
# 91Dj
|
# huangguomanju
|
||||||
|
|
||||||
A new Flutter project. 3.16.8
|
A new Flutter project. 3.16.8
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 170 KiB |
|
Before Width: | Height: | Size: 448 KiB After Width: | Height: | Size: 303 KiB |
|
Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 838 KiB |
@@ -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) {
|
||||||
|
|||||||
@@ -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>(
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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 "";
|
||||||
}
|
}
|
||||||
|
|||||||