From fa5c6db163925f09ab2bdbc154c47ff1fdc95efb Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 9 Dec 2025 20:48:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B8=A6=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E7=BD=AE=E8=8F=9C=E5=8D=95=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- timestamp/build.gradle | 27 +++++++-- timestamp/build.properties | 4 +- .../studio/timestamp/MainActivity.java | 58 +++++++++++++++---- .../src/main/res/drawable/ic_settings.xml | 11 ++++ timestamp/src/main/res/menu/toolbar_main.xml | 12 ++++ 5 files changed, 96 insertions(+), 16 deletions(-) create mode 100644 timestamp/src/main/res/drawable/ic_settings.xml create mode 100644 timestamp/src/main/res/menu/toolbar_main.xml diff --git a/timestamp/build.gradle b/timestamp/build.gradle index 2b59205..f806f31 100644 --- a/timestamp/build.gradle +++ b/timestamp/build.gradle @@ -18,13 +18,17 @@ def genVersionName(def versionName){ } android { - compileSdkVersion 32 - buildToolsVersion "32.0.0" + + // 1. compileSdkVersion:必须 ≥ targetSdkVersion,建议直接等于 targetSdkVersion(30) + compileSdkVersion 30 + + // 2. buildToolsVersion:需匹配 compileSdkVersion,建议使用 30.x.x 最新稳定版(无需高于 compileSdkVersion) + buildToolsVersion "30.0.3" // 这是 30 对应的最新稳定版,避免使用 beta 版 defaultConfig { applicationId "cc.winboll.studio.timestamp" - minSdkVersion 24 - targetSdkVersion 29 + minSdkVersion 23 + targetSdkVersion 30 versionCode 1 // versionName 更新后需要手动设置 // .winboll/winbollBuildProps.properties 文件的 stageCount=0 @@ -34,9 +38,24 @@ android { versionName = genVersionName("${versionName}") } } + + // 米盟 SDK + packagingOptions { + doNotStrip "*/*/libmimo_1011.so" + } } dependencies { + + // 米盟 + api 'com.miui.zeus:mimo-ad-sdk:5.3.+'//请使用最新版sdk + //注意:以下5个库必须要引入 + //api 'androidx.appcompat:appcompat:1.4.1' + api 'androidx.recyclerview:recyclerview:1.0.0' + api 'com.google.code.gson:gson:2.8.5' + api 'com.github.bumptech.glide:glide:4.9.0' + //annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0' + // SSH api 'com.jcraft:jsch:0.1.55' // Html 解析 diff --git a/timestamp/build.properties b/timestamp/build.properties index 48433fa..7384a39 100644 --- a/timestamp/build.properties +++ b/timestamp/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue Dec 09 12:14:13 GMT 2025 +#Tue Dec 09 12:47:32 GMT 2025 stageCount=0 libraryProject= baseVersion=15.12 publishVersion=15.12.0 -buildCount=3 +buildCount=9 baseBetaVersion=15.12.1 diff --git a/timestamp/src/main/java/cc/winboll/studio/timestamp/MainActivity.java b/timestamp/src/main/java/cc/winboll/studio/timestamp/MainActivity.java index aface49..03833df 100644 --- a/timestamp/src/main/java/cc/winboll/studio/timestamp/MainActivity.java +++ b/timestamp/src/main/java/cc/winboll/studio/timestamp/MainActivity.java @@ -1,6 +1,7 @@ package cc.winboll.studio.timestamp; import android.os.Bundle; +import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.Switch; @@ -10,12 +11,12 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogView; -import cc.winboll.studio.libappbase.ToastUtils; import cc.winboll.studio.timestamp.MainService; import cc.winboll.studio.timestamp.R; import cc.winboll.studio.timestamp.utils.AppConfigsUtil; import cc.winboll.studio.timestamp.utils.ClipboardUtil; import cc.winboll.studio.timestamp.utils.TimeStampUtil; +import java.lang.reflect.Method; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; @@ -29,7 +30,7 @@ public class MainActivity extends AppCompatActivity { TextView mtvTimeStampFormatString; EditText metTimeStampCopyFormatString; TextView mtvTimeStampCopyFormatString; - + LogView mLogView; Switch mswEnableMainService; @@ -40,17 +41,17 @@ public class MainActivity extends AppCompatActivity { Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); - + metTimeStampFormatString = findViewById(R.id.et_timestampformatstring); mtvTimeStampFormatString = findViewById(R.id.tv_timestampformatstring); metTimeStampCopyFormatString = findViewById(R.id.et_timestampcopyformatstring); mtvTimeStampCopyFormatString = findViewById(R.id.tv_timestampcopyformatstring); - + metTimeStampFormatString.setText(AppConfigsUtil.getInstance(this).getAppConfigsModel().getTimeStampFormatString()); showPreViewResult(metTimeStampFormatString, mtvTimeStampFormatString); metTimeStampCopyFormatString.setText(AppConfigsUtil.getInstance(this).getAppConfigsModel().getTimeStampCopyFormatString()); showPreViewResult(metTimeStampCopyFormatString, mtvTimeStampCopyFormatString); - + mswEnableMainService = findViewById(R.id.activitymainSwitch1); mswEnableMainService.setChecked(AppConfigsUtil.getInstance(this).loadAppConfigs().isEnableService()); @@ -67,19 +68,56 @@ public class MainActivity extends AppCompatActivity { mLogView.start(); } + // 1. 反射核心方法:强制显示菜单图标 + private void forceShowMenuIcons(Menu menu) { + if (menu == null) { + return; // 避免空指针(低版本兼容) + } + try { + // 1.1 获取系统 MenuBuilder 类(隐藏类,需通过反射访问) + Class menuBuilderClass = Class.forName("com.android.internal.view.menu.MenuBuilder"); + // 1.2 获取 setOptionalIconsVisible 方法(参数为 boolean,控制图标显示) + Method setIconsVisibleMethod = menuBuilderClass.getDeclaredMethod( + "setOptionalIconsVisible", boolean.class + ); + // 1.3 开放私有方法访问权限(关键:系统方法默认是 private) + setIconsVisibleMethod.setAccessible(true); + // 1.4 调用方法:传入 menu 对象 + true(显示图标) + setIconsVisibleMethod.invoke(menu, true); + } catch (Exception e) { + // 捕获反射异常(避免低版本系统类名/方法名变更导致崩溃) + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + //e.printStackTrace(); + } + } + + // 2. 加载菜单(正常加载你的 menu.xml) + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_main, menu); // 替换为你的菜单文件名 + return true; + } + + // 3. 关键:在菜单打开时触发反射(确保每次打开菜单都生效) + @Override + public boolean onMenuOpened(int featureId, Menu menu) { + forceShowMenuIcons(menu); // 调用反射方法显示图标 + return super.onMenuOpened(featureId, menu); + } + public void onSetMainServiceStatus(View view) { MainService.setMainServiceStatus(this, mswEnableMainService.isChecked()); } public void onSaveFormatString(View view) { - if(showPreViewResult(metTimeStampFormatString, mtvTimeStampFormatString)) { + if (showPreViewResult(metTimeStampFormatString, mtvTimeStampFormatString)) { AppConfigsUtil.getInstance(this).getAppConfigsModel().setTimeStampFormatString(metTimeStampFormatString.getText().toString()); AppConfigsUtil.getInstance(this).saveAppConfigs(); } } public void onSaveCopyFormatString(View view) { - if(showPreViewResult(metTimeStampCopyFormatString, mtvTimeStampCopyFormatString)) { + if (showPreViewResult(metTimeStampCopyFormatString, mtvTimeStampCopyFormatString)) { AppConfigsUtil.getInstance(this).getAppConfigsModel().setTimeStampCopyFormatString(metTimeStampCopyFormatString.getText().toString()); AppConfigsUtil.getInstance(this).saveAppConfigs(); } @@ -100,20 +138,20 @@ public class MainActivity extends AppCompatActivity { } return false; } - + public void onTimeStamp(View view) { // 在这里编写按钮点击后要执行的代码 TimeStampUtil.getInstance(this).genTimeStamp(); String formattedDateTime = TimeStampUtil.getInstance(this).getTimeStampCopyString(); ClipboardUtil.copyTextToClipboard(this, formattedDateTime); - + // 更新时间戳文本框显示内容 EditText etTimeStamp = findViewById(R.id.et_timestamp); etTimeStamp.setText(formattedDateTime); // 输出一个提示音 TimeStampUtil.getInstance(this).playNotifyMusic(this); - + // 比如显示一个 Toast Toast.makeText(this, "时间戳:\n" + TimeStampUtil.getInstance(this).getTimeStampCopyString() + "\n已拷贝到剪贴板。", Toast.LENGTH_SHORT).show(); MainService.updateCopiedTimeStamp(); diff --git a/timestamp/src/main/res/drawable/ic_settings.xml b/timestamp/src/main/res/drawable/ic_settings.xml new file mode 100644 index 0000000..c5510b2 --- /dev/null +++ b/timestamp/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/timestamp/src/main/res/menu/toolbar_main.xml b/timestamp/src/main/res/menu/toolbar_main.xml new file mode 100644 index 0000000..6594f9e --- /dev/null +++ b/timestamp/src/main/res/menu/toolbar_main.xml @@ -0,0 +1,12 @@ + + + + + +