From b1f9b74e28f15bfa1a0b87a6cb5fffa23d523f63 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Tue, 11 Feb 2025 00:27:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BA=90=E7=A0=81=E9=87=8D=E6=9E=84=E6=95=B4?= =?UTF-8?q?=E7=90=86=EF=BC=8C=E7=B2=BE=E7=AE=80=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appbase/build.properties | 4 +- .../java/cc/winboll/studio/appbase/App.java | 15 +- libappbase/build.properties | 4 +- libappbase/src/main/AndroidManifest.xml | 22 +- .../studio/libappbase/CrashHandler.java | 193 +----------------- .../studio/libappbase/GlobalApplication.java | 65 ++---- .../libappbase/GlobalCrashActivity.java | 132 ++++++++++++ 7 files changed, 183 insertions(+), 252 deletions(-) create mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java diff --git a/appbase/build.properties b/appbase/build.properties index bc34301..3bf4b7b 100644 --- a/appbase/build.properties +++ b/appbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Feb 09 11:04:30 GMT 2025 +#Mon Feb 10 16:26:33 GMT 2025 stageCount=4 libraryProject=libappbase baseVersion=1.2 publishVersion=1.2.3 -buildCount=2 +buildCount=19 baseBetaVersion=1.2.4 diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/App.java b/appbase/src/main/java/cc/winboll/studio/appbase/App.java index 36726c5..d83a39e 100644 --- a/appbase/src/main/java/cc/winboll/studio/appbase/App.java +++ b/appbase/src/main/java/cc/winboll/studio/appbase/App.java @@ -6,11 +6,18 @@ package cc.winboll.studio.appbase; * @Describe APPbase 应用类 */ import cc.winboll.studio.libappbase.GlobalApplication; +import cc.winboll.studio.libappbase.LogUtils; public class App extends GlobalApplication { - + public static final String TAG = "App"; - - - + + @Override + public void onCreate() { + GlobalApplication.setIsDebuging(this, BuildConfig.DEBUG); + super.onCreate(); + LogUtils.setLogLevel(LogUtils.LOG_LEVEL.Debug); + LogUtils.setALlTAGListEnable(true); + LogUtils.d(TAG, "LogUtils init"); + } } diff --git a/libappbase/build.properties b/libappbase/build.properties index bc34301..3bf4b7b 100644 --- a/libappbase/build.properties +++ b/libappbase/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Feb 09 11:04:30 GMT 2025 +#Mon Feb 10 16:26:33 GMT 2025 stageCount=4 libraryProject=libappbase baseVersion=1.2 publishVersion=1.2.3 -buildCount=2 +buildCount=19 baseBetaVersion=1.2.4 diff --git a/libappbase/src/main/AndroidManifest.xml b/libappbase/src/main/AndroidManifest.xml index 8a9e6cf..792f8f5 100644 --- a/libappbase/src/main/AndroidManifest.xml +++ b/libappbase/src/main/AndroidManifest.xml @@ -1,17 +1,23 @@ - - + + + + + + + + - diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/CrashHandler.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/CrashHandler.java index 1fcd8e8..50564f0 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/CrashHandler.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/CrashHandler.java @@ -17,6 +17,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Resources; import android.graphics.Color; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Handler; @@ -53,7 +54,7 @@ public final class CrashHandler { public static final String TITTLE = "CrashReport"; - private static final String EXTRA_CRASH_INFO = "crashInfo"; + public static final String EXTRA_CRASH_INFO = "crashInfo"; final static String PREFS = CrashHandler.class.getName() + "PREFS"; final static String PREFS_CRASHHANDLER_ISCRASHHAPPEN = "PREFS_CRASHHANDLER_ISCRASHHAPPEN"; @@ -130,7 +131,7 @@ public final class CrashHandler { LogUtils.d(TAG, "gotoCrashActiviy: "); if (AppCrashSafetyWire.getInstance().isAppCrashSafetyWireOK()) { LogUtils.d(TAG, "gotoCrashActiviy: isAppCrashSafetyWireOK"); - intent.setClass(app, GlobalCrashActiviy.class); + intent.setClass(app, GlobalCrashActivity.class); intent.putExtra(EXTRA_CRASH_INFO, errorLog); // 如果发生了 CrashHandler 内部崩溃, 就调用基础的应用崩溃显示类 // intent.setClass(app, GlobalCrashActiviy.class); @@ -138,7 +139,7 @@ public final class CrashHandler { } else { LogUtils.d(TAG, "gotoCrashActiviy: else"); // 正常状态调用进阶的应用崩溃显示页 - intent.setClass(app, CrashActiviy.class); + intent.setClass(app, CrashActivity.class); intent.putExtra(EXTRA_CRASH_INFO, errorLog); } @@ -263,22 +264,6 @@ public final class CrashHandler { return false; } -// boolean resumeSafetyLevel() { -// LogUtils.d(TAG, "resumeSafetyLevel()"); -// // 崩溃计数进入崩溃保险值 -// int safeLevel = loadCurrentSafetyLevel(); -// if (isSafetyWireWorking(safeLevel)) { -// // 如果保险丝未熔断, 就增加一次熔断值 -// LogUtils.d(TAG, "resumeSafetyLevel() resume 1"); -// saveCurrentSafetyLevel(safeLevel + 1); -// return isSafetyWireWorking(safeLevel + 1); -// } else { -// LogUtils.d(TAG, "resumeSafetyLevel() resume immediately"); -// resumeToMaximumImmediately(); -// } -// return false; -// } - boolean isSafetyWireWorking(int safetyLevel) { LogUtils.d(TAG, "isSafetyWireOK()"); //safetyLevel = _MINI; @@ -302,16 +287,6 @@ public final class CrashHandler { AppCrashSafetyWire.getInstance().saveCurrentSafetyLevel(_MAX); } -// boolean resumeToMaximum(int safetyLevel) { -// if (safetyLevel + 1 < _MAX -// && safetyLevel >= _MINI -// && isSafetyWireWorking(safetyLevel + 1)) { -// AppCrashSafetyWire.getInstance().saveCurrentSafetyLevel(currentSafetyLevel + 1); -// return true; -// } -// return false; -// } - void off() { LogUtils.d(TAG, "off()"); saveCurrentSafetyLevel(_MINI); @@ -341,19 +316,7 @@ public final class CrashHandler { } } - public static String getAppName(Context context) { - PackageManager packageManager = context.getPackageManager(); - try { - ApplicationInfo applicationInfo = packageManager.getApplicationInfo( - context.getPackageName(), 0); - return (String) packageManager.getApplicationLabel(applicationInfo); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - return null; - } - - public static final class CrashActiviy extends Activity implements MenuItem.OnMenuItemClickListener { + public static final class CrashActivity extends Activity implements MenuItem.OnMenuItemClickListener { private static final int MENUITEM_COPY = 0; private static final int MENUITEM_RESTART = 1; @@ -363,7 +326,7 @@ public final class CrashHandler { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); AppCrashSafetyWire.getInstance().postResumeCrashSafetyWireHandler(getApplicationContext()); - + mLog = getIntent().getStringExtra(EXTRA_CRASH_INFO); setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar); setContentView: { @@ -437,149 +400,5 @@ public final class CrashHandler { return true; } } - - public static final class GlobalCrashActiviy extends Activity implements MenuItem.OnMenuItemClickListener { - - private static final int MENUITEM_COPY = 0; - private static final int MENUITEM_RESTART = 1; - - private String mLog; - int mTitleTextColor; - int mStartColor; - int mCenterColor; - int mEndColor; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - AppCrashSafetyWire.getInstance().postResumeCrashSafetyWireHandler(getApplicationContext()); - - mLog = getIntent().getStringExtra(EXTRA_CRASH_INFO); - setTheme(android.R.style.Theme_DeviceDefault_NoActionBar); -// TypedArray a = obtainStyledAttributes(attrs, R.styleable.ASupportToolbar, R.attr.aSupportToolbar, 0); -// mTitleTextColor = a.getColor(R.style.AppTheme.attrs.colo, Color.GREEN); -// mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, Color.BLUE); -// mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, Color.RED); -// mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, Color.YELLOW); -// // 返回一个绑定资源结束的信号给资源 -// a.recycle(); - - setContentView: { -// LinearLayout contentView = new LinearLayout(this); -// contentView.setOrientation(LinearLayout.VERTICAL); -// contentView.setBackgroundColor(Color.BLUE); -// LinearLayout llTitle = new LinearLayout(this); -// TextView title = new TextView(this); { -// int padding = dp2px(16); -// title.setPadding(padding, padding, padding, padding); -// title.setText("GlobalCrashActiviy"); -// title.setTextColor(Color.WHITE); -// } -// llTitle.addView(title, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); -// contentView.addView(llTitle, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); -// -// ScrollView svContent = new ScrollView(this); -// svContent.setFillViewport(true); -// -// HorizontalScrollView hw = new HorizontalScrollView(this); -// hw.setBackgroundColor(Color.WHITE); -// TextView message = new TextView(this); { -// int padding = dp2px(16); -// message.setPadding(padding, padding, padding, padding); -// message.setText(mLog); -// message.setTextIsSelectable(true); -// } -// hw.addView(message); -// svContent.addView(hw, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT); -// contentView.addView(svContent, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT); -// -// setContentView(contentView); - setContentView(R.layout.activity_globalcrash); - LinearLayout llMain = findViewById(R.id.activityglobalcrashLinearLayout1); - llMain.setBackgroundColor(Color.GRAY); - Toolbar toolbar = findViewById(R.id.activityglobalcrashToolbar1); - toolbar.setBackgroundColor(Color.BLACK); - toolbar.setTitleTextColor(Color.WHITE); - toolbar.setSubtitleTextColor(Color.WHITE); - setActionBar(toolbar); - TextView tvLog = findViewById(R.id.activityglobalcrashTextView1); - tvLog.setText(mLog); - tvLog.setTextColor(Color.BLACK); - tvLog.setBackgroundColor(Color.GRAY); -// // 内部崩溃测试 -// tvLog.setOnClickListener(new View.OnClickListener(){ -// @Override -// public void onClick(View view) { -// for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++) { -// getString(i); -// } -// } -// }); - - getActionBar().setTitle(TITTLE); - getActionBar().setSubtitle(getAppName(getApplicationContext())); - } - } - - @Override - public void onBackPressed() { - restart(); - } - - private void restart() { - PackageManager pm = getPackageManager(); - Intent intent = pm.getLaunchIntentForPackage(getPackageName()); - if (intent != null) { - intent.addFlags( - Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK - ); - startActivity(intent); - } - finish(); - android.os.Process.killProcess(android.os.Process.myPid()); - System.exit(0); - } - - private int dp2px(final float dpValue) { - final float scale = Resources.getSystem().getDisplayMetrics().density; - return (int) (dpValue * scale + 0.5f); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case MENUITEM_COPY: - ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); - cm.setPrimaryClip(ClipData.newPlainText(getPackageName(), mLog)); - Toast.makeText(getApplication(), "The text is copied.", Toast.LENGTH_SHORT).show(); - break; - case MENUITEM_RESTART: - AppCrashSafetyWire.getInstance().resumeToMaximumImmediately(); - restart(); - break; - } - return false; - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, MENUITEM_COPY, 0, "Copy").setOnMenuItemClickListener(this) - .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - menu.add(0, MENUITEM_RESTART, 0, "Restart").setOnMenuItemClickListener(this) - .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - - // 设置菜单文本颜色 - for (int i = 0; i < menu.size(); i++) { - MenuItem item = menu.getItem(i); - SpannableString spanString = new SpannableString(item.getTitle().toString()); - spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); - item.setTitle(spanString); - } - return true; - } - } - - } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java index 4bafae4..df4b8a3 100644 --- a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalApplication.java @@ -8,16 +8,10 @@ package cc.winboll.studio.libappbase; import android.app.Application; import android.content.Context; import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.os.Handler; import android.os.Looper; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.Closeable; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; public class GlobalApplication extends Application { @@ -60,13 +54,13 @@ public class GlobalApplication extends Application { @Override public void onCreate() { super.onCreate(); - GlobalApplication.isDebuging = true; - GlobalApplication.setIsDebuging(this, true); + //GlobalApplication.isDebuging = true; + //GlobalApplication.setIsDebuging(this, true); LogUtils.init(this); - LogUtils.setLogLevel(LogUtils.LOG_LEVEL.Debug); + //LogUtils.setLogLevel(LogUtils.LOG_LEVEL.Debug); //LogUtils.setTAGListEnable(GlobalApplication.TAG, true); - LogUtils.setALlTAGListEnable(true); - LogUtils.d(TAG, "LogUtils init"); + //LogUtils.setALlTAGListEnable(true); + //LogUtils.d(TAG, "LogUtils init"); // 设置应用异常处理窗口 CrashHandler.init(this); @@ -76,43 +70,16 @@ public class GlobalApplication extends Application { //GlobalApplication.isDebuging = sharedPreferences.getBoolean(PREFS_ISDEBUGING, GlobalApplication.isDebuging); } - - public static void write(InputStream input, OutputStream output) throws IOException { - byte[] buf = new byte[1024 * 8]; - int len; - while ((len = input.read(buf)) != -1) { - output.write(buf, 0, len); - } - } - - public static void write(File file, byte[] data) throws IOException { - File parent = file.getParentFile(); - if (parent != null && !parent.exists()) parent.mkdirs(); - - ByteArrayInputStream input = new ByteArrayInputStream(data); - FileOutputStream output = new FileOutputStream(file); + + public static String getAppName(Context context) { + PackageManager packageManager = context.getPackageManager(); try { - write(input, output); - } finally { - closeIO(input, output); - } - } - - public static String toString(InputStream input) throws IOException { - ByteArrayOutputStream output = new ByteArrayOutputStream(); - write(input, output); - try { - return output.toString("UTF-8"); - } finally { - closeIO(input, output); - } - } - - public static void closeIO(Closeable... closeables) { - for (Closeable closeable : closeables) { - try { - if (closeable != null) closeable.close(); - } catch (IOException ignored) {} + ApplicationInfo applicationInfo = packageManager.getApplicationInfo( + context.getPackageName(), 0); + return (String) packageManager.getApplicationLabel(applicationInfo); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); } + return null; } } diff --git a/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java new file mode 100644 index 0000000..6aea89a --- /dev/null +++ b/libappbase/src/main/java/cc/winboll/studio/libappbase/GlobalCrashActivity.java @@ -0,0 +1,132 @@ +package cc.winboll.studio.libappbase; + +/** + * @Author ZhanGSKen@AliYun.Com + * @Date 2025/02/11 00:14:05 + */ +import android.app.Activity; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.text.SpannableString; +import android.text.style.ForegroundColorSpan; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; +import android.widget.Toolbar; +import cc.winboll.studio.libappbase.R; + +public final class GlobalCrashActivity extends Activity implements MenuItem.OnMenuItemClickListener { + + private static final int MENUITEM_COPY = 0; + private static final int MENUITEM_RESTART = 1; + + String mLog; + + public static final String TAG = "GlobalCrashActivity"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + CrashHandler.AppCrashSafetyWire.getInstance().postResumeCrashSafetyWireHandler(getApplicationContext()); + + mLog = getIntent().getStringExtra(CrashHandler.EXTRA_CRASH_INFO); + setTheme(android.R.style.Theme_DeviceDefault_NoActionBar); + + setContentView(R.layout.activity_globalcrash); + LinearLayout llMain = findViewById(R.id.activityglobalcrashLinearLayout1); + llMain.setBackgroundColor(Color.GRAY); + Toolbar toolbar = findViewById(R.id.activityglobalcrashToolbar1); + toolbar.setBackgroundColor(Color.BLACK); + toolbar.setTitleTextColor(Color.WHITE); + toolbar.setSubtitleTextColor(Color.WHITE); + setActionBar(toolbar); + TextView tvLog = findViewById(R.id.activityglobalcrashTextView1); + tvLog.setText(mLog); + tvLog.setTextColor(Color.BLACK); + tvLog.setBackgroundColor(Color.GRAY); + + getActionBar().setTitle(CrashHandler.TITTLE); + getActionBar().setSubtitle(GlobalApplication.getAppName(getApplicationContext())); + } + + + + @Override + public void onBackPressed() { + restart(); + } + + private void restart() { + PackageManager pm = getPackageManager(); + Intent intent = pm.getLaunchIntentForPackage(getPackageName()); + if (intent != null) { + intent.addFlags( + Intent.FLAG_ACTIVITY_NEW_TASK + | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK + ); + startActivity(intent); + } + finish(); + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(0); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case MENUITEM_COPY: + ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); + cm.setPrimaryClip(ClipData.newPlainText(getPackageName(), mLog)); + Toast.makeText(getApplication(), "The text is copied.", Toast.LENGTH_SHORT).show(); + break; + case MENUITEM_RESTART: + CrashHandler.AppCrashSafetyWire.getInstance().resumeToMaximumImmediately(); + restart(); + break; + } + return false; + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(0, MENUITEM_COPY, 0, "Copy").setOnMenuItemClickListener(this) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + menu.add(0, MENUITEM_RESTART, 0, "Restart").setOnMenuItemClickListener(this) + .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + + + // 设置菜单文本颜色 + for (int i = 0; i < menu.size(); i++) { + MenuItem item = menu.getItem(i); + SpannableString spanString = new SpannableString(item.getTitle().toString()); + spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); + item.setTitle(spanString); + } + return true; + } + + void joinQQGroup(String key) { + // 创建Intent + Intent intent = new Intent(); + // 设置动作 + intent.setAction("android.intent.action.VIEW"); + // 设置数据为网址的URI + Uri content_url = Uri.parse("https://www.winboll.cc"); + intent.setData(content_url); + // 添加标志 + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + // 设置类名和活动名 + intent.setClassName("com.android.browser", "com.android.browser.BrowserActivity"); + // 启动Activity + startActivity(intent); + } +}