Compare commits
6 Commits
appbase-v1
...
appbase-v1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
8a405d33a7 | ||
![]() |
2b92da3e01 | ||
![]() |
ac1c9fb9f5 | ||
![]() |
16dd559c5b | ||
![]() |
3793ae3252 | ||
![]() |
dc8f127a8d |
@@ -29,7 +29,7 @@ android {
|
|||||||
// versionName 更新后需要手动设置
|
// versionName 更新后需要手动设置
|
||||||
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
|
// .winboll/winbollBuildProps.properties 文件的 stageCount=0
|
||||||
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
// Gradle编译环境下合起来的 versionName 就是 "${versionName}.0"
|
||||||
versionName "1.1"
|
versionName "1.2"
|
||||||
if(true) {
|
if(true) {
|
||||||
versionName = genVersionName("${versionName}")
|
versionName = genVersionName("${versionName}")
|
||||||
}
|
}
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Thu Jan 23 14:42:39 HKT 2025
|
#Thu Feb 06 07:12:30 HKT 2025
|
||||||
stageCount=3
|
stageCount=1
|
||||||
libraryProject=libappbase
|
libraryProject=libappbase
|
||||||
baseVersion=1.1
|
baseVersion=1.2
|
||||||
publishVersion=1.1.2
|
publishVersion=1.2.0
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=1.1.3
|
baseBetaVersion=1.2.1
|
||||||
|
@@ -5,7 +5,7 @@ package cc.winboll.studio.appbase;
|
|||||||
* @Date 2025/01/05 09:54:42
|
* @Date 2025/01/05 09:54:42
|
||||||
* @Describe APPbase 应用类
|
* @Describe APPbase 应用类
|
||||||
*/
|
*/
|
||||||
import cc.winboll.studio.GlobalApplication;
|
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||||
|
|
||||||
public class App extends GlobalApplication {
|
public class App extends GlobalApplication {
|
||||||
|
|
||||||
|
@@ -1,15 +1,23 @@
|
|||||||
package cc.winboll.studio.appbase;
|
package cc.winboll.studio.appbase;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.view.View;
|
||||||
public class MainActivity extends Activity {
|
import android.widget.CheckBox;
|
||||||
|
import cc.winboll.studio.libappbase.GlobalApplication;
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
public class MainActivity extends Activity {
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.activity_main);
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
}
|
super.onCreate(savedInstanceState);
|
||||||
|
setContentView(R.layout.activity_main);
|
||||||
}
|
|
||||||
|
CheckBox cbIsDebugMode = findViewById(R.id.activitymainCheckBox1);
|
||||||
|
cbIsDebugMode.setChecked(GlobalApplication.isDebuging());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onSwitchDebugMode(View view) {
|
||||||
|
GlobalApplication.setIsDebuging(this, ((CheckBox)view).isChecked());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -4,13 +4,36 @@
|
|||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical"
|
||||||
android:gravity="center">
|
android:gravity="center">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="Hello, WinBoll!"
|
android:text="Hello, WinBoll!"/>
|
||||||
android:onClick="onHello"/>
|
|
||||||
|
<LinearLayout
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="right|center_vertical">
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Debug Mode"
|
||||||
|
android:layout_weight="1.0"
|
||||||
|
android:onClick="onSwitchDebugMode"
|
||||||
|
android:id="@+id/activitymainCheckBox1"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="Test Application CrashReport"
|
||||||
|
android:textAllCaps="false"
|
||||||
|
android:onClick="onTestApplicationCrashReport"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@ apply from: '../.winboll/winboll_lib_build.gradle'
|
|||||||
apply from: '../.winboll/winboll_lint_build.gradle'
|
apply from: '../.winboll/winboll_lint_build.gradle'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace 'cc.winboll.studio'
|
namespace 'cc.winboll.studio.libappbase'
|
||||||
|
|
||||||
compileSdkVersion 32
|
compileSdkVersion 32
|
||||||
buildToolsVersion "33.0.3"
|
buildToolsVersion "33.0.3"
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Thu Jan 23 14:42:39 HKT 2025
|
#Thu Feb 06 07:12:30 HKT 2025
|
||||||
stageCount=3
|
stageCount=1
|
||||||
libraryProject=libappbase
|
libraryProject=libappbase
|
||||||
baseVersion=1.1
|
baseVersion=1.2
|
||||||
publishVersion=1.1.2
|
publishVersion=1.2.0
|
||||||
buildCount=0
|
buildCount=0
|
||||||
baseBetaVersion=1.1.3
|
baseBetaVersion=1.2.1
|
||||||
|
@@ -1,17 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="cc.winboll.studio" >
|
package="cc.winboll.studio.libappbase" >
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
<activity
|
<activity
|
||||||
android:name=".CrashHandler$CrashActiviy"
|
android:name=".CrashHandler$CrashActiviy"
|
||||||
android:label="CrashActiviy"
|
android:label="CrashActiviy"
|
||||||
android:launchMode="standard"/>
|
android:launchMode="standard"/>
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name=".libappbase.LibraryActivity"
|
|
||||||
android:label="@string/lib_name" >
|
|
||||||
</activity>
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package cc.winboll.studio;
|
package cc.winboll.studio.libappbase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen@QQ.COM
|
* @Author ZhanGSKen@QQ.COM
|
||||||
@@ -82,13 +82,14 @@ public final class CrashHandler {
|
|||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("************* Crash Head ****************\n");
|
sb.append("************* Crash Head ****************\n");
|
||||||
sb.append("Time Of Crash : ").append(time).append("\n");
|
sb.append("Time Of Crash : ").append(time).append("\n");
|
||||||
sb.append("Device Manufacturer: ").append(Build.MANUFACTURER).append("\n");
|
sb.append("Device Manufacturer : ").append(Build.MANUFACTURER).append("\n");
|
||||||
sb.append("Device Model : ").append(Build.MODEL).append("\n");
|
sb.append("Device Model : ").append(Build.MODEL).append("\n");
|
||||||
sb.append("Android Version : ").append(Build.VERSION.RELEASE).append("\n");
|
sb.append("Android Version : ").append(Build.VERSION.RELEASE).append("\n");
|
||||||
sb.append("Android SDK : ").append(Build.VERSION.SDK_INT).append("\n");
|
sb.append("Android SDK : ").append(Build.VERSION.SDK_INT).append("\n");
|
||||||
sb.append("App VersionName : ").append(versionName).append("\n");
|
sb.append("App VersionName : ").append(versionName).append("\n");
|
||||||
sb.append("App VersionCode : ").append(versionCode).append("\n");
|
sb.append("App VersionCode : ").append(versionCode).append("\n");
|
||||||
|
sb.append("AppBase GlobalApplication Debug Mode : ").append(GlobalApplication.isDebuging).append("\n");
|
||||||
sb.append("************* Crash Head ****************\n");
|
sb.append("************* Crash Head ****************\n");
|
||||||
sb.append("\n").append(fullStackTrace);
|
sb.append("\n").append(fullStackTrace);
|
||||||
|
|
||||||
@@ -115,6 +116,7 @@ public final class CrashHandler {
|
|||||||
DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(thread, throwable);
|
DEFAULT_UNCAUGHT_EXCEPTION_HANDLER.uncaughtException(thread, throwable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeFile(File file, String content) throws IOException {
|
private void writeFile(File file, String content) throws IOException {
|
@@ -1,55 +1,50 @@
|
|||||||
package cc.winboll.studio;
|
package cc.winboll.studio.libappbase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ZhanGSKen@QQ.COM
|
* @Author ZhanGSKen@QQ.COM
|
||||||
* @Date 2025/01/05 10:10:23
|
* @Date 2025/01/05 10:10:23
|
||||||
* @Describe 全局应用类
|
* @Describe 全局应用类
|
||||||
*/
|
*/
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.ClipData;
|
|
||||||
import android.content.ClipboardManager;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.SharedPreferences;
|
||||||
import android.content.pm.PackageInfo;
|
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.graphics.Typeface;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.text.TextUtils;
|
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
|
||||||
import android.view.MenuItem;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.HorizontalScrollView;
|
|
||||||
import android.widget.ScrollView;
|
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.Toast;
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.lang.Thread.UncaughtExceptionHandler;
|
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import android.content.pm.ApplicationInfo;
|
|
||||||
import android.content.res.AssetManager;
|
|
||||||
|
|
||||||
public class GlobalApplication extends Application {
|
public class GlobalApplication extends Application {
|
||||||
|
|
||||||
|
final static String PREFS = GlobalApplication.class.getName() + "PREFS";
|
||||||
|
final static String PREFS_ISDEBUGING = "PREFS_ISDEBUGING";
|
||||||
|
|
||||||
private static Handler MAIN_HANDLER = new Handler(Looper.getMainLooper());
|
private static Handler MAIN_HANDLER = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
|
// 是否处于调试状态
|
||||||
|
volatile static boolean isDebuging = false;
|
||||||
|
|
||||||
|
public static void setIsDebuging(Context context, boolean isDebuging) {
|
||||||
|
GlobalApplication.isDebuging = isDebuging;
|
||||||
|
// 获取SharedPreferences实例
|
||||||
|
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFS, Context.MODE_PRIVATE);
|
||||||
|
// 获取编辑器
|
||||||
|
SharedPreferences.Editor editor = sharedPreferences.edit();
|
||||||
|
// 保存数据
|
||||||
|
editor.putBoolean(PREFS_ISDEBUGING, GlobalApplication.isDebuging);
|
||||||
|
// 提交更改
|
||||||
|
editor.apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isDebuging() {
|
||||||
|
return isDebuging;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Context getApplicationContext() {
|
public Context getApplicationContext() {
|
||||||
return super.getApplicationContext();
|
return super.getApplicationContext();
|
||||||
@@ -62,7 +57,13 @@ public class GlobalApplication extends Application {
|
|||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
|
// 设置应用异常处理窗口
|
||||||
CrashHandler.init(this);
|
CrashHandler.init(this);
|
||||||
|
|
||||||
|
// 设置应用调试状态
|
||||||
|
SharedPreferences sharedPreferences = getSharedPreferences(PREFS, Context.MODE_PRIVATE);
|
||||||
|
GlobalApplication.isDebuging = sharedPreferences.getBoolean(PREFS_ISDEBUGING, GlobalApplication.isDebuging);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void write(InputStream input, OutputStream output) throws IOException {
|
public static void write(InputStream input, OutputStream output) throws IOException {
|
@@ -1,15 +0,0 @@
|
|||||||
package cc.winboll.studio.libappbase;
|
|
||||||
|
|
||||||
import android.app.*;
|
|
||||||
import android.os.*;
|
|
||||||
import cc.winboll.studio.R;
|
|
||||||
|
|
||||||
public class LibraryActivity extends Activity
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
setContentView(R.layout.library);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,11 +0,0 @@
|
|||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:text="@string/hello_world"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content" />
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
Reference in New Issue
Block a user