From 65509eacba18e700cc726a6d7fc5ebaa5b5d637b Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 19 Jan 2025 19:59:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=B7=E8=B4=9DAPP=5FBck20250119=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=BA=90=E7=A0=81=EF=BC=8C=E7=A7=BB=E9=99=A4libjc/jcc?= =?UTF-8?q?/libs/android-29.jar=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/android.yml | 87 ++++ .gitignore | 104 ++++ .gitmodules | 0 .winboll/Readme.txt | 18 + .winboll/bashChangeToBetaKeyStore.sh | 3 + .winboll/bashChangeToStageMGKeyStore.sh | 3 + .winboll/bashCheckGitCommitStatus.sh | 32 ++ .winboll/bashCommitAppPublishBuildFlagInfo.sh | 17 + .winboll/bashCommitLibReleaseBuildFlagInfo.sh | 48 ++ .winboll/bashPublishAPKAddTag.sh | 166 ++++++ .winboll/bashPublishDebugAPKAddTag.sh | 166 ++++++ .winboll/bashPublishLIBAddTag.sh | 14 + .winboll/winboll_app_build.gradle | 255 ++++++++++ .winboll/winboll_lib_build.gradle | 211 ++++++++ .winboll/winboll_lint_build.gradle | 50 ++ LICENSE | 73 +++ README.md | 127 +++++ aes/.gitignore | 1 + aes/app_update_description.txt | 1 + aes/build.gradle | 69 +++ aes/build.properties | 8 + aes/proguard-rules.pro | 17 + aes/src/beta/AndroidManifest.xml | 12 + aes/src/beta/res/values/strings.xml | 6 + aes/src/main/AndroidManifest.xml | 35 ++ .../main/java/cc/winboll/studio/aes/App.java | 20 + .../cc/winboll/studio/aes/MainActivity.java | 16 + aes/src/main/res/values/strings.xml | 6 + aes/src/main/res/values/styles.xml | 5 + aes/src/stage/AndroidManifest.xml | 12 + aes/src/stage/res/values/strings.xml | 6 + app/app.md | 0 app/app.perl | 0 app/app.php | 0 app/app.py | 0 app/app.sh | 0 app/app.txt | 0 app/app_update_description.txt | 1 + app/build.gradle | 54 ++ app/build.properties | 8 + app/proguard-rules.pro | 17 + app/src/beta/AndroidManifest.xml | 13 + app/src/beta/res/values/strings.xml | 6 + app/src/main/AndroidManifest.xml | 48 ++ .../main/java/cc/winboll/studio/app/App.java | 24 + .../cc/winboll/studio/app/MainActivity.java | 168 ++++++ app/src/main/res/drawable/ic_launcher.xml | 11 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../res/drawable/ic_launcher_foreground.xml | 10 + app/src/main/res/drawable/shape_gradient.xml | 10 + app/src/main/res/layout/activity_main.xml | 29 ++ app/src/main/res/layout/view_toast.xml | 32 ++ .../res/menu/toolbar_winboll_app_main.xml | 5 + app/src/main/res/values/colors.xml | 10 + app/src/main/res/values/strings.xml | 6 + app/src/main/res/values/styles.xml | 3 + app/src/main/res/xml/studio_provider.xml | 25 + app/src/stage/AndroidManifest.xml | 12 + app/src/stage/res/values/strings.xml | 6 + appbase/.gitignore | 1 + appbase/app_update_description.txt | 1 + appbase/build.gradle | 54 ++ appbase/build.properties | 8 + appbase/proguard-rules.pro | 17 + appbase/src/beta/AndroidManifest.xml | 12 + appbase/src/beta/res/values/strings.xml | 6 + appbase/src/main/AndroidManifest.xml | 36 ++ .../java/cc/winboll/studio/appbase/App.java | 16 + .../winboll/studio/appbase/MainActivity.java | 15 + appbase/src/main/res/drawable/ic_launcher.png | Bin 0 -> 9250 bytes appbase/src/main/res/layout/activity_main.xml | 16 + appbase/src/main/res/values-v21/styles.xml | 9 + appbase/src/main/res/values/colors.xml | 6 + appbase/src/main/res/values/strings.xml | 4 + appbase/src/main/res/values/styles.xml | 5 + appbase/src/stage/AndroidManifest.xml | 12 + appbase/src/stage/res/values/strings.xml | 6 + apputils/app_update_description.txt | 1 + apputils/build.gradle | 55 ++ apputils/build.properties | 8 + apputils/proguard-rules.pro | 17 + apputils/src/beta/AndroidManifest.xml | 13 + apputils/src/beta/res/values/strings.xml | 6 + apputils/src/main/AndroidManifest.xml | 36 ++ .../java/cc/winboll/studio/apputils/App.java | 31 ++ .../winboll/studio/apputils/MainActivity.java | 182 +++++++ .../TestStringToQrCodeViewActivity.java | 50 ++ .../studio/apputils/TestWinBollActivity.java | 52 ++ .../src/main/res/drawable/ic_launcher.xml | 11 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../res/drawable/ic_launcher_foreground.xml | 10 + .../src/main/res/drawable/shape_gradient.xml | 10 + .../src/main/res/layout/activity_main.xml | 60 +++ .../activity_teststringtoqrcodeview.xml | 28 + .../main/res/layout/activity_testwinboll.xml | 17 + apputils/src/main/res/layout/view_toast.xml | 32 ++ apputils/src/main/res/menu/toolbar_main.xml | 16 + .../src/main/res/menu/toolbar_testwinboll.xml | 9 + apputils/src/main/res/values/colors.xml | 10 + apputils/src/main/res/values/strings.xml | 6 + apputils/src/main/res/values/styles.xml | 3 + apputils/src/main/res/xml/studio_provider.xml | 25 + apputils/src/stage/AndroidManifest.xml | 12 + apputils/src/stage/res/values/strings.xml | 6 + autoinstaller/app_update_description.txt | 1 + autoinstaller/build.gradle | 70 +++ autoinstaller/build.properties | 8 + autoinstaller/proguard-rules.pro | 17 + autoinstaller/src/beta/AndroidManifest.xml | 22 + autoinstaller/src/beta/res/values/strings.xml | 6 + autoinstaller/src/main/AndroidManifest.xml | 73 +++ .../cc/winboll/studio/autoinstaller/App.java | 31 ++ .../studio/autoinstaller/FileListener.java | 80 +++ .../studio/autoinstaller/MainActivity.java | 312 ++++++++++++ .../autoinstaller/beans/AppConfigs.java | 145 ++++++ .../autoinstaller/receivers/MainReceiver.java | 40 ++ .../services/AssistantService.java | 110 ++++ .../autoinstaller/services/MainService.java | 248 +++++++++ .../studio/autoinstaller/utils/FileUtil.java | 47 ++ .../autoinstaller/utils/NotificationUtil.java | 82 +++ .../autoinstaller/utils/PackageUtil.java | 30 ++ .../autoinstaller/utils/ServiceUtil.java | 35 ++ .../views/ListViewForScrollView.java | 77 +++ .../src/main/res/drawable/ic_launcher.xml | 11 + .../res/drawable/ic_launcher_background.xml | 171 +++++++ .../res/drawable/ic_launcher_foreground.xml | 11 + .../src/main/res/drawable/ic_winboll.xml | 11 + .../src/main/res/drawable/shape_gradient.xml | 10 + .../activity_installcompletedfollowup.xml | 13 + .../src/main/res/layout/activity_main.xml | 142 ++++++ .../src/main/res/layout/installitem.xml | 15 + .../src/main/res/layout/toast_custom_view.xml | 38 ++ autoinstaller/src/main/res/values/attrs.xml | 9 + autoinstaller/src/main/res/values/colors.xml | 11 + autoinstaller/src/main/res/values/strings.xml | 3 + autoinstaller/src/main/res/values/themes.xml | 14 + .../src/main/res/xml/provider_paths.xml | 26 + autoinstaller/src/stage/AndroidManifest.xml | 22 + .../src/stage/res/values/strings.xml | 6 + build.gradle | 78 +++ demo/app_update_description.txt | 1 + demo/build.gradle | 67 +++ demo/build.properties | 8 + demo/proguard-rules.pro | 17 + demo/src/beta/AndroidManifest.xml | 15 + demo/src/beta/res/values/strings.xml | 6 + demo/src/main/AndroidManifest.xml | 39 ++ .../main/java/cc/winboll/studio/demo/App.java | 19 + .../cc/winboll/studio/demo/MainActivity.java | 86 ++++ demo/src/main/res/drawable/ic_launcher.xml | 11 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../res/drawable/ic_launcher_foreground.xml | 10 + demo/src/main/res/drawable/shape_gradient.xml | 10 + demo/src/main/res/layout/activity_main.xml | 29 ++ demo/src/main/res/layout/view_toast.xml | 32 ++ demo/src/main/res/menu/toolbar_about.xml | 9 + demo/src/main/res/menu/toolbar_main.xml | 7 + demo/src/main/res/values/colors.xml | 10 + demo/src/main/res/values/strings.xml | 6 + demo/src/main/res/values/styles.xml | 3 + demo/src/stage/AndroidManifest.xml | 12 + demo/src/stage/res/values/strings.xml | 6 + gradle.properties | 24 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 +++++++ jc/README.md | 3 + jc/app_update_description.txt | 1 + jc/build.gradle | 64 +++ jc/build.properties | 8 + jc/proguard-rules.pro | 17 + jc/src/beta/AndroidManifest.xml | 12 + jc/src/beta/res/values/strings.xml | 6 + jc/src/main/AndroidManifest.xml | 47 ++ .../main/java/cc/winboll/studio/jc/App.java | 19 + .../cc/winboll/studio/jc/MainActivity.java | 234 +++++++++ jc/src/main/res/drawable/ic_launcher.xml | 10 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ jc/src/main/res/drawable/ic_launcher_beta.xml | 11 + .../res/drawable/ic_launcher_foreground.xml | 10 + jc/src/main/res/drawable/shape_gradient.xml | 10 + jc/src/main/res/layout/activity_main.xml | 85 ++++ jc/src/main/res/layout/view_toast.xml | 32 ++ jc/src/main/res/menu/toolbar_about.xml | 9 + jc/src/main/res/menu/toolbar_main.xml | 7 + jc/src/main/res/values/colors.xml | 10 + jc/src/main/res/values/strings.xml | 6 + jc/src/main/res/values/styles.xml | 5 + jc/src/stage/AndroidManifest.xml | 12 + jc/src/stage/res/values/strings.xml | 6 + jcndk/AndroidManifest.xml | 45 ++ jcndk/META-INF/ANDROID.RSA | Bin 0 -> 1714 bytes jcndk/META-INF/ANDROID.SF | 26 + jcndk/META-INF/MANIFEST.MF | 25 + jcndk/README.md | 3 + jcndk/assets/switch2bash.sh | 7 + jcndk/jni/Android.mk | 27 + jcndk/jni/Application.mk | 3 + jcndk/jni/hello-jni.cpp | 32 ++ jcndk/libs/armeabi-v7a/libhello-jni.so | Bin 0 -> 13864 bytes jcndk/libs/x86/libhello-jni.so | Bin 0 -> 5200 bytes jcndk/obj/local/armeabi-v7a/libhello-jni.so | Bin 0 -> 147156 bytes .../armeabi-v7a/objs/hello-jni/hello-jni.o | Bin 0 -> 55272 bytes .../armeabi-v7a/objs/hello-jni/hello-jni.o.d | 7 + jcndk/obj/local/x86/libhello-jni.so | Bin 0 -> 53284 bytes .../obj/local/x86/objs/hello-jni/hello-jni.o | Bin 0 -> 54512 bytes .../local/x86/objs/hello-jni/hello-jni.o.d | 7 + jcndk/project.properties | 13 + jcndk/res/layout/view_main.xml | 47 ++ jcndk/res/values/strings.xml | 4 + .../cc/winboll/studio/jcndk/FileUtils.java | 56 ++ .../src/cc/winboll/studio/jcndk/HelloJni.java | 265 ++++++++++ .../studio/jcndk/services/JCMainService.java | 45 ++ libaes/.gitignore | 1 + libaes/build.gradle | 48 ++ libaes/build.properties | 8 + libaes/libs/colorpicker-20180319.jar | Bin 0 -> 12740 bytes libaes/proguard-rules.pro | 17 + libaes/src/main/AndroidManifest.xml | 20 + .../studio/libaes/DrawerMenuDataAdapter.java | 207 ++++++++ .../studio/libaes/ImagePagerAdapter.java | 75 +++ .../activitys/DrawerFragmentActivity.java | 384 ++++++++++++++ .../studio/libaes/beans/AESThemeBean.java | 138 +++++ .../studio/libaes/beans/DrawerMenuBean.java | 35 ++ .../libaes/dialogs/LocalFileSelectDialog.java | 204 ++++++++ .../libaes/dialogs/StoragePathDialog.java | 57 +++ .../libaes/unittests/LibraryActivity.java | 170 +++++++ .../unittests/SecondaryLibraryActivity.java | 50 ++ .../unittests/SecondaryLibraryFragment.java | 25 + .../libaes/unittests/TestAButtonFragment.java | 37 ++ .../TestASupportToolbarActivity.java | 34 ++ .../unittests/TestAToolbarActivity.java | 28 + .../unittests/TestDrawerFragmentActivity.java | 111 ++++ .../unittests/TestViewPageFragment.java | 199 ++++++++ .../studio/libaes/utils/AESThemeUtil.java | 164 ++++++ .../studio/libaes/utils/ScreenUtil.java | 64 +++ .../winboll/studio/libaes/views/AButton.java | 28 + .../cc/winboll/studio/libaes/views/ACard.java | 45 ++ .../libaes/views/ADrawerMenuListView.java | 19 + .../studio/libaes/views/AOHPCTCSeekBar.java | 117 +++++ .../studio/libaes/views/AOHPCTSCard.java | 43 ++ .../studio/libaes/views/ASupportToolbar.java | 89 ++++ .../studio/libaes/views/ATickProgressBar.java | 55 ++ .../winboll/studio/libaes/views/AToolbar.java | 92 ++++ .../res/anim/normal_dialog_enter_center.xml | 35 ++ .../res/anim/normal_dialog_enter_corner.xml | 15 + .../res/anim/normal_dialog_exit_center.xml | 35 ++ .../res/anim/normal_dialog_exit_corner.xml | 14 + .../main/res/drawable/acard_frame_main.xml | 62 +++ .../src/main/res/drawable/atoolbar_frame.xml | 62 +++ libaes/src/main/res/drawable/btn_style.xml | 7 + .../src/main/res/drawable/default_shape.xml | 27 + .../res/drawable/ic_arrow_left_right_bold.xml | 11 + .../drawable/ic_arrow_up_circle_outline.xml | 11 + libaes/src/main/res/drawable/ohpcts_frame.xml | 43 ++ .../src/main/res/drawable/pressed_shape.xml | 22 + libaes/src/main/res/drawable/toast_frame.xml | 62 +++ .../src/main/res/layout/activity_drawer.xml | 57 +++ .../res/layout/activity_drawerfragment.xml | 58 +++ .../src/main/res/layout/activity_library.xml | 14 + .../res/layout/activity_secondarylibrary.xml | 15 + .../layout/activity_test_aboutfragment.xml | 15 + .../layout/activity_testasupporttoolbar.xml | 15 + .../main/res/layout/activity_testatoolbar.xml | 15 + .../main/res/layout/dialog_storagepath.xml | 43 ++ .../src/main/res/layout/fragment_abutton.xml | 20 + .../res/layout/fragment_secondarylibrary.xml | 15 + libaes/src/main/res/layout/fragment_test1.xml | 15 + libaes/src/main/res/layout/fragment_test2.xml | 15 + .../src/main/res/layout/fragment_viewpage.xml | 60 +++ .../main/res/layout/listview_drawermenu.xml | 28 + libaes/src/main/res/layout/view_toast.xml | 35 ++ libaes/src/main/res/layout/viewpage_acard.xml | 18 + .../main/res/layout/viewpage_aohpctccard.xml | 18 + .../main/res/layout/viewpage_aohpctcsb.xml | 16 + .../res/layout/viewpage_atickprogressbar.xml | 22 + libaes/src/main/res/menu/toolbar_apptheme.xml | 26 + .../src/main/res/menu/toolbar_drawerbase.xml | 15 + libaes/src/main/res/menu/toolbar_library.xml | 32 ++ .../res/menu/toolbar_secondarylibrary.xml | 9 + libaes/src/main/res/values-zh/string.xml | 16 + libaes/src/main/res/values/attrs.xml | 55 ++ libaes/src/main/res/values/colors.xml | 43 ++ libaes/src/main/res/values/dimens.xml | 16 + libaes/src/main/res/values/strings.xml | 16 + libaes/src/main/res/values/styles.xml | 210 ++++++++ libappbase/.gitignore | 1 + libappbase/build.gradle | 30 ++ libappbase/build.properties | 8 + libappbase/proguard-rules.pro | 17 + libappbase/src/main/AndroidManifest.xml | 18 + .../java/cc/winboll/studio/CrashHandler.java | 215 ++++++++ .../cc/winboll/studio/GlobalApplication.java | 95 ++++ .../studio/libappbase/LibraryActivity.java | 15 + .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes libappbase/src/main/res/layout/library.xml | 11 + libappbase/src/main/res/values-v21/styles.xml | 5 + libappbase/src/main/res/values/strings.xml | 7 + libappbase/src/main/res/values/styles.xml | 5 + libapputils/.gitignore | 1 + libapputils/build.gradle | 44 ++ libapputils/build.properties | 8 + libapputils/proguard-rules.pro | 17 + libapputils/src/main/AndroidManifest.xml | 48 ++ .../assets/winboll/studio/html/index.html | 12 + .../winboll/studio/html/javascript_test.html | 241 +++++++++ .../main/assets/winboll/studio/png/apple.png | Bin 0 -> 38511 bytes .../libapputils/activities/AboutActivity.java | 87 ++++ .../activities/AssetsHtmlActivity.java | 161 ++++++ .../activities/QRCodeDecodeActivity.java | 120 +++++ .../studio/libapputils/ads/ADsView.java | 240 +++++++++ .../libapputils/app/AppVersionUtils.java | 153 ++++++ .../studio/libapputils/app/CrashHandler.java | 215 ++++++++ .../app/MyActivityLifecycleCallbacks.java | 101 ++++ .../libapputils/app/WinBollActivity.java | 479 ++++++++++++++++++ .../app/WinBollActivityManager.java | 315 ++++++++++++ .../libapputils/app/WinBollApplication.java | 76 +++ .../studio/libapputils/bean/BaseBean.java | 287 +++++++++++ .../studio/libapputils/bean/DebugBean.java | 74 +++ .../studio/libapputils/git/IAPPFiles.java | 59 +++ .../studio/libapputils/intent/action.java | 14 + .../studio/libapputils/log/LogActivity.java | 66 +++ .../studio/libapputils/log/LogUtils.java | 370 ++++++++++++++ .../studio/libapputils/log/LogUtilsBean.java | 71 +++ .../libapputils/log/LogUtilsClassTAGBean.java | 88 ++++ .../studio/libapputils/log/LogView.java | 386 ++++++++++++++ .../studio/libapputils/log/LogViewThread.java | 79 +++ .../libapputils/service/AssistantService.java | 95 ++++ .../service/EWUIStatusIconDrawable.java | 35 ++ .../service/IWinBollClientServiceBinder.java | 17 + .../service/WinBollClientService.java | 193 +++++++ .../service/WinBollClientServiceBean.java | 77 +++ .../libapputils/service/WinBollMail.java | 22 + .../studio/libapputils/util/FileUtils.java | 157 ++++++ .../studio/libapputils/util/MD5Utils.java | 37 ++ .../studio/libapputils/util/PrefUtils.java | 33 ++ .../libapputils/util/QRCodeGenerator.java | 64 +++ .../studio/libapputils/util/ServiceUtils.java | 36 ++ .../studio/libapputils/util/UriUtils.java | 130 +++++ .../studio/libapputils/view/AboutView.java | 345 +++++++++++++ .../libapputils/view/SimpleWebView.java | 39 ++ .../libapputils/view/StringToQrCodeView.java | 70 +++ .../view/WinBollServiceStatusView.java | 347 +++++++++++++ .../libapputils/view/YesNoAlertDialog.java | 59 +++ .../src/main/res/drawable/bg_shadow.xml | 41 ++ .../main/res/drawable/ic_dev_connected.xml | 11 + .../main/res/drawable/ic_dev_disconnected.xml | 11 + .../src/main/res/drawable/ic_email.xml | 11 + .../src/main/res/drawable/ic_email_alert.xml | 11 + .../src/main/res/drawable/ic_launcher.xml | 13 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../res/drawable/ic_launcher_foreground.xml | 10 + .../src/main/res/drawable/ic_winboll.xml | 13 + .../src/main/res/drawable/ic_winbollbeta.xml | 11 + .../src/main/res/drawable/shape_gradient.xml | 10 + .../src/main/res/drawable/view_border.xml | 8 + .../src/main/res/drawable/winboll_help.xml | 27 + .../src/main/res/drawable/winboll_logo.xml | 48 ++ .../src/main/res/drawable/winboll_point.xml | 20 + .../src/main/res/layout/activity_about.xml | 25 + .../main/res/layout/activity_assetshtml.xml | 21 + .../src/main/res/layout/activity_library.xml | 11 + .../src/main/res/layout/activity_log.xml | 17 + .../main/res/layout/activity_qrcodedecode.xml | 26 + .../src/main/res/layout/activity_unittest.xml | 31 ++ .../src/main/res/layout/view_about_dev.xml | 64 +++ .../src/main/res/layout/view_about_www.xml | 23 + libapputils/src/main/res/layout/view_ads.xml | 14 + libapputils/src/main/res/layout/view_log.xml | 121 +++++ .../src/main/res/layout/view_logtag.xml | 32 ++ .../main/res/layout/view_string2qrcode.xml | 29 ++ .../src/main/res/layout/view_toast.xml | 32 ++ .../main/res/menu/toolbar_studio_debug.xml | 33 ++ .../res/menu/toolbar_winboll_shared_about.xml | 9 + .../res/menu/toolbar_winboll_shared_main.xml | 14 + .../src/main/res/values-v21/styles.xml | 5 + libapputils/src/main/res/values/array.xml | 11 + libapputils/src/main/res/values/attrs.xml | 11 + libapputils/src/main/res/values/colors.xml | 10 + libapputils/src/main/res/values/strings.xml | 11 + libapputils/src/main/res/values/styles.xml | 17 + .../main/res/xml/network_security_config.xml | 6 + libjc/.classpath | 6 + libjc/.gitignore | 1 + libjc/.project | 17 + libjc/README.md | 4 + libjc/build.gradle | 33 ++ libjc/build.properties | 8 + libjc/jcc/.classpath | 6 + libjc/jcc/.gitignore | 1 + libjc/jcc/.project | 17 + libjc/jcc/MANIFEST.MF | 3 + libjc/jcc/bash_build_jar.sh | 40 ++ libjc/jcc/src/Main.java | 10 + libjc/jcc/test_jar.sh | 26 + libjc/proguard-rules.pro | 17 + libjc/src/main/AndroidManifest.xml | 14 + .../winboll/studio/libjc/JCCommandThread.java | 160 ++++++ .../winboll/studio/libjc/JCErrorStream.java | 84 +++ .../winboll/studio/libjc/JCErrorThread.java | 22 + .../cc/winboll/studio/libjc/JCMainThread.java | 101 ++++ .../winboll/studio/libjc/JCOutputStream.java | 84 +++ .../winboll/studio/libjc/JCOutputThread.java | 22 + .../java/cc/winboll/studio/libjc/Main.java | 136 +++++ .../cc/winboll/studio/libjc/TestClassA.java | 35 ++ .../cc/winboll/studio/libjc/TestClassB.java | 37 ++ .../winboll/studio/libjc/bean/BaseBean.java | 278 ++++++++++ .../studio/libjc/cmd/ListJarClassHasMain.java | 75 +++ .../studio/libjc/net/JCSocketClient.java | 196 +++++++ .../studio/libjc/net/JCSocketServer.java | 204 ++++++++ .../winboll/studio/libjc/net/MesaageBean.java | 88 ++++ .../studio/libjc/task/TermuxUniteTask.java | 5 + .../studio/libjc/util/ConsoleUtils.java | 36 ++ .../winboll/studio/libjc/util/FileUtils.java | 81 +++ .../winboll/studio/libjc/util/LogUtils.java | 93 ++++ .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes libjc/src/main/res/layout/library.xml | 11 + libjc/src/main/res/values-v21/styles.xml | 5 + libjc/src/main/res/values/strings.xml | 7 + libjc/src/main/res/values/styles.xml | 5 + local.properties-demo | 8 + mj/app_update_description.txt | 1 + mj/build.gradle | 64 +++ mj/build.properties | 8 + mj/proguard-rules.pro | 17 + mj/src/beta/AndroidManifest.xml | 15 + mj/src/beta/res/values/strings.xml | 6 + mj/src/main/AndroidManifest.xml | 39 ++ .../main/java/cc/winboll/studio/mj/App.java | 19 + .../cc/winboll/studio/mj/MainActivity.java | 87 ++++ .../studio/mj/activities/AboutActivity.java | 62 +++ mj/src/main/res/drawable/ic_launcher.xml | 11 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../res/drawable/ic_launcher_foreground.xml | 10 + mj/src/main/res/drawable/shape_gradient.xml | 10 + mj/src/main/res/layout/activity_about.xml | 24 + mj/src/main/res/layout/activity_main.xml | 29 ++ mj/src/main/res/layout/view_toast.xml | 32 ++ mj/src/main/res/menu/toolbar_about.xml | 9 + mj/src/main/res/menu/toolbar_main.xml | 7 + mj/src/main/res/values/colors.xml | 10 + mj/src/main/res/values/strings.xml | 6 + mj/src/main/res/values/styles.xml | 3 + mj/src/stage/AndroidManifest.xml | 12 + mj/src/stage/res/values/strings.xml | 6 + powerbell/.gitignore | 1 + powerbell/README.md | 111 ++++ powerbell/app_update_description.txt | 1 + powerbell/build.gradle | 72 +++ powerbell/build.properties | 8 + powerbell/proguard-rules.pro | 17 + powerbell/src/beta/AndroidManifest.xml | 26 + powerbell/src/beta/res/values-zh/string.xml | 6 + powerbell/src/beta/res/values/strings.xml | 6 + powerbell/src/main/AndroidManifest.xml | 117 +++++ .../studio/powerbell/GlobalApplication.java | 58 +++ .../studio/powerbell/MainActivity.java | 190 +++++++ .../powerbell/activities/AboutActivity.java | 42 ++ .../activities/BackgroundPictureActivity.java | 382 ++++++++++++++ .../activities/ClearRecordActivity.java | 85 ++++ .../studio/powerbell/beans/AppConfigBean.java | 130 +++++ .../beans/BackgroundPictureBean.java | 86 ++++ .../powerbell/beans/BatteryInfoBean.java | 75 +++ .../beans/ControlCenterServiceBean.java | 63 +++ .../powerbell/beans/NotificationMessage.java | 40 ++ .../BackgroundPicturePreviewDialog.java | 134 +++++ .../powerbell/dialogs/YesNoAlertDialog.java | 59 +++ .../powerbell/fragments/MainViewFragment.java | 359 +++++++++++++ .../handlers/ControlCenterServiceHandler.java | 36 ++ .../ControlCenterServiceReceiver.java | 80 +++ .../receivers/GlobalApplicationReceiver.java | 66 +++ .../powerbell/receivers/MainReceiver.java | 43 ++ .../powerbell/services/AssistantService.java | 105 ++++ .../services/ControlCenterService.java | 270 ++++++++++ .../powerbell/threads/RemindThread.java | 197 +++++++ .../studio/powerbell/utils/AppCacheUtils.java | 85 ++++ .../powerbell/utils/AppConfigUtils.java | 203 ++++++++ .../utils/BackgroundPictureUtils.java | 64 +++ .../studio/powerbell/utils/BatteryUtils.java | 28 + .../studio/powerbell/utils/DateUtils.java | 16 + .../studio/powerbell/utils/FileUtils.java | 176 +++++++ .../studio/powerbell/utils/ImageUtils.java | 53 ++ .../powerbell/utils/NotificationUtils.java | 212 ++++++++ .../studio/powerbell/utils/ServiceUtils.java | 30 ++ .../studio/powerbell/utils/StringUtils.java | 105 ++++ .../studio/powerbell/utils/UriUtil.java | 145 ++++++ .../powerbell/views/BatteryDrawable.java | 80 +++ .../powerbell/views/VerticalSeekBar.java | 96 ++++ powerbell/src/main/res/drawable/bg_frame.xml | 41 ++ .../src/main/res/drawable/blank10x10.png | Bin 0 -> 100 bytes powerbell/src/main/res/drawable/charge.png | Bin 0 -> 642 bytes .../src/main/res/drawable/cursor_pointer.xml | 20 + .../src/main/res/drawable/ic_launcher.xml | 27 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../main/res/drawable/ic_launcher_beta.xml | 11 + powerbell/src/main/res/drawable/usege.png | Bin 0 -> 434 bytes powerbell/src/main/res/drawable/xiaobai.png | Bin 0 -> 20165 bytes .../src/main/res/layout/activity_about.xml | 25 + .../res/layout/activity_backgroundpicture.xml | 96 ++++ .../main/res/layout/activity_clearrecord.xml | 67 +++ .../src/main/res/layout/activity_main.xml | 43 ++ .../main/res/layout/activity_unbelievable.xml | 23 + .../dialog_backgroundpicturepreview.xml | 57 +++ .../src/main/res/layout/fragment_mainview.xml | 211 ++++++++ .../res/layout/view_remindnotification.xml | 48 ++ .../res/layout/view_servicenotification.xml | 39 ++ powerbell/src/main/res/menu/toolbar_main.xml | 12 + powerbell/src/main/res/values-zh/strings.xml | 20 + powerbell/src/main/res/values/attrs.xml | 9 + powerbell/src/main/res/values/colors.xml | 63 +++ powerbell/src/main/res/values/dimens.xml | 8 + powerbell/src/main/res/values/strings.xml | 22 + powerbell/src/main/res/values/styles.xml | 28 + powerbell/src/main/res/xml/file_provider.xml | 25 + powerbell/src/stage/AndroidManifest.xml | 24 + powerbell/src/stage/res/values/strings.xml | 6 + settings.gradle-demo | 39 ++ watchoutputinstaller/.gitignore | 1 + .../app_update_description.txt | 1 + watchoutputinstaller/build.gradle | 70 +++ watchoutputinstaller/build.properties | 8 + watchoutputinstaller/proguard-rules.pro | 17 + .../src/beta/AndroidManifest.xml | 22 + .../src/beta/res/values/strings.xml | 6 + .../src/main/AndroidManifest.xml | 73 +++ .../studio/watchoutputinstaller/App.java | 31 ++ .../watchoutputinstaller/FileListener.java | 80 +++ .../watchoutputinstaller/MainActivity.java | 312 ++++++++++++ .../beans/AppConfigs.java | 145 ++++++ .../receivers/MainReceiver.java | 40 ++ .../services/AssistantService.java | 110 ++++ .../services/MainService.java | 248 +++++++++ .../watchoutputinstaller/utils/FileUtil.java | 47 ++ .../utils/NotificationUtil.java | 82 +++ .../utils/PackageUtil.java | 30 ++ .../utils/ServiceUtil.java | 35 ++ .../views/ListViewForScrollView.java | 77 +++ .../src/main/res/drawable/ic_launcher.xml | 11 + .../res/drawable/ic_launcher_background.xml | 171 +++++++ .../res/drawable/ic_launcher_foreground.xml | 11 + .../src/main/res/drawable/ic_winboll.xml | 11 + .../src/main/res/drawable/shape_gradient.xml | 10 + .../activity_installcompletedfollowup.xml | 13 + .../src/main/res/layout/activity_main.xml | 142 ++++++ .../src/main/res/layout/installitem.xml | 15 + .../src/main/res/layout/toast_custom_view.xml | 38 ++ .../src/main/res/values/attrs.xml | 9 + .../src/main/res/values/colors.xml | 11 + .../src/main/res/values/strings.xml | 3 + .../src/main/res/values/themes.xml | 14 + .../src/main/res/xml/provider_paths.xml | 26 + .../src/stage/AndroidManifest.xml | 22 + .../src/stage/res/values/strings.xml | 6 + winboll-shared/.gitignore | 1 + winboll-shared/build.gradle | 46 ++ winboll-shared/build.properties | 8 + winboll-shared/proguard-rules.pro | 17 + winboll-shared/src/main/AndroidManifest.xml | 51 ++ .../assets/winboll/studio/html/index.html | 241 +++++++++ .../java/cc/winboll/studio/intent/action.java | 13 + .../shared/activities/AboutActivity.java | 87 ++++ .../shared/activities/HelpActivity.java | 139 +++++ .../cc/winboll/studio/shared/ads/ADsView.java | 240 +++++++++ .../studio/shared/app/AppVersionUtils.java | 153 ++++++ .../winboll/studio/shared/app/BaseBean.java | 284 +++++++++++ .../studio/shared/app/CrashHandler.java | 215 ++++++++ .../winboll/studio/shared/app/FileUtils.java | 150 ++++++ .../app/MyActivityLifecycleCallbacks.java | 101 ++++ .../studio/shared/app/WinBollActivity.java | 468 +++++++++++++++++ .../shared/app/WinBollActivityManager.java | 315 ++++++++++++ .../studio/shared/app/WinBollApplication.java | 88 ++++ .../winboll/studio/shared/bean/DebugBean.java | 75 +++ .../winboll/studio/shared/git/IAPPFiles.java | 60 +++ .../studio/shared/log/LogActivity.java | 65 +++ .../winboll/studio/shared/log/LogUtils.java | 370 ++++++++++++++ .../studio/shared/log/LogUtilsBean.java | 71 +++ .../shared/log/LogUtilsClassTAGBean.java | 88 ++++ .../cc/winboll/studio/shared/log/LogView.java | 386 ++++++++++++++ .../studio/shared/log/LogViewThread.java | 79 +++ .../shared/service/AssistantService.java | 95 ++++ .../service/EWUIStatusIconDrawable.java | 35 ++ .../service/IWinBollClientServiceBinder.java | 17 + .../shared/service/WinBollClientService.java | 193 +++++++ .../service/WinBollClientServiceBean.java | 77 +++ .../studio/shared/service/WinBollMail.java | 22 + .../winboll/studio/shared/util/FileUtils.java | 123 +++++ .../winboll/studio/shared/util/MD5Utils.java | 37 ++ .../winboll/studio/shared/util/PrefUtils.java | 33 ++ .../studio/shared/util/ServiceUtils.java | 36 ++ .../winboll/studio/shared/util/UriUtils.java | 130 +++++ .../winboll/studio/shared/view/AboutView.java | 345 +++++++++++++ .../studio/shared/view/SimpleWebView.java | 38 ++ .../shared/view/StringToQrCodeView.java | 107 ++++ .../shared/view/WinBollServiceStatusView.java | 347 +++++++++++++ .../studio/shared/view/YesNoAlertDialog.java | 59 +++ .../studio/unittest/UnitTestActivity.java | 114 +++++ .../src/main/res/drawable/bg_shadow.xml | 41 ++ .../main/res/drawable/ic_dev_connected.xml | 11 + .../main/res/drawable/ic_dev_disconnected.xml | 11 + .../src/main/res/drawable/ic_email.xml | 11 + .../src/main/res/drawable/ic_email_alert.xml | 11 + .../src/main/res/drawable/ic_launcher.xml | 13 + .../res/drawable/ic_launcher_background.xml | 170 +++++++ .../res/drawable/ic_launcher_foreground.xml | 10 + .../src/main/res/drawable/ic_winboll.xml | 13 + .../src/main/res/drawable/ic_winbollbeta.xml | 11 + .../src/main/res/drawable/shape_gradient.xml | 10 + .../src/main/res/drawable/view_border.xml | 8 + .../src/main/res/drawable/winboll_help.xml | 27 + .../src/main/res/drawable/winboll_logo.xml | 48 ++ .../src/main/res/layout/activity_about.xml | 25 + .../src/main/res/layout/activity_help.xml | 21 + .../src/main/res/layout/activity_library.xml | 11 + .../src/main/res/layout/activity_log.xml | 17 + .../src/main/res/layout/activity_unittest.xml | 31 ++ .../src/main/res/layout/view_about_dev.xml | 64 +++ .../src/main/res/layout/view_about_www.xml | 23 + .../src/main/res/layout/view_ads.xml | 14 + .../src/main/res/layout/view_log.xml | 121 +++++ .../src/main/res/layout/view_logtag.xml | 32 ++ .../main/res/layout/view_string2qrcode.xml | 29 ++ .../src/main/res/layout/view_toast.xml | 32 ++ .../main/res/menu/toolbar_studio_debug.xml | 33 ++ .../res/menu/toolbar_winboll_shared_about.xml | 8 + .../res/menu/toolbar_winboll_shared_main.xml | 12 + .../src/main/res/values-v21/styles.xml | 5 + winboll-shared/src/main/res/values/array.xml | 11 + winboll-shared/src/main/res/values/attrs.xml | 11 + winboll-shared/src/main/res/values/colors.xml | 10 + .../src/main/res/values/strings.xml | 11 + winboll-shared/src/main/res/values/styles.xml | 17 + .../main/res/xml/network_security_config.xml | 6 + winboll.properties-demo | 10 + wvmapp/.gitignore | 1 + wvmapp/build.gradle | 58 +++ wvmapp/build.properties | 8 + wvmapp/proguard-rules.pro | 17 + wvmapp/src/main/AndroidManifest.xml | 22 + .../java/cc/winboll/studio/wvmapp/App.java | 14 + .../winboll/studio/wvmapp/MainActivity.java | 14 + .../main/res/drawable-hdpi/ic_launcher.png | Bin 0 -> 9397 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 0 -> 5237 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 0 -> 14383 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 0 -> 19388 bytes wvmapp/src/main/res/layout/main.xml | 11 + wvmapp/src/main/res/values-v21/styles.xml | 5 + wvmapp/src/main/res/values/strings.xml | 7 + wvmapp/src/main/res/values/styles.xml | 5 + 654 files changed, 35062 insertions(+) create mode 100644 .github/workflows/android.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 .winboll/Readme.txt create mode 100644 .winboll/bashChangeToBetaKeyStore.sh create mode 100644 .winboll/bashChangeToStageMGKeyStore.sh create mode 100644 .winboll/bashCheckGitCommitStatus.sh create mode 100644 .winboll/bashCommitAppPublishBuildFlagInfo.sh create mode 100644 .winboll/bashCommitLibReleaseBuildFlagInfo.sh create mode 100644 .winboll/bashPublishAPKAddTag.sh create mode 100644 .winboll/bashPublishDebugAPKAddTag.sh create mode 100644 .winboll/bashPublishLIBAddTag.sh create mode 100644 .winboll/winboll_app_build.gradle create mode 100644 .winboll/winboll_lib_build.gradle create mode 100644 .winboll/winboll_lint_build.gradle create mode 100644 LICENSE create mode 100644 README.md create mode 100644 aes/.gitignore create mode 100644 aes/app_update_description.txt create mode 100644 aes/build.gradle create mode 100644 aes/build.properties create mode 100644 aes/proguard-rules.pro create mode 100644 aes/src/beta/AndroidManifest.xml create mode 100644 aes/src/beta/res/values/strings.xml create mode 100644 aes/src/main/AndroidManifest.xml create mode 100644 aes/src/main/java/cc/winboll/studio/aes/App.java create mode 100644 aes/src/main/java/cc/winboll/studio/aes/MainActivity.java create mode 100644 aes/src/main/res/values/strings.xml create mode 100644 aes/src/main/res/values/styles.xml create mode 100644 aes/src/stage/AndroidManifest.xml create mode 100644 aes/src/stage/res/values/strings.xml create mode 100644 app/app.md create mode 100644 app/app.perl create mode 100644 app/app.php create mode 100644 app/app.py create mode 100644 app/app.sh create mode 100644 app/app.txt create mode 100644 app/app_update_description.txt create mode 100644 app/build.gradle create mode 100644 app/build.properties create mode 100644 app/proguard-rules.pro create mode 100644 app/src/beta/AndroidManifest.xml create mode 100644 app/src/beta/res/values/strings.xml create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/cc/winboll/studio/app/App.java create mode 100644 app/src/main/java/cc/winboll/studio/app/MainActivity.java create mode 100644 app/src/main/res/drawable/ic_launcher.xml create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/shape_gradient.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/view_toast.xml create mode 100644 app/src/main/res/menu/toolbar_winboll_app_main.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/styles.xml create mode 100644 app/src/main/res/xml/studio_provider.xml create mode 100644 app/src/stage/AndroidManifest.xml create mode 100644 app/src/stage/res/values/strings.xml create mode 100644 appbase/.gitignore create mode 100644 appbase/app_update_description.txt create mode 100644 appbase/build.gradle create mode 100644 appbase/build.properties create mode 100644 appbase/proguard-rules.pro create mode 100644 appbase/src/beta/AndroidManifest.xml create mode 100644 appbase/src/beta/res/values/strings.xml create mode 100644 appbase/src/main/AndroidManifest.xml create mode 100644 appbase/src/main/java/cc/winboll/studio/appbase/App.java create mode 100644 appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java create mode 100644 appbase/src/main/res/drawable/ic_launcher.png create mode 100644 appbase/src/main/res/layout/activity_main.xml create mode 100644 appbase/src/main/res/values-v21/styles.xml create mode 100644 appbase/src/main/res/values/colors.xml create mode 100644 appbase/src/main/res/values/strings.xml create mode 100644 appbase/src/main/res/values/styles.xml create mode 100644 appbase/src/stage/AndroidManifest.xml create mode 100644 appbase/src/stage/res/values/strings.xml create mode 100644 apputils/app_update_description.txt create mode 100644 apputils/build.gradle create mode 100644 apputils/build.properties create mode 100644 apputils/proguard-rules.pro create mode 100644 apputils/src/beta/AndroidManifest.xml create mode 100644 apputils/src/beta/res/values/strings.xml create mode 100644 apputils/src/main/AndroidManifest.xml create mode 100644 apputils/src/main/java/cc/winboll/studio/apputils/App.java create mode 100644 apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java create mode 100644 apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java create mode 100644 apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java create mode 100644 apputils/src/main/res/drawable/ic_launcher.xml create mode 100644 apputils/src/main/res/drawable/ic_launcher_background.xml create mode 100644 apputils/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 apputils/src/main/res/drawable/shape_gradient.xml create mode 100644 apputils/src/main/res/layout/activity_main.xml create mode 100644 apputils/src/main/res/layout/activity_teststringtoqrcodeview.xml create mode 100644 apputils/src/main/res/layout/activity_testwinboll.xml create mode 100644 apputils/src/main/res/layout/view_toast.xml create mode 100644 apputils/src/main/res/menu/toolbar_main.xml create mode 100644 apputils/src/main/res/menu/toolbar_testwinboll.xml create mode 100644 apputils/src/main/res/values/colors.xml create mode 100644 apputils/src/main/res/values/strings.xml create mode 100644 apputils/src/main/res/values/styles.xml create mode 100644 apputils/src/main/res/xml/studio_provider.xml create mode 100644 apputils/src/stage/AndroidManifest.xml create mode 100644 apputils/src/stage/res/values/strings.xml create mode 100644 autoinstaller/app_update_description.txt create mode 100644 autoinstaller/build.gradle create mode 100644 autoinstaller/build.properties create mode 100644 autoinstaller/proguard-rules.pro create mode 100644 autoinstaller/src/beta/AndroidManifest.xml create mode 100644 autoinstaller/src/beta/res/values/strings.xml create mode 100644 autoinstaller/src/main/AndroidManifest.xml create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/App.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/FileListener.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/MainActivity.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/beans/AppConfigs.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/receivers/MainReceiver.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/AssistantService.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/services/MainService.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/utils/FileUtil.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/utils/NotificationUtil.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/utils/PackageUtil.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/utils/ServiceUtil.java create mode 100644 autoinstaller/src/main/java/cc/winboll/studio/autoinstaller/views/ListViewForScrollView.java create mode 100644 autoinstaller/src/main/res/drawable/ic_launcher.xml create mode 100644 autoinstaller/src/main/res/drawable/ic_launcher_background.xml create mode 100644 autoinstaller/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 autoinstaller/src/main/res/drawable/ic_winboll.xml create mode 100644 autoinstaller/src/main/res/drawable/shape_gradient.xml create mode 100644 autoinstaller/src/main/res/layout/activity_installcompletedfollowup.xml create mode 100644 autoinstaller/src/main/res/layout/activity_main.xml create mode 100644 autoinstaller/src/main/res/layout/installitem.xml create mode 100644 autoinstaller/src/main/res/layout/toast_custom_view.xml create mode 100644 autoinstaller/src/main/res/values/attrs.xml create mode 100644 autoinstaller/src/main/res/values/colors.xml create mode 100644 autoinstaller/src/main/res/values/strings.xml create mode 100644 autoinstaller/src/main/res/values/themes.xml create mode 100644 autoinstaller/src/main/res/xml/provider_paths.xml create mode 100644 autoinstaller/src/stage/AndroidManifest.xml create mode 100644 autoinstaller/src/stage/res/values/strings.xml create mode 100644 build.gradle create mode 100644 demo/app_update_description.txt create mode 100644 demo/build.gradle create mode 100644 demo/build.properties create mode 100644 demo/proguard-rules.pro create mode 100644 demo/src/beta/AndroidManifest.xml create mode 100644 demo/src/beta/res/values/strings.xml create mode 100644 demo/src/main/AndroidManifest.xml create mode 100644 demo/src/main/java/cc/winboll/studio/demo/App.java create mode 100644 demo/src/main/java/cc/winboll/studio/demo/MainActivity.java create mode 100644 demo/src/main/res/drawable/ic_launcher.xml create mode 100644 demo/src/main/res/drawable/ic_launcher_background.xml create mode 100644 demo/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 demo/src/main/res/drawable/shape_gradient.xml create mode 100644 demo/src/main/res/layout/activity_main.xml create mode 100644 demo/src/main/res/layout/view_toast.xml create mode 100644 demo/src/main/res/menu/toolbar_about.xml create mode 100644 demo/src/main/res/menu/toolbar_main.xml create mode 100644 demo/src/main/res/values/colors.xml create mode 100644 demo/src/main/res/values/strings.xml create mode 100644 demo/src/main/res/values/styles.xml create mode 100644 demo/src/stage/AndroidManifest.xml create mode 100644 demo/src/stage/res/values/strings.xml create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 jc/README.md create mode 100644 jc/app_update_description.txt create mode 100644 jc/build.gradle create mode 100644 jc/build.properties create mode 100644 jc/proguard-rules.pro create mode 100644 jc/src/beta/AndroidManifest.xml create mode 100644 jc/src/beta/res/values/strings.xml create mode 100644 jc/src/main/AndroidManifest.xml create mode 100644 jc/src/main/java/cc/winboll/studio/jc/App.java create mode 100644 jc/src/main/java/cc/winboll/studio/jc/MainActivity.java create mode 100644 jc/src/main/res/drawable/ic_launcher.xml create mode 100644 jc/src/main/res/drawable/ic_launcher_background.xml create mode 100644 jc/src/main/res/drawable/ic_launcher_beta.xml create mode 100644 jc/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 jc/src/main/res/drawable/shape_gradient.xml create mode 100644 jc/src/main/res/layout/activity_main.xml create mode 100644 jc/src/main/res/layout/view_toast.xml create mode 100644 jc/src/main/res/menu/toolbar_about.xml create mode 100644 jc/src/main/res/menu/toolbar_main.xml create mode 100644 jc/src/main/res/values/colors.xml create mode 100644 jc/src/main/res/values/strings.xml create mode 100644 jc/src/main/res/values/styles.xml create mode 100644 jc/src/stage/AndroidManifest.xml create mode 100644 jc/src/stage/res/values/strings.xml create mode 100644 jcndk/AndroidManifest.xml create mode 100644 jcndk/META-INF/ANDROID.RSA create mode 100644 jcndk/META-INF/ANDROID.SF create mode 100644 jcndk/META-INF/MANIFEST.MF create mode 100644 jcndk/README.md create mode 100644 jcndk/assets/switch2bash.sh create mode 100644 jcndk/jni/Android.mk create mode 100644 jcndk/jni/Application.mk create mode 100644 jcndk/jni/hello-jni.cpp create mode 100644 jcndk/libs/armeabi-v7a/libhello-jni.so create mode 100644 jcndk/libs/x86/libhello-jni.so create mode 100644 jcndk/obj/local/armeabi-v7a/libhello-jni.so create mode 100644 jcndk/obj/local/armeabi-v7a/objs/hello-jni/hello-jni.o create mode 100644 jcndk/obj/local/armeabi-v7a/objs/hello-jni/hello-jni.o.d create mode 100644 jcndk/obj/local/x86/libhello-jni.so create mode 100644 jcndk/obj/local/x86/objs/hello-jni/hello-jni.o create mode 100644 jcndk/obj/local/x86/objs/hello-jni/hello-jni.o.d create mode 100644 jcndk/project.properties create mode 100644 jcndk/res/layout/view_main.xml create mode 100644 jcndk/res/values/strings.xml create mode 100644 jcndk/src/cc/winboll/studio/jcndk/FileUtils.java create mode 100644 jcndk/src/cc/winboll/studio/jcndk/HelloJni.java create mode 100644 jcndk/src/cc/winboll/studio/jcndk/services/JCMainService.java create mode 100644 libaes/.gitignore create mode 100644 libaes/build.gradle create mode 100644 libaes/build.properties create mode 100644 libaes/libs/colorpicker-20180319.jar create mode 100644 libaes/proguard-rules.pro create mode 100644 libaes/src/main/AndroidManifest.xml create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/DrawerMenuDataAdapter.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/ImagePagerAdapter.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/beans/AESThemeBean.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/beans/DrawerMenuBean.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/dialogs/LocalFileSelectDialog.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/dialogs/StoragePathDialog.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/LibraryActivity.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/SecondaryLibraryActivity.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/SecondaryLibraryFragment.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestAButtonFragment.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestASupportToolbarActivity.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestAToolbarActivity.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestDrawerFragmentActivity.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestViewPageFragment.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/utils/AESThemeUtil.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/utils/ScreenUtil.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/AButton.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/ACard.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/ADrawerMenuListView.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/AOHPCTCSeekBar.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/AOHPCTSCard.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/ASupportToolbar.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/ATickProgressBar.java create mode 100644 libaes/src/main/java/cc/winboll/studio/libaes/views/AToolbar.java create mode 100644 libaes/src/main/res/anim/normal_dialog_enter_center.xml create mode 100644 libaes/src/main/res/anim/normal_dialog_enter_corner.xml create mode 100644 libaes/src/main/res/anim/normal_dialog_exit_center.xml create mode 100644 libaes/src/main/res/anim/normal_dialog_exit_corner.xml create mode 100644 libaes/src/main/res/drawable/acard_frame_main.xml create mode 100644 libaes/src/main/res/drawable/atoolbar_frame.xml create mode 100644 libaes/src/main/res/drawable/btn_style.xml create mode 100644 libaes/src/main/res/drawable/default_shape.xml create mode 100644 libaes/src/main/res/drawable/ic_arrow_left_right_bold.xml create mode 100644 libaes/src/main/res/drawable/ic_arrow_up_circle_outline.xml create mode 100644 libaes/src/main/res/drawable/ohpcts_frame.xml create mode 100644 libaes/src/main/res/drawable/pressed_shape.xml create mode 100644 libaes/src/main/res/drawable/toast_frame.xml create mode 100644 libaes/src/main/res/layout/activity_drawer.xml create mode 100644 libaes/src/main/res/layout/activity_drawerfragment.xml create mode 100644 libaes/src/main/res/layout/activity_library.xml create mode 100644 libaes/src/main/res/layout/activity_secondarylibrary.xml create mode 100644 libaes/src/main/res/layout/activity_test_aboutfragment.xml create mode 100644 libaes/src/main/res/layout/activity_testasupporttoolbar.xml create mode 100644 libaes/src/main/res/layout/activity_testatoolbar.xml create mode 100644 libaes/src/main/res/layout/dialog_storagepath.xml create mode 100644 libaes/src/main/res/layout/fragment_abutton.xml create mode 100644 libaes/src/main/res/layout/fragment_secondarylibrary.xml create mode 100644 libaes/src/main/res/layout/fragment_test1.xml create mode 100644 libaes/src/main/res/layout/fragment_test2.xml create mode 100644 libaes/src/main/res/layout/fragment_viewpage.xml create mode 100644 libaes/src/main/res/layout/listview_drawermenu.xml create mode 100644 libaes/src/main/res/layout/view_toast.xml create mode 100644 libaes/src/main/res/layout/viewpage_acard.xml create mode 100644 libaes/src/main/res/layout/viewpage_aohpctccard.xml create mode 100644 libaes/src/main/res/layout/viewpage_aohpctcsb.xml create mode 100644 libaes/src/main/res/layout/viewpage_atickprogressbar.xml create mode 100644 libaes/src/main/res/menu/toolbar_apptheme.xml create mode 100644 libaes/src/main/res/menu/toolbar_drawerbase.xml create mode 100644 libaes/src/main/res/menu/toolbar_library.xml create mode 100644 libaes/src/main/res/menu/toolbar_secondarylibrary.xml create mode 100644 libaes/src/main/res/values-zh/string.xml create mode 100644 libaes/src/main/res/values/attrs.xml create mode 100644 libaes/src/main/res/values/colors.xml create mode 100644 libaes/src/main/res/values/dimens.xml create mode 100644 libaes/src/main/res/values/strings.xml create mode 100644 libaes/src/main/res/values/styles.xml create mode 100644 libappbase/.gitignore create mode 100644 libappbase/build.gradle create mode 100644 libappbase/build.properties create mode 100644 libappbase/proguard-rules.pro create mode 100644 libappbase/src/main/AndroidManifest.xml create mode 100644 libappbase/src/main/java/cc/winboll/studio/CrashHandler.java create mode 100644 libappbase/src/main/java/cc/winboll/studio/GlobalApplication.java create mode 100644 libappbase/src/main/java/cc/winboll/studio/libappbase/LibraryActivity.java create mode 100644 libappbase/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 libappbase/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 libappbase/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 libappbase/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 libappbase/src/main/res/layout/library.xml create mode 100644 libappbase/src/main/res/values-v21/styles.xml create mode 100644 libappbase/src/main/res/values/strings.xml create mode 100644 libappbase/src/main/res/values/styles.xml create mode 100644 libapputils/.gitignore create mode 100644 libapputils/build.gradle create mode 100644 libapputils/build.properties create mode 100644 libapputils/proguard-rules.pro create mode 100644 libapputils/src/main/AndroidManifest.xml create mode 100644 libapputils/src/main/assets/winboll/studio/html/index.html create mode 100644 libapputils/src/main/assets/winboll/studio/html/javascript_test.html create mode 100644 libapputils/src/main/assets/winboll/studio/png/apple.png create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AboutActivity.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/activities/AssetsHtmlActivity.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/activities/QRCodeDecodeActivity.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/ads/ADsView.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/AppVersionUtils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/CrashHandler.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/MyActivityLifecycleCallbacks.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivity.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollActivityManager.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/app/WinBollApplication.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/bean/BaseBean.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/bean/DebugBean.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/git/IAPPFiles.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/intent/action.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogActivity.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtilsBean.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogUtilsClassTAGBean.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogView.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/log/LogViewThread.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/service/AssistantService.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/service/EWUIStatusIconDrawable.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/service/IWinBollClientServiceBinder.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/service/WinBollClientService.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/service/WinBollClientServiceBean.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/service/WinBollMail.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/util/FileUtils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/util/MD5Utils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/util/PrefUtils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/util/QRCodeGenerator.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/util/ServiceUtils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/util/UriUtils.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/view/AboutView.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/view/SimpleWebView.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/view/StringToQrCodeView.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/view/WinBollServiceStatusView.java create mode 100644 libapputils/src/main/java/cc/winboll/studio/libapputils/view/YesNoAlertDialog.java create mode 100644 libapputils/src/main/res/drawable/bg_shadow.xml create mode 100644 libapputils/src/main/res/drawable/ic_dev_connected.xml create mode 100644 libapputils/src/main/res/drawable/ic_dev_disconnected.xml create mode 100644 libapputils/src/main/res/drawable/ic_email.xml create mode 100644 libapputils/src/main/res/drawable/ic_email_alert.xml create mode 100644 libapputils/src/main/res/drawable/ic_launcher.xml create mode 100644 libapputils/src/main/res/drawable/ic_launcher_background.xml create mode 100644 libapputils/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 libapputils/src/main/res/drawable/ic_winboll.xml create mode 100644 libapputils/src/main/res/drawable/ic_winbollbeta.xml create mode 100644 libapputils/src/main/res/drawable/shape_gradient.xml create mode 100644 libapputils/src/main/res/drawable/view_border.xml create mode 100644 libapputils/src/main/res/drawable/winboll_help.xml create mode 100644 libapputils/src/main/res/drawable/winboll_logo.xml create mode 100644 libapputils/src/main/res/drawable/winboll_point.xml create mode 100644 libapputils/src/main/res/layout/activity_about.xml create mode 100644 libapputils/src/main/res/layout/activity_assetshtml.xml create mode 100644 libapputils/src/main/res/layout/activity_library.xml create mode 100644 libapputils/src/main/res/layout/activity_log.xml create mode 100644 libapputils/src/main/res/layout/activity_qrcodedecode.xml create mode 100644 libapputils/src/main/res/layout/activity_unittest.xml create mode 100644 libapputils/src/main/res/layout/view_about_dev.xml create mode 100644 libapputils/src/main/res/layout/view_about_www.xml create mode 100644 libapputils/src/main/res/layout/view_ads.xml create mode 100644 libapputils/src/main/res/layout/view_log.xml create mode 100644 libapputils/src/main/res/layout/view_logtag.xml create mode 100644 libapputils/src/main/res/layout/view_string2qrcode.xml create mode 100644 libapputils/src/main/res/layout/view_toast.xml create mode 100644 libapputils/src/main/res/menu/toolbar_studio_debug.xml create mode 100644 libapputils/src/main/res/menu/toolbar_winboll_shared_about.xml create mode 100644 libapputils/src/main/res/menu/toolbar_winboll_shared_main.xml create mode 100644 libapputils/src/main/res/values-v21/styles.xml create mode 100644 libapputils/src/main/res/values/array.xml create mode 100644 libapputils/src/main/res/values/attrs.xml create mode 100644 libapputils/src/main/res/values/colors.xml create mode 100644 libapputils/src/main/res/values/strings.xml create mode 100644 libapputils/src/main/res/values/styles.xml create mode 100644 libapputils/src/main/res/xml/network_security_config.xml create mode 100644 libjc/.classpath create mode 100644 libjc/.gitignore create mode 100644 libjc/.project create mode 100644 libjc/README.md create mode 100644 libjc/build.gradle create mode 100644 libjc/build.properties create mode 100644 libjc/jcc/.classpath create mode 100644 libjc/jcc/.gitignore create mode 100644 libjc/jcc/.project create mode 100644 libjc/jcc/MANIFEST.MF create mode 100644 libjc/jcc/bash_build_jar.sh create mode 100644 libjc/jcc/src/Main.java create mode 100644 libjc/jcc/test_jar.sh create mode 100644 libjc/proguard-rules.pro create mode 100644 libjc/src/main/AndroidManifest.xml create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/JCCommandThread.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/JCErrorStream.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/JCErrorThread.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/JCMainThread.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/JCOutputStream.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/JCOutputThread.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/Main.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/TestClassA.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/TestClassB.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/bean/BaseBean.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/cmd/ListJarClassHasMain.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/net/JCSocketClient.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/net/JCSocketServer.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/net/MesaageBean.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/task/TermuxUniteTask.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/util/ConsoleUtils.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/util/FileUtils.java create mode 100644 libjc/src/main/java/cc/winboll/studio/libjc/util/LogUtils.java create mode 100644 libjc/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 libjc/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 libjc/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 libjc/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 libjc/src/main/res/layout/library.xml create mode 100644 libjc/src/main/res/values-v21/styles.xml create mode 100644 libjc/src/main/res/values/strings.xml create mode 100644 libjc/src/main/res/values/styles.xml create mode 100644 local.properties-demo create mode 100644 mj/app_update_description.txt create mode 100644 mj/build.gradle create mode 100644 mj/build.properties create mode 100644 mj/proguard-rules.pro create mode 100644 mj/src/beta/AndroidManifest.xml create mode 100644 mj/src/beta/res/values/strings.xml create mode 100644 mj/src/main/AndroidManifest.xml create mode 100644 mj/src/main/java/cc/winboll/studio/mj/App.java create mode 100644 mj/src/main/java/cc/winboll/studio/mj/MainActivity.java create mode 100644 mj/src/main/java/cc/winboll/studio/mj/activities/AboutActivity.java create mode 100644 mj/src/main/res/drawable/ic_launcher.xml create mode 100644 mj/src/main/res/drawable/ic_launcher_background.xml create mode 100644 mj/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 mj/src/main/res/drawable/shape_gradient.xml create mode 100644 mj/src/main/res/layout/activity_about.xml create mode 100644 mj/src/main/res/layout/activity_main.xml create mode 100644 mj/src/main/res/layout/view_toast.xml create mode 100644 mj/src/main/res/menu/toolbar_about.xml create mode 100644 mj/src/main/res/menu/toolbar_main.xml create mode 100644 mj/src/main/res/values/colors.xml create mode 100644 mj/src/main/res/values/strings.xml create mode 100644 mj/src/main/res/values/styles.xml create mode 100644 mj/src/stage/AndroidManifest.xml create mode 100644 mj/src/stage/res/values/strings.xml create mode 100644 powerbell/.gitignore create mode 100644 powerbell/README.md create mode 100644 powerbell/app_update_description.txt create mode 100644 powerbell/build.gradle create mode 100644 powerbell/build.properties create mode 100644 powerbell/proguard-rules.pro create mode 100644 powerbell/src/beta/AndroidManifest.xml create mode 100644 powerbell/src/beta/res/values-zh/string.xml create mode 100644 powerbell/src/beta/res/values/strings.xml create mode 100644 powerbell/src/main/AndroidManifest.xml create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/GlobalApplication.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/MainActivity.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/activities/AboutActivity.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/activities/BackgroundPictureActivity.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/activities/ClearRecordActivity.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/beans/AppConfigBean.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/beans/BackgroundPictureBean.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/beans/BatteryInfoBean.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/beans/ControlCenterServiceBean.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/beans/NotificationMessage.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/dialogs/BackgroundPicturePreviewDialog.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/dialogs/YesNoAlertDialog.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/fragments/MainViewFragment.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/handlers/ControlCenterServiceHandler.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/ControlCenterServiceReceiver.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/GlobalApplicationReceiver.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/receivers/MainReceiver.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/services/AssistantService.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/services/ControlCenterService.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/threads/RemindThread.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/AppCacheUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/AppConfigUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/BackgroundPictureUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/BatteryUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/DateUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/FileUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/ImageUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/NotificationUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/ServiceUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/StringUtils.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/utils/UriUtil.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/views/BatteryDrawable.java create mode 100644 powerbell/src/main/java/cc/winboll/studio/powerbell/views/VerticalSeekBar.java create mode 100644 powerbell/src/main/res/drawable/bg_frame.xml create mode 100644 powerbell/src/main/res/drawable/blank10x10.png create mode 100644 powerbell/src/main/res/drawable/charge.png create mode 100644 powerbell/src/main/res/drawable/cursor_pointer.xml create mode 100644 powerbell/src/main/res/drawable/ic_launcher.xml create mode 100644 powerbell/src/main/res/drawable/ic_launcher_background.xml create mode 100644 powerbell/src/main/res/drawable/ic_launcher_beta.xml create mode 100644 powerbell/src/main/res/drawable/usege.png create mode 100644 powerbell/src/main/res/drawable/xiaobai.png create mode 100644 powerbell/src/main/res/layout/activity_about.xml create mode 100644 powerbell/src/main/res/layout/activity_backgroundpicture.xml create mode 100644 powerbell/src/main/res/layout/activity_clearrecord.xml create mode 100644 powerbell/src/main/res/layout/activity_main.xml create mode 100644 powerbell/src/main/res/layout/activity_unbelievable.xml create mode 100644 powerbell/src/main/res/layout/dialog_backgroundpicturepreview.xml create mode 100644 powerbell/src/main/res/layout/fragment_mainview.xml create mode 100644 powerbell/src/main/res/layout/view_remindnotification.xml create mode 100644 powerbell/src/main/res/layout/view_servicenotification.xml create mode 100644 powerbell/src/main/res/menu/toolbar_main.xml create mode 100644 powerbell/src/main/res/values-zh/strings.xml create mode 100644 powerbell/src/main/res/values/attrs.xml create mode 100644 powerbell/src/main/res/values/colors.xml create mode 100644 powerbell/src/main/res/values/dimens.xml create mode 100644 powerbell/src/main/res/values/strings.xml create mode 100644 powerbell/src/main/res/values/styles.xml create mode 100644 powerbell/src/main/res/xml/file_provider.xml create mode 100644 powerbell/src/stage/AndroidManifest.xml create mode 100644 powerbell/src/stage/res/values/strings.xml create mode 100644 settings.gradle-demo create mode 100644 watchoutputinstaller/.gitignore create mode 100644 watchoutputinstaller/app_update_description.txt create mode 100644 watchoutputinstaller/build.gradle create mode 100644 watchoutputinstaller/build.properties create mode 100644 watchoutputinstaller/proguard-rules.pro create mode 100644 watchoutputinstaller/src/beta/AndroidManifest.xml create mode 100644 watchoutputinstaller/src/beta/res/values/strings.xml create mode 100644 watchoutputinstaller/src/main/AndroidManifest.xml create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/App.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/FileListener.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/MainActivity.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/beans/AppConfigs.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/receivers/MainReceiver.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/services/AssistantService.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/services/MainService.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/utils/FileUtil.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/utils/NotificationUtil.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/utils/PackageUtil.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/utils/ServiceUtil.java create mode 100644 watchoutputinstaller/src/main/java/cc/winboll/studio/watchoutputinstaller/views/ListViewForScrollView.java create mode 100644 watchoutputinstaller/src/main/res/drawable/ic_launcher.xml create mode 100644 watchoutputinstaller/src/main/res/drawable/ic_launcher_background.xml create mode 100644 watchoutputinstaller/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 watchoutputinstaller/src/main/res/drawable/ic_winboll.xml create mode 100644 watchoutputinstaller/src/main/res/drawable/shape_gradient.xml create mode 100644 watchoutputinstaller/src/main/res/layout/activity_installcompletedfollowup.xml create mode 100644 watchoutputinstaller/src/main/res/layout/activity_main.xml create mode 100644 watchoutputinstaller/src/main/res/layout/installitem.xml create mode 100644 watchoutputinstaller/src/main/res/layout/toast_custom_view.xml create mode 100644 watchoutputinstaller/src/main/res/values/attrs.xml create mode 100644 watchoutputinstaller/src/main/res/values/colors.xml create mode 100644 watchoutputinstaller/src/main/res/values/strings.xml create mode 100644 watchoutputinstaller/src/main/res/values/themes.xml create mode 100644 watchoutputinstaller/src/main/res/xml/provider_paths.xml create mode 100644 watchoutputinstaller/src/stage/AndroidManifest.xml create mode 100644 watchoutputinstaller/src/stage/res/values/strings.xml create mode 100644 winboll-shared/.gitignore create mode 100644 winboll-shared/build.gradle create mode 100644 winboll-shared/build.properties create mode 100644 winboll-shared/proguard-rules.pro create mode 100644 winboll-shared/src/main/AndroidManifest.xml create mode 100644 winboll-shared/src/main/assets/winboll/studio/html/index.html create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/intent/action.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/activities/AboutActivity.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/activities/HelpActivity.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/ads/ADsView.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/AppVersionUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/BaseBean.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/CrashHandler.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/FileUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/MyActivityLifecycleCallbacks.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/WinBollActivity.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/WinBollActivityManager.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/app/WinBollApplication.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/bean/DebugBean.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/git/IAPPFiles.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/log/LogActivity.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/log/LogUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/log/LogUtilsBean.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/log/LogUtilsClassTAGBean.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/log/LogView.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/log/LogViewThread.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/service/AssistantService.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/service/EWUIStatusIconDrawable.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/service/IWinBollClientServiceBinder.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/service/WinBollClientService.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/service/WinBollClientServiceBean.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/service/WinBollMail.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/util/FileUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/util/MD5Utils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/util/PrefUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/util/ServiceUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/util/UriUtils.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/view/AboutView.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/view/SimpleWebView.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/view/StringToQrCodeView.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/view/WinBollServiceStatusView.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/shared/view/YesNoAlertDialog.java create mode 100644 winboll-shared/src/main/java/cc/winboll/studio/unittest/UnitTestActivity.java create mode 100644 winboll-shared/src/main/res/drawable/bg_shadow.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_dev_connected.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_dev_disconnected.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_email.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_email_alert.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_launcher.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_launcher_background.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_winboll.xml create mode 100644 winboll-shared/src/main/res/drawable/ic_winbollbeta.xml create mode 100644 winboll-shared/src/main/res/drawable/shape_gradient.xml create mode 100644 winboll-shared/src/main/res/drawable/view_border.xml create mode 100644 winboll-shared/src/main/res/drawable/winboll_help.xml create mode 100644 winboll-shared/src/main/res/drawable/winboll_logo.xml create mode 100644 winboll-shared/src/main/res/layout/activity_about.xml create mode 100644 winboll-shared/src/main/res/layout/activity_help.xml create mode 100644 winboll-shared/src/main/res/layout/activity_library.xml create mode 100644 winboll-shared/src/main/res/layout/activity_log.xml create mode 100644 winboll-shared/src/main/res/layout/activity_unittest.xml create mode 100644 winboll-shared/src/main/res/layout/view_about_dev.xml create mode 100644 winboll-shared/src/main/res/layout/view_about_www.xml create mode 100644 winboll-shared/src/main/res/layout/view_ads.xml create mode 100644 winboll-shared/src/main/res/layout/view_log.xml create mode 100644 winboll-shared/src/main/res/layout/view_logtag.xml create mode 100644 winboll-shared/src/main/res/layout/view_string2qrcode.xml create mode 100644 winboll-shared/src/main/res/layout/view_toast.xml create mode 100644 winboll-shared/src/main/res/menu/toolbar_studio_debug.xml create mode 100644 winboll-shared/src/main/res/menu/toolbar_winboll_shared_about.xml create mode 100644 winboll-shared/src/main/res/menu/toolbar_winboll_shared_main.xml create mode 100644 winboll-shared/src/main/res/values-v21/styles.xml create mode 100644 winboll-shared/src/main/res/values/array.xml create mode 100644 winboll-shared/src/main/res/values/attrs.xml create mode 100644 winboll-shared/src/main/res/values/colors.xml create mode 100644 winboll-shared/src/main/res/values/strings.xml create mode 100644 winboll-shared/src/main/res/values/styles.xml create mode 100644 winboll-shared/src/main/res/xml/network_security_config.xml create mode 100644 winboll.properties-demo create mode 100644 wvmapp/.gitignore create mode 100644 wvmapp/build.gradle create mode 100644 wvmapp/build.properties create mode 100644 wvmapp/proguard-rules.pro create mode 100644 wvmapp/src/main/AndroidManifest.xml create mode 100644 wvmapp/src/main/java/cc/winboll/studio/wvmapp/App.java create mode 100644 wvmapp/src/main/java/cc/winboll/studio/wvmapp/MainActivity.java create mode 100644 wvmapp/src/main/res/drawable-hdpi/ic_launcher.png create mode 100644 wvmapp/src/main/res/drawable-mdpi/ic_launcher.png create mode 100644 wvmapp/src/main/res/drawable-xhdpi/ic_launcher.png create mode 100644 wvmapp/src/main/res/drawable-xxhdpi/ic_launcher.png create mode 100644 wvmapp/src/main/res/layout/main.xml create mode 100644 wvmapp/src/main/res/values-v21/styles.xml create mode 100644 wvmapp/src/main/res/values/strings.xml create mode 100644 wvmapp/src/main/res/values/styles.xml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..b25cbb5 --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,87 @@ +name: Android CI + +# 触发器 +on: + push: + tags: + - *-beta + pull_request: + tags: + - *-beta + +jobs: + build: + + runs-on: ubuntu-latest + + # 设置 JDK 环境 + steps: + - uses: actions/checkout@v3 + - name: set up JDK 11 + uses: actions/setup-java@v3 + with: + java-version: '11' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # 获取应用打包秘钥库 + - name: Checkout Android Keystore + uses: actions/checkout@v3 + with: + repository: zhangsken/keystore # 存储应用打包用的 keystore 的仓库(格式:用户名/仓库名) + token: ${{ secrets.APP_SECRET_TOKEN_1 }} # 连接仓库的 token , 需要单独配置 + path: keystore # 仓库的根目录名 + + # 打包 Stage Release 版本应用 + - name: Build with Gradle + run: bash ./gradlew assembleBetaRelease + # 创建release + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.APP_SECRET_TOKEN_1 }} + # GitHub 会自动创建 GITHUB_TOKEN 密码以在工作流程中使用。 + # 您可以使用 GITHUB_TOKEN 在工作流程运行中进行身份验证。 + # 当您启用 GitHub Actions 时,GitHub 在您的仓库中安装 GitHub 应用程序。 + # GITHUB_TOKEN 密码是一种 GitHub 应用程序 安装访问令牌。 + # 您可以使用安装访问令牌代表仓库中安装的 GitHub 应用程序 进行身份验证。 + # 令牌的权限仅限于包含您的工作流程的仓库。 更多信息请参阅“GITHUB_TOKEN 的权限”。 + # 在每个作业开始之前, GitHub 将为作业提取安装访问令牌。 令牌在作业完成后过期。 + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + + # 获取 APK 版本号 + - name: Get Version Name + uses: actions/github-script@v3 + id: get-version + with: + script: | + const str=process.env.GITHUB_REF; + return str.substring(str.indexOf("v")); + result-encoding: string + # 上传至 Release 的资源 + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.APP_SECRET_TOKEN_1 }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # 上传网址,无需改动 + #asset_path: app/build/outputs/apk/release/app-release.apk # 上传路径(Release) + asset_path: app/build/outputs/apk/beta/release/app-beta-release.apk # 上传路径(WinBoll Stage Release) + asset_name: WinBoll-${{steps.get-version.outputs.result}}0.apk # 资源名 + asset_content_type: application/vnd.android.package-archiv # 资源类型 + + # 存档打包的文件 + - name: Archive production artifacts + uses: actions/upload-artifact@v2 + with: + name: build + path: app/build/outputs # 将打包之后的文件全部上传(里面会有混淆的 map 文件) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..88afb93 --- /dev/null +++ b/.gitignore @@ -0,0 +1,104 @@ +# Built application files +*.apk +*.aar +*.ap_ +*.aab + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ +# Uncomment the following line in case you need and you don't have the release build type files in your app +# release/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/workspace.xml +.idea/tasks.xml +.idea/gradle.xml +.idea/assetWizardSettings.xml +.idea/dictionaries +.idea/libraries +# Android Studio 3 in .gitignore file. +.idea/caches +.idea/modules.xml +# Comment next line if keeping position of elements in Navigation Editor is relevant for you +.idea/navEditor.xml + +# Keystore files +# Uncomment the following lines if you do not want to check your keystore files in. +*.jks +*.keystore + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild +.cxx/ + +# Google Services (e.g. APIs or Firebase) +# google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md + +# Version control +vcs.xml + +# lint +lint/intermediates/ +lint/generated/ +lint/outputs/ +lint/tmp/ +# lint/reports/ + +# Android Profiling +*.hprof + +# Custom +.androidide +lint-results.xml +lint-results.html +winboll.properties +local.properties + +## 忽略模块应用编译配置 +/settings.gradle + +## 忽略 srv 纠结问题 +/srv/ + +## 忽略 winboll-x 文件夹 +/winboll-x/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..e69de29 diff --git a/.winboll/Readme.txt b/.winboll/Readme.txt new file mode 100644 index 0000000..56949ff --- /dev/null +++ b/.winboll/Readme.txt @@ -0,0 +1,18 @@ +## WinBoll 主机编译事项提醒 + +## 类库类型源码发布 +# 类库发布使用以下面命令 +git pull && bash .winboll/bashPublishLIBAddTag.sh <类库模块文件夹名称> + +## 纯应用类型源码发布 +# 应用发布使用以下命令 +git pull && bash .winboll/bashPublishAPKAddTag.sh <应用模块文件夹名称> + +## 编译时提问。Add Github Workflows Tag? (yes/No) +回答yes: 将会添加一个 GitHub 工作流标签 + GitHub 仓库会执行以该标签为标志的编译工作流。 +回答No(默认): 就忽略 GitHub 标签,忽略 GitHub 工作流调用。 + +## Github Workflows 工作流设置注意事项 +应用名称改变时需要修改.github/workflows/android.yml文件设置, +在第79行:asset_name: 处有应用包名称设置。 diff --git a/.winboll/bashChangeToBetaKeyStore.sh b/.winboll/bashChangeToBetaKeyStore.sh new file mode 100644 index 0000000..28f86f6 --- /dev/null +++ b/.winboll/bashChangeToBetaKeyStore.sh @@ -0,0 +1,3 @@ +#!/bin/usr/bash +## Change Back To Beta KeyStore in keystore module. +cd keystore;git reset --hard f5bc75ff45fcb8894b5bd3f49b91bdd8fe3c317e;cd .. diff --git a/.winboll/bashChangeToStageMGKeyStore.sh b/.winboll/bashChangeToStageMGKeyStore.sh new file mode 100644 index 0000000..8b4bd2a --- /dev/null +++ b/.winboll/bashChangeToStageMGKeyStore.sh @@ -0,0 +1,3 @@ +#!/bin/usr/bash +## Change Back To StageMG KeyStore in keystore module. +cd keystore;git reset --hard d22519b11253f85f495400b01b6373e9657defb4;cd .. diff --git a/.winboll/bashCheckGitCommitStatus.sh b/.winboll/bashCheckGitCommitStatus.sh new file mode 100644 index 0000000..1adb83c --- /dev/null +++ b/.winboll/bashCheckGitCommitStatus.sh @@ -0,0 +1,32 @@ +#!/usr/bin/bash + +# 使用 `-z` 命令检查变量是否为空 +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Script parameter error: $0" + exit 2 +fi + +# 进入项目根目录 +cd ${1} +echo -e "Work dir : \n"`pwd` + +git config --global --add safe.directory "${1}" +echo "Current dir : "`pwd` +versionName=${2} + +## 设置要检查的标签 +tag="v"${versionName} + +## 如果Git已经提交了所有代码就执行标签检查操作 +if [[ -n $(git diff --stat) ]] +then + echo 'Source is no commit git completely, tag action cancel.' + exit 1 +else + echo "Git status is clean." + if [ "$(git tag -l ${tag})" == "${tag}" ]; then + echo "Tag ${tag} exist." + exit 2 + fi + echo "${0}: Git tag is checked OK: (${tag})" +fi diff --git a/.winboll/bashCommitAppPublishBuildFlagInfo.sh b/.winboll/bashCommitAppPublishBuildFlagInfo.sh new file mode 100644 index 0000000..791e58c --- /dev/null +++ b/.winboll/bashCommitAppPublishBuildFlagInfo.sh @@ -0,0 +1,17 @@ +#!/usr/bin/bash +## 提交新的 APK 编译配置标志信息,并推送到Git仓库。 + +# 使用 `-z` 命令检查变量是否为空 +if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ]; then + echo "$0 Script parameter error." + echo "(Script Demo : [ bashCommitAppPublishBuildFlagInfo.sh ])" + exit 2 +fi + +# 进入项目根目录 +cd ${1} +echo -e "Work dir : \n"`pwd` + +git add . +git commit -m "<$4>APK ${2} ${3} Publish." +git push origin && git push origin --tags diff --git a/.winboll/bashCommitLibReleaseBuildFlagInfo.sh b/.winboll/bashCommitLibReleaseBuildFlagInfo.sh new file mode 100644 index 0000000..d424a3a --- /dev/null +++ b/.winboll/bashCommitLibReleaseBuildFlagInfo.sh @@ -0,0 +1,48 @@ +#!/usr/bin/bash +## 提交新的 Library 编译配置标志信息,并推送到Git仓库。 + +# 检查是否指定了将要发布的类库名称 +# 使用 `-z` 命令检查变量是否为空 +if [ -z "$1" ]; then + echo "Library name error: $0" + exit 2 +fi + +## 开始执行脚本 +echo -e "Current dir : \n"`pwd` +# 检查当前目录是否是项目根目录 +if [[ -e $1/build.properties ]]; then + echo "The $1/build.properties file exists." + echo -e "Work dir correctly." +else + echo "The $1/build.properties file does not exist." + echo "尝试进入根目录" + # 进入项目根目录 + cd .. +fi +## 本脚本需要在项目根目录下执行 +echo -e "Current dir : \n"`pwd` +# 检查当前目录是否是项目根目录 +if [[ -e $1/build.properties ]]; then + echo "The $1/build.properties file exists." + echo -e "Work dir correctly." +else + echo "The $1/build.properties file does not exist." + echo -e "Work dir error." + exit 1 +fi + +# 就读取脚本 .winboll/winboll_app_build.gradle 生成的 publishVersion。 +# 如果文件中有 publishVersion 这一项, +# 使用grep找到包含"publishVersion="的那一行,然后用awk提取其后的值 +PUBLISH_VERSION=$(grep -o "publishVersion=.*" $1/build.properties | awk -F '=' '{print $2}') +echo "< $1/build.properties publishVersion : ${PUBLISH_VERSION} >" +## 设新的 WinBoll 标签 +# 脚本调试时使用 +#tag="v7.6.4-test1" +# 正式设置标签时使用 +#tag="v"${PUBLISH_VERSION} + +git add . +git commit -m "<$1>Library Release ${PUBLISH_VERSION}" +git push origin && git push origin --tags diff --git a/.winboll/bashPublishAPKAddTag.sh b/.winboll/bashPublishAPKAddTag.sh new file mode 100644 index 0000000..ebdd056 --- /dev/null +++ b/.winboll/bashPublishAPKAddTag.sh @@ -0,0 +1,166 @@ +#!/usr/bin/bash + +# 检查是否指定了将要发布的应用名称 +# 使用 `-z` 命令检查变量是否为空 +if [ -z "$1" ]; then + echo "No APP name specified : $0" + exit 2 +fi + +## 定义相关函数 +## 检查 Git 源码是否完全提交了,完全提交就返回0 +function checkGitSources { + #local input="$1" + #echo "The string is: $input" + git config --global --add safe.directory `pwd` + if [[ -n $(git diff --stat) ]] + then + local result="Source is no commit completely." + echo $result + # 脚本调试时使用 + #return 0 + # 正式检查源码时使用 + return 1 + fi + local result="Git Source Check OK." + echo $result + return 0 +} + +function askAddWorkflowsTag { + read answer + if [[ $answer =~ ^[Yy]$ ]]; then + #echo "You chose yes." + return 1 + else + #echo "You chose no." + return 0 + fi +} + +function addWinBollTag { + # 就读取脚本 .winboll/winboll_app_build.gradle 生成的 publishVersion。 + # 如果文件中有 publishVersion 这一项, + # 使用grep找到包含"publishVersion="的那一行,然后用awk提取其后的值 + PUBLISH_VERSION=$(grep -o "publishVersion=.*" $1/build.properties | awk -F '=' '{print $2}') + echo "< $1/build.properties publishVersion : ${PUBLISH_VERSION} >" + ## 设新的 WinBoll 标签 + # 脚本调试时使用 + #tag="projectname-v7.6.4-test1" + # 正式设置标签时使用 + tag=$1"-v"${PUBLISH_VERSION} + echo "< WinBoll Tag To: $tag >"; + # 检查是否已经添加了 WinBoll Tag + if [ "$(git tag -l ${tag})" == "${tag}" ]; then + echo -e "< WinBoll Tag ${tag} exist! >" + return 1 # WinBoll标签重复 + fi + # 添加WinBoll标签 + git tag -a ${tag} -F $1/app_update_description.txt + return 0 +} + +function addWorkflowsTag { + # 就读取脚本 .winboll/winboll_app_build.gradle 生成的 baseBetaVersion。 + # 如果文件中有 baseBetaVersion 这一项, + # 使用grep找到包含"baseBetaVersion="的那一行,然后用awk提取其后的值 + BASE_BETA_VERSION=$(grep -o "baseBetaVersion=.*" $1/build.properties | awk -F '=' '{print $2}') + echo "< $1/build.properties baseBetaVersion : ${BASE_BETA_VERSION} >" + ## 设新的 workflows 标签 + # 脚本调试时使用 + #tag="projectname-v7.6.4-beta" + # 正式设置标签时使用 + tag=$1"-v"${BASE_BETA_VERSION}-beta + echo "< Workflows Tag To: $tag >"; + # 检查是否已经添加了工作流 Tag + if [ "$(git tag -l ${tag})" == "${tag}" ]; then + echo -e "< Github Workflows Tag ${tag} exist! >" + return 1 # 工作流标签重复 + fi + # 添加工作流标签 + git tag -a ${tag} -F $1/app_update_description.txt + return 0 +} + +## 开始执行脚本 +echo -e "Current dir : \n"`pwd` +# 检查当前目录是否是项目根目录 +if [[ -e $1/build.properties ]]; then + echo "The $1/build.properties file exists." + echo -e "Work dir correctly." +else + echo "The $1/build.properties file does not exist." + echo "尝试进入根目录" + # 进入项目根目录 + cd .. +fi +## 本脚本需要在项目根目录下执行 +echo -e "Current dir : \n"`pwd` +# 检查当前目录是否是项目根目录 +if [[ -e $1/build.properties ]]; then + echo "The $1/build.properties file exists." + echo -e "Work dir correctly." +else + echo "The $1/build.properties file does not exist." + echo -e "Work dir error." + exit 1 +fi + +# 检查源码状态 +result=$(checkGitSources) +if [[ $? -eq 0 ]]; then + echo $result + # 如果Git已经提交了所有代码就执行标签和应用发布操作 + + # 预先询问是否添加工作流标签 + echo "Add Github Workflows Tag? (yes/No)" + result=$(askAddWorkflowsTag) + nAskAddWorkflowsTag=$? + echo $result + + # 发布应用 + echo "Publishing WinBoll APK ..." + # 脚本调试时使用 + #bash gradlew :$1:assembleBetaDebug + # 正式发布 + bash gradlew :$1:assembleStageRelease + echo "Publishing WinBoll APK OK." + + # 添加 WinBoll 标签 + result=$(addWinBollTag $1) + echo $result + if [[ $? -eq 0 ]]; then + echo $result + # WinBoll 标签添加成功 + else + echo -e "${0}: addWinBollTag $1\n${result}\nAdd WinBoll tag cancel." + exit 1 # addWinBollTag 异常 + fi + + # 添加 GitHub 工作流标签 + if [[ $nAskAddWorkflowsTag -eq 1 ]]; then + # 如果用户选择添加工作流标签 + result=$(addWorkflowsTag $1) + if [[ $? -eq 0 ]]; then + echo $result + # 工作流标签添加成功 + else + echo -e "${0}: addWorkflowsTag $1\n${result}\nAdd workflows tag cancel." + exit 1 # addWorkflowsTag 异常 + fi + fi + + ## 清理更新描述文件内容 + echo "" > $1/app_update_description.txt + + # 设置新版本开发参数配置 + # 提交配置 + git add . + git commit -m "<$1>Start New Stage Version." + echo "Push sources to git repositories ..." + # 推送源码到所有仓库 + git push origin && git push origin --tags +else + echo -e "${0}: checkGitSources\n${result}\nShell cancel." + exit 1 # checkGitSources 异常 +fi diff --git a/.winboll/bashPublishDebugAPKAddTag.sh b/.winboll/bashPublishDebugAPKAddTag.sh new file mode 100644 index 0000000..4c66313 --- /dev/null +++ b/.winboll/bashPublishDebugAPKAddTag.sh @@ -0,0 +1,166 @@ +#!/usr/bin/bash + +# 检查是否指定了将要发布的调试版应用名称 +# 使用 `-z` 命令检查变量是否为空 +if [ -z "$1" ]; then + echo "No APP name specified : $0" + exit 2 +fi + +## 定义相关函数 +## 检查 Git 源码是否完全提交了,完全提交就返回0 +function checkGitSources { + #local input="$1" + #echo "The string is: $input" + git config --global --add safe.directory `pwd` + if [[ -n $(git diff --stat) ]] + then + local result="Source is no commit completely." + echo $result + # 脚本调试时使用 + #return 0 + # 正式检查源码时使用 + return 1 + fi + local result="Git Source Check OK." + echo $result + return 0 +} + +function askAddWorkflowsTag { + read answer + if [[ $answer =~ ^[Yy]$ ]]; then + #echo "You chose yes." + return 1 + else + #echo "You chose no." + return 0 + fi +} + +function addWinBollTag { + # 就读取脚本 .winboll/winboll_app_build.gradle 生成的 publishVersion。 + # 如果文件中有 publishVersion 这一项, + # 使用grep找到包含"publishVersion="的那一行,然后用awk提取其后的值 + PUBLISH_VERSION=$(grep -o "publishVersion=.*" $1/build.properties | awk -F '=' '{print $2}') + echo "< $1/build.properties publishVersion : ${PUBLISH_VERSION} >" + ## 设新的 WinBoll 标签 + # 脚本调试时使用 + #tag="v7.6.4-test1" + # 正式调试版设置标签时使用 + tag=$1"-v"${PUBLISH_VERSION}"-debug" + echo "< WinBoll Tag To: $tag >"; + # 检查是否已经添加了 WinBoll Tag + if [ "$(git tag -l ${tag})" == "${tag}" ]; then + echo -e "< WinBoll Tag ${tag} exist! >" + return 1 # WinBoll标签重复 + fi + # 添加WinBoll标签 + git tag -a ${tag} -F $1/app_update_description.txt + return 0 +} + +function addWorkflowsTag { + # 就读取脚本 .winboll/winboll_app_build.gradle 生成的 baseBetaVersion。 + # 如果文件中有 baseBetaVersion 这一项, + # 使用grep找到包含"baseBetaVersion="的那一行,然后用awk提取其后的值 + BASE_BETA_VERSION=$(grep -o "baseBetaVersion=.*" $1/build.properties | awk -F '=' '{print $2}') + echo "< $1/build.properties baseBetaVersion : ${BASE_BETA_VERSION} >" + ## 设新的 workflows 标签 + # 脚本调试时使用 + #tag="v7.6.4-beta" + # 正式设置标签时使用 + tag=$1"-"v"${BASE_BETA_VERSION}-beta-debug + echo "< Workflows Tag To: $tag >"; + # 检查是否已经添加了工作流 Tag + if [ "$(git tag -l ${tag})" == "${tag}" ]; then + echo -e "< Github Workflows Tag ${tag} exist! >" + return 1 # 工作流标签重复 + fi + # 添加工作流标签 + git tag -a ${tag} -F $1/app_update_description.txt + return 0 +} + +## 开始执行脚本 +echo -e "Current dir : \n"`pwd` +# 检查当前目录是否是项目根目录 +if [[ -e $1/build.properties ]]; then + echo "The $1/build.properties file exists." + echo -e "Work dir correctly." +else + echo "The $1/build.properties file does not exist." + echo "尝试进入根目录" + # 进入项目根目录 + cd .. +fi +## 本脚本需要在项目根目录下执行 +echo -e "Current dir : \n"`pwd` +# 检查当前目录是否是项目根目录 +if [[ -e $1/build.properties ]]; then + echo "The $1/build.properties file exists." + echo -e "Work dir correctly." +else + echo "The $1/build.properties file does not exist." + echo -e "Work dir error." + exit 1 +fi + +# 检查源码状态 +result=$(checkGitSources) +if [[ $? -eq 0 ]]; then + echo $result + # 如果Git已经提交了所有代码就执行标签和应用发布操作 + + # 预先询问是否添加工作流标签 + echo "Add Github Workflows Tag? (yes/no)" + result=$(askAddWorkflowsTag) + nAskAddWorkflowsTag=$? + echo $result + + # 发布应用 + echo "Publishing WinBoll Debug APK ..." + # 脚本调试时使用 + #bash gradlew :$1:assembleBetaDebug + # 正式发布调试版 + bash gradlew :$1:assembleStageDebug + echo "Publishing WinBoll Debug APK OK." + + # 添加 WinBoll 标签 + result=$(addWinBollTag $1) + echo $result + if [[ $? -eq 0 ]]; then + echo $result + # WinBoll 标签添加成功 + else + echo -e "${0}: addWinBollTag $1\n${result}\nAdd WinBoll tag cancel." + exit 1 # addWinBollTag 异常 + fi + + # 添加 GitHub 工作流标签 + if [[ $nAskAddWorkflowsTag -eq 1 ]]; then + # 如果用户选择添加工作流标签 + result=$(addWorkflowsTag $1) + if [[ $? -eq 0 ]]; then + echo $result + # 工作流标签添加成功 + else + echo -e "${0}: addWorkflowsTag $1\n${result}\nAdd workflows tag cancel." + exit 1 # addWorkflowsTag 异常 + fi + fi + + ## 清理更新描述文件内容 + echo "" > $1/app_update_description.txt + + # 设置新版本开发参数配置 + # 提交配置 + git add . + git commit -m "<$1>Start New Stage Debug Version." + echo "Push sources to git repositories ..." + # 推送源码到所有仓库 + git push origin && git push origin --tags +else + echo -e "${0}: checkGitSources\n${result}\nShell cancel." + exit 1 # checkGitSources 异常 +fi diff --git a/.winboll/bashPublishLIBAddTag.sh b/.winboll/bashPublishLIBAddTag.sh new file mode 100644 index 0000000..035c2b4 --- /dev/null +++ b/.winboll/bashPublishLIBAddTag.sh @@ -0,0 +1,14 @@ +#!/usr/bin/bash + +# 检查是否指定了将要发布的类库名称 +# 使用 `-z` 命令检查变量是否为空 +if [ -z "$1" ]; then + echo "No Library name specified : $0" + exit 2 +fi + +## 正式发布使用 +git pull && bash gradlew :$1:publishReleasePublicationToWinBollReleaseRepository && bash .winboll/bashCommitLibReleaseBuildFlagInfo.sh $1 + +## 调试使用 +#bash gradlew :$1:publishSnapshotWinBollPublicationToWinBollSnapshotRepository && bash .winboll/bashCommitLibReleaseBuildFlagInfo.sh $1 diff --git a/.winboll/winboll_app_build.gradle b/.winboll/winboll_app_build.gradle new file mode 100644 index 0000000..eacc876 --- /dev/null +++ b/.winboll/winboll_app_build.gradle @@ -0,0 +1,255 @@ +// WinBoll 应用签名配置 +// + +android { + // 读取秘钥配置文件 + // + def keyProps = new Properties() + def keyPropsFile = rootProject.file("${keyPropsFilePath}") + //println 'Test keystore path' + //println 'KeyProsFile :' + Boolean.toString(keyPropsFile.exists()) + //assert(false) + assert(keyPropsFile.exists()) + keyProps.load(new FileInputStream(keyPropsFile)) + + // 配置签名 + signingConfigs { + winboll { + assert(keyProps['keyAlias'] != null && keyProps['keyPassword'] != null && keyProps['storeFile'] != null && keyProps['storePassword'] != null) + keyAlias keyProps['keyAlias'] + keyPassword keyProps['keyPassword'] + storeFile keyProps['storeFile'] ? file(keyProps['storeFile']) : null + storePassword keyProps['storePassword'] + } + } + buildTypes { + release { + signingConfig signingConfigs.winboll + } + debug { + signingConfig signingConfigs.winboll + } + } + + flavorDimensions "WinBollApp" + productFlavors { + beta { + // 检查编译标志位配置 + assert (winbollBuildProps['buildCount'] != null) + dimension "WinBollApp" + applicationIdSuffix ".beta" + LocalDateTime localDateTimeNow = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); + versionNameSuffix "-beta" + winbollBuildProps['buildCount'] + "_" + localDateTimeNow.format('mmss') + } + stage { + dimension "WinBollApp" + } + } + + // 应用包输出配置 + // + android.applicationVariants.all { variant -> + // + // GitHub 应用包输出配置 + // 1. 配置 Beta Release 版应用包输出 + // 注意 :GitHub 打包使用 android.yml 的 "bash ./gradlew assembleBetaRelease" 命令 + // + if(variant.flavorName == "beta" && variant.buildType.name == "release") { + /* 后期管理预留代码 */ + /* 暂时没有需要的 GitHub 应用包输出配置 */ + /* GitHub 部分代码忽略 */ + } + + // + // WinBoll 应用包输出配置 + // 1. 配置 Stage Release 版应用包输出 + // 2. 配置 Beta Debug 版应用包输出 + // + if((variant.flavorName == "beta" && variant.buildType.name == "debug") + || (variant.flavorName == "stage" && variant.buildType.name == "debug") + || (variant.flavorName == "stage" && variant.buildType.name == "release")) { + println "Project root directory: " + project.rootDir.toString() + println "Project root directory name : " + project.rootDir.name + def outputPath="${project.projectDir.absolutePath}/build/outputs/apk/${variant.buildType.name}" + //def outputFileName="${rootProject.name}_${versionName}.apk" + def outputFileName=project.rootDir.name + "_${versionName}.apk" + + // 创建 WinBoll Studio 发布接口文件夹 + File fWinBollStudioDir = file("/sdcard/WinBollStudio/APKs"); + if(!fWinBollStudioDir.exists()) { + //fWinBollStudioDir.mkdirs(); + // 如果没有发布接口文件就不用进行APK发布和源码管理操作 + // 当前编译环境不是 WinBoll 主机, 以下将忽略APK发布和源码管理操作。 + println 'The current compilation environment is not in WinBoll host, and the following APK publishing and source management operations will be ignore.' + } else { + /// WINBOLL 主机的 APK 发布和源码管理操作 /// + variant.getAssembleProvider().get().doFirst { + /* 后期管理预留代码 */ + } //doFirst { + + // 编译输出后处理文件部分 + // + variant.getAssembleProvider().get().doLast { + variant.outputs.forEach{ file-> + // 如果正在调试,就拷贝到 WinBoll 备份管理文件夹 + // + if(variant.flavorName == "beta"&&variant.buildType.name == "debug"){ + //File outBuildBckDir = new File(fWinBollStudioDir, "/${rootProject.name}/${variant.buildType.name}") + File outBuildBckDir = new File(fWinBollStudioDir, "/" + project.rootDir.name + "/${variant.buildType.name}") + // 创建目标路径目录 + if(!outBuildBckDir.exists()) { + outBuildBckDir.mkdirs(); + println "Output Folder Created.(WinBollStudio) : " + outBuildBckDir.getAbsolutePath() + } + if(outBuildBckDir.exists()) { + copy{ + from file.outputFile + into outBuildBckDir + rename { + String fileName -> "${outputFileName}" + } + println "Output APK (WinBollStudio): " + outBuildBckDir.getAbsolutePath() + "/${outputFileName}" + } + // 检查编译标志位配置 + assert (winbollBuildProps['buildCount'] != null) + assert (winbollBuildProps['libraryProject'] != null) + //构建计数增加 + int buildCount = Integer.parseInt(winbollBuildProps['buildCount']) + 1; + // 设置编译计数 + winbollBuildProps.setProperty("buildCount", Integer.toString(buildCount)); + + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + if(winbollBuildProps['libraryProject'] != "") { + // 如果应用 build.properties 文件设置了类库模块项目文件名 + // 就拷贝一份新的编译标志配置到类库项目文件夹 + File libraryProjectBuildPropsFile = new File("$RootProjectDir/" + winbollBuildProps['libraryProject'] + "/build.properties") + assert(winbollBuildPropsFile.exists()) + assert(libraryProjectBuildPropsFile.exists()) + java.nio.file.Path sourceFilePath = winbollBuildPropsFile.toPath(); + java.nio.file.Path targetFilePath = libraryProjectBuildPropsFile.toPath(); + // 使用copyTo()方法复制文件,如果目标文件存在会被覆盖,可选参数可以选择不覆盖 + java.nio.file.Files.copy(sourceFilePath, targetFilePath, java.nio.file.StandardCopyOption.REPLACE_EXISTING); + } + } + } + + // 如果正在发布,就拷贝到 WinBoll 标签管理文件夹 + // + if((variant.flavorName == "stage"&&variant.buildType.name == "debug") + || (variant.flavorName == "stage"&&variant.buildType.name == "release")){ + // 发布 APK 文件 + // + // 截取版本号的版本字段为短版本名 + String szVersionName = "${versionName}" + String[] szlistTemp = szVersionName.split("-") + String szShortVersionName = szlistTemp[0] + //String szCommonTagAPKName = "${rootProject.name}_" + szShortVersionName + ".apk" + String szCommonTagAPKName = project.rootDir.name + "_" + szShortVersionName + ".apk" + println "CommonTagAPKName is : " + szCommonTagAPKName + + //File outTagDir = new File(fWinBollStudioDir, "/${rootProject.name}/tag/") + File outTagDir = new File(fWinBollStudioDir, "/" + project.rootDir.name + "/tag/") + // 创建目标路径目录 + if(!outTagDir.exists()) { + outTagDir.mkdirs(); + println "Output Folder Created.(Tags) : " + outTagDir.getAbsolutePath() + } + + if(outTagDir.exists()) { + File targetAPK = new File(outTagDir, "${szCommonTagAPKName}") + if(targetAPK.exists()) { + // 标签版本APK文件已经存在,构建拷贝任务停止 + assert (!targetAPK.exists()) + // 可选择删除并继续输出APK文件 + //delete targetAPK + } + // 复制一个备份 + copy{ + from file.outputFile + into outTagDir + rename { + String fileName -> "${outputFileName}" + } + println "Output APK (Tags): "+ outTagDir.getAbsolutePath() + "/${outputFileName}" + } + // 复制一个并重命名为短版本名 + copy{ + from file.outputFile + into outTagDir + rename { + String fileName -> "${szCommonTagAPKName}" + } + println "Output APK (Tags): "+ outTagDir.getAbsolutePath() + "/${szCommonTagAPKName}" + } + // 检查编译标志位配置 + assert (winbollBuildProps['stageCount'] != null) + assert (winbollBuildProps['publishVersion'] != null) + assert (winbollBuildProps['buildCount'] != null) + assert (winbollBuildProps['baseVersion'] != null) + assert (winbollBuildProps['baseBetaVersion'] != null) + assert (winbollBuildProps['libraryProject'] != null) + + // 设置类库的默认版本名 + winbollBuildProps.setProperty("publishVersion", "${versionName}"); + // Stage 发布计数增加 + int stageCount = Integer.parseInt(winbollBuildProps['stageCount']) + 1; + winbollBuildProps.setProperty("stageCount", Integer.toString(stageCount)); + // 设置类库的默认Beta版本名 + winbollBuildProps.setProperty("baseBetaVersion", winbollBuildProps['baseVersion'] + "." + Integer.toString(stageCount)); + // 构建计数重置 + winbollBuildProps.setProperty("buildCount", "0"); + + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + if(winbollBuildProps['libraryProject'] != "") { + // 如果应用 build.properties 文件设置了类库模块项目文件名 + // 就拷贝一份新的编译标志配置到类库项目文件夹 + File libraryProjectBuildPropsFile = new File("$RootProjectDir/" + winbollBuildProps['libraryProject'] + "/build.properties") + assert(winbollBuildPropsFile.exists()) + assert(libraryProjectBuildPropsFile.exists()) + java.nio.file.Path sourceFilePath = winbollBuildPropsFile.toPath(); + java.nio.file.Path targetFilePath = libraryProjectBuildPropsFile.toPath(); + // 使用copyTo()方法复制文件,如果目标文件存在会被覆盖,可选参数可以选择不覆盖 + java.nio.file.Files.copy(sourceFilePath, targetFilePath, java.nio.file.StandardCopyOption.REPLACE_EXISTING); + } + + // 提交新的编译标志配置 + def resultCommitBuildFlag = exec { + commandLine 'bash', '--', "${RootProjectDir}/${bashCommitAppPublishBuildFlagInfoFilePath}", "${RootProjectDir}", "${versionName}", variant.buildType.name , rootProject.name + } + // 检查bash命令的返回值(假设非零表示失败) + assert(resultCommitBuildFlag.getExitValue() == 0) + } + } // if(variant.buildType.name == "release"){ + + // 如果公共目录存在就拷贝到公共目录并重命名为app.apk + // + File outCommonDir = new File("/sdcard/AppProjects") + String commandAPKName = "app.apk" + if(outCommonDir.exists()) { + copy{ + from file.outputFile + into outCommonDir + rename { + String fileName -> "${commandAPKName}" + } + println "Output APK (Common): " + outCommonDir.getAbsolutePath() + "/${commandAPKName}" + } + } + + + } + }// End of (variant.getAssembleProvider().get().doLast {) + }/// WINBOLL 主机的 APK 发布和源码管理操作结束 /// + } + + } // End of (android.applicationVariants.all { variant ->) +} + diff --git a/.winboll/winboll_lib_build.gradle b/.winboll/winboll_lib_build.gradle new file mode 100644 index 0000000..0f19949 --- /dev/null +++ b/.winboll/winboll_lib_build.gradle @@ -0,0 +1,211 @@ +// 本机和 WinBoll Maven 仓库传输配置。 +// + +def getDefaultVersion(){ + // 检查编译标志位配置 + assert (winbollBuildProps['publishVersion'] != null) + // 返回编译版本号 + return winbollBuildProps['publishVersion'] +} + +def siteUrl = 'https://winboll.cc/?page=studio/details.php&app=${rootProject.name}' // 项目主页 +def gitUrl = 'https://gitea.winboll.cc/WinBoll/${rootProject.name}' // 项目的git地址 +def DefaultGroupId = 'cc.winboll.studio' // 类库所有者groupId +def DefaultVersion = getDefaultVersion() // 版本号 +def DeveloperId='zhangsken' // 开发者账号 +def DeveloperName='ZhanGSKen' // 开发者名称 +def DeveloperEMail='ZhanGSKen@QQ.COM' // 开发者邮箱地址 +def LicenseName='The Apache Software License, Version 2.0' +def LicenseUrl='http://www.apache.org/licenses/LICENSE-2.0.txt' + +Properties properties = new Properties() + +afterEvaluate { + publishing { + repositories { + if(file("${RootProjectDir}/${winbollFilePath}").exists()) { + properties.load(file("${RootProjectDir}/${winbollFilePath}").newDataInputStream()) + def NexusUserName = properties.getProperty("Nexus.name") + def NexusPassword = properties.getProperty("Nexus.password") + // WinBoll Release 仓库 + maven{ + //仓库的名字和地址 + name = "WinBollRelease" + url="https://nexus.winboll.cc/repository/maven-releases/" + // 仓库用户名密码 + credentials { + username = NexusUserName + password = NexusPassword + } + } + // WinBoll Snapshot 仓库 + maven{ + //仓库的名字和地址 + name = "WinBollSnapshot" + url="https://nexus.winboll.cc/repository/maven-snapshots/" + // 仓库用户名密码 + credentials { + username = NexusUserName + password = NexusPassword + } + } + } + } + publications { + // Local Maven 仓库传输任务 + // + release(MavenPublication) { + groupId = DefaultGroupId + artifactId = project.name + version = DefaultVersion + + //from components.java + // 必须有这个 否则不会上传AAR包 + afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) } + // 上传source,这样使用方可以看到方法注释 + //artifact generateSourcesJar + //要上传的aar路径 + //artifact "$buildDir/outputs/aar/${project.getName()}-release.aar" + //artifact "$buildDir/outputs/aar/${project.getName()}-debug.aar" + + //对pom进行的操作 + pom.withXml{ + Node pomNode = asNode() + pomNode.dependencies.'*'.findAll() { + //将所有的默认依赖移除 + //it.parent().remove(it) + } + } + pom { + name = artifactId + url = siteUrl + licenses { + license { //证书说明 + name=LicenseName // 开源协议名称 + url=LicenseUrl // 协议地址 + } + } + developers { + developer { + id=DeveloperId // 开发者账号 + name=DeveloperName // 开发者名称 + email=DeveloperEMail // 开发者邮箱地址 + } + } + //软件配置管理 + scm { + connection=gitUrl + developerConnection=gitUrl + url=siteUrl + } + } + } + + // WinBoll Maven Release 仓库传输任务 + // + releaseWinBoll(MavenPublication) { + // 需要使用的变体,假设有free和pay两个变体,可以选择一个 + //from components.free + + groupId = DefaultGroupId // 文件的groupId + artifactId = project.name //文件的名字 + version = DefaultVersion //版本号 + + //from components.java + // 必须有这个 否则不会上传AAR包 + afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) } + // 上传source,这样使用方可以看到方法注释 + //artifact generateSourcesJar + //要上传的aar路径 + //artifact "$buildDir/outputs/aar/${project.getName()}-release.aar" + //artifact "$buildDir/outputs/aar/${project.getName()}-debug.aar" + + //对pom进行的操作 + pom.withXml{ + Node pomNode = asNode() + pomNode.dependencies.'*'.findAll() { + //将所有的默认依赖移除 + //it.parent().remove(it) + } + } + pom { + name = artifactId + url = siteUrl + licenses { + license { //证书说明 + name=LicenseName // 开源协议名称 + url=LicenseUrl // 协议地址 + } + } + developers { + developer { + id=DeveloperId // 开发者账号 + name=DeveloperName // 开发者名称 + email=DeveloperEMail // 开发者邮箱地址 + } + } + //软件配置管理 + scm { + connection=gitUrl + developerConnection=gitUrl + url=siteUrl + } + } + + } // 创建名为 release 的任务结束 + + // WinBoll Maven Snapshot 仓库传输任务 + // + snapshotWinBoll(MavenPublication) { + // 需要使用的变体,假设有free和pay两个变体,可以选择一个 + //from components.free + + groupId = DefaultGroupId // 文件的groupId + artifactId = project.name //文件的名字 + version = DefaultVersion + "-SNAPSHOT" //版本号 + + //from components.java + // 必须有这个 否则不会上传AAR包 + afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) } + // 上传source,这样使用方可以看到方法注释 + //artifact generateSourcesJar + //要上传的aar路径 + //artifact "$buildDir/outputs/aar/${project.getName()}-release.aar" + //artifact "$buildDir/outputs/aar/${project.getName()}-debug.aar" + + //对pom进行的操作 + pom.withXml{ + Node pomNode = asNode() + pomNode.dependencies.'*'.findAll() { + //将所有的默认依赖移除 + //it.parent().remove(it) + } + } + pom { + name = artifactId + url = siteUrl + licenses { + license { //证书说明 + name=LicenseName // 开源协议名称 + url=LicenseUrl // 协议地址 + } + } + developers { + developer { + id=DeveloperId // 开发者账号 + name=DeveloperName // 开发者名称 + email=DeveloperEMail // 开发者邮箱地址 + } + } + //软件配置管理 + scm { + connection=gitUrl + developerConnection=gitUrl + url=siteUrl + } + } + } // 创建名为 snapshot 的任务结束 + } + + } +} diff --git a/.winboll/winboll_lint_build.gradle b/.winboll/winboll_lint_build.gradle new file mode 100644 index 0000000..b2ec440 --- /dev/null +++ b/.winboll/winboll_lint_build.gradle @@ -0,0 +1,50 @@ +android { + lintOptions { + // true--关闭lint报告的分析进度 + //quiet true + // true--错误发生后停止gradle构建 + abortOnError false + // true--只报告error + //ignoreWarnings true + // true--忽略有错误的文件的全/绝对路径(默认是true) + //absolutePaths true + // true--检查所有问题点,包含其他默认关闭项 + checkAllWarnings true + // true--所有warning当做error + //warningsAsErrors true + // 关闭指定问题检查 + //disable 'ExpiredTargetSdkVersion','HardcodedText','UnknownNullness','ButtonStyle','GradleDependency','UnusedResources' + // 打开指定问题检查 + //enable 'RtlHardcoded','RtlCompat', 'RtlEnabled' + // 仅检查指定问题 + //check 'NewApi', 'InlinedApi' + // true--error输出文件不包含源码行号 + //noLines true + // true--显示错误的所有发生位置,不截取 + showAll true + // 回退lint设置(默认规则) + //lintConfig file("default-lint.xml") + // true--生成txt格式报告(默认false) + //textReport true + // 重定向输出;可以是文件或'stdout' + //textOutput 'stdout' + // true--生成XML格式报告 + xmlReport true + // 指定xml报告文档(默认lint-results.xml) + xmlOutput file("${lintXmlReportFilePath}") + // true--生成HTML报告(带问题解释,源码位置,等) + htmlReport true + // html报告可选路径(构建器默认是lint-results.html ) + htmlOutput file("${lintHTMLReportFilePath}") + // true--所有正式版构建执行规则生成崩溃的lint检查,如果有崩溃问题将停止构建 + checkReleaseBuilds true + // 在发布版本编译时检查(即使不包含lint目标),指定问题的规则生成崩溃 + //fatal 'NewApi', 'InlineApi' + // 指定问题的规则生成错误 + //error 'Wakelock', 'TextViewEdits' + // 指定问题的规则生成警告 + //warning 'ResourceAsColor' + // 忽略指定问题的规则(同关闭检查) + //ignore 'TypographyQuotes' + } +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9746919 --- /dev/null +++ b/LICENSE @@ -0,0 +1,73 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright 2024 ZhanGSKen + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 0000000..381277a --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +# ☁ ☁ ☁ WinBoll APP ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ +# ☁ ☁ 这是 WinBoll 系列 APP 汇总项目。☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ +# ☁ ☁ ☁ WinBoll 网站地址 https://www.winboll.cc/studio/app/ ☁ ☁ ☁ ☁ ☁ ☁ ☁ ☁ + +## WinBoll 提问 +同样是 /sdcard 目录,在开发 Android 应用时, +能否实现手机编译与电脑编译的源码同步。 +☁因而 WinBoll 项目组诞生了。 + +## WinBoll 项目组研发计划 +致力于把 WinBoll-APP 应用在手机端 Android 项目开发。 +也在探索 https://gitea.winboll.cc//WinBoll-APP.git 应用于 WinBoll-APP APK 分发。 +更想进阶 https://github.com//WinBoll-APP.git 应用于 WinBoll-APP Beta APK 分发。 + +## WinBoll-APP 汗下... +#### ☁应用何置如此呢。且观用户云云。 + +#### ☁ 正当下 ☁ ### +#### ☁ 且容傻家叙说 ☁ WinBoll-APP 应用场景 +### ☁ WinBoll 设备资源概述 +#### ☁ 1. Raid Disk. +概述:这是一个矩阵存储类设备。 +优点:该设备具有数据容错存储功能, + 数据存储具有特长持久性。 +缺点:设备使用能源消耗比较高, + 设备存取速度一般。 + +#### ☁ 2. Data Disk. +概述:这是一个普通硬盘存储设备 +优点:该设备独立于操作系统, + 数据持久性一般, + 存取能源消耗小于 Raid Disk。 +缺点:数据存储速度一般,存储能源消耗一般。 + +#### ☁ 3. SSD Disk. +概述:这是一个 SSD 硬盘存储设备。 +优点:存取速度快于 Data Disk 与 Raid Disk, + 存取能源消耗小于 Data Disk 与 Raid Disk。 +缺点:数据持久性一般, + 设备位于操作系统内部文件系统。 + 数据持久性与操作系统挂钩。 + +#### ☁ 4. WinBoll 用户资源概述。 +1> /home/<用户名> 位于 WinBoll 操作系统目录下。 +2> /rdisk/<用户名> 挂载用户 Raid Disk. +3> /data/<用户名> 挂载用户 Data Disk. +4> /sdcard/<用户名> 挂载用户 SSD Disk. + +#### ☁ 5. WinBoll-APP 用户资源概述。 +1> /sdcard 挂载用户手机 SD 存储/storage/emulated/0 + +### ☁ 稍稍歇 ☁ ### +### ☁ 急急停 ☁ WinBoll 应用前置条件 +☁ WinBoll 主机建立 1Panel MySQL 应用。 +☁ WinBoll 主机建立 1Panel Gitea 应用。 +☁ WinBoll 主机设置 WinBoll 应用为非登录状态。 +☁ WinBoll 主机建立 WinBoll 账户与 WinBoll 用户组。 +☁ WinBoll 账户 User ID 为: winboll。 +☁ WinBoll 用户组 Group ID 为: winboll。 +☁ WinBoll 主机 WinBoll 1Panel Gitea 建立 WinBoll 工作组。 +☁ WinBoll 主机 WinBoll 1Panel Gitea 用户项目 APK 编译输出目录为 /sdcard/<用户名>/WinBoll/app/ +☁ WinBoll 项目配置文件示例为 "/.winboll/winboll.properties-demo"(WinBoll 项目已设置) +☁ WinBoll 项目配置文件为 "/.winboll/winboll.properties" +☁ WinBoll 项目配置文件设定为源码提交时忽略。(WinBoll 项目已设置) +☁ Gradle 项目配置文件示例为 "/.winboll/local.properties-demo"(WinBoll 项目已设置) +☁ Gradle 项目配置文件为 "/local.properties"(WinBoll 项目已设置) +☁ Gradle 项目配置文件设定为源码提交时忽略。(WinBoll 项目已设置) + +### ☁ 登高处 ☁ WinBoll 应用需求规划 +☁ WinBoll 主机建立 WinBoll 客户端用户数据库为 MySQL winbollclient 数据库。 +☁ WinBoll 主机设置 WinBoll 客户端用户信息存储在 winbollclient 数据库中。 +☁ MySQL winbollclient 数据库中 + WinBoll 客户端用户信息设定为: + <用户名, 验证密码, 验证邮箱, 验证手机, 唯一存储令牌Token, 备用验证邮箱>。 +☁ WinBoll 项目源码仓库托管在 WinBoll 1Panel Gitea 目录 /opt/1panel/apps/gitea/gitea/data/git/repositories/winboll/winboll.git中。 +☁ WinBoll 主机提供 WinBoll 1Panel Gitea 应用的 WinBoll 项目源码仓库存取功能。(Gitea 应用已提供) +☁ WinBoll 主机提供 WinBoll Gitea 项目仓库存档功能。(Gitea 应用已提供) +☁ 提供 WinBoll 客户端用户登录功能。(Gitea 应用已提供) + +### ☁ 看远方 ☁ ### +### ☁ 心忧虑 ☁ WinBoll-APP 应用前置需求 +☁ WinBoll-APP WinBoll 项目根目录设定为手机的 /sdcard/WinBoll 目录。(需要用户手动建立文件夹) +☁ WinBoll-APP 具有手机 /sdcard/WinBoll 目录的存储权限。(需要手机操作系统授权) +☁ WinBoll-APP WinBoll 项目仓库源码存储路径为 /sdcard/WinBoll/repositories/winboll.git(需要用户手动建立文件夹) +☁ WinBoll-APP 项目 APK 编译输出目录为 /sdcard/WinBoll/app/ +☁ WinBoll-APP 应用签名验证可定制化。(WinBoll 项目已提供) +☁ WinBoll-APP 与系列衍生 APP 应用共享 cc.winboll.studio 命名空间资源。(WinBoll 项目已提供) +☁ WinBoll-APP 用户客户端信息存储在命名空间为 WinBoll APP MySQLLite 应用的 winbollappclient 数据库中。 +☁ WinBoll-APP MySQLLite 应用的 winbollappclient 数据库中, + WinBoll 用户客户端信息设定为: + <用户名, 唯一存储令牌Token>。 + +### ☁ 云游四方 ☁ ### +### ☁ 呔! ☁ WinBoll-APP 应用需求规划 +☁ WinBoll-APP 提供手机目录 /sdcard/WinBoll 的 WinBoll 项目源码管理功能。 + +### ☁ 吁! ☁ WinBoll-APP 共享计划前景 +☁ WinBoll-APP 将会实现 https://winboll.cc/api 访问功能。 +☁ WinBoll-APP 将会实现手机端 Android 应用的开发与管理功能。 + +## ☁ WinBoll ☁ WinBoll 主机忧虑 +☁ WinBoll 将会提供 gitea.winboll.cc 域名用户注册登录功能。 +☁ WinBoll 将会提供 WinBoll-APP 及其衍生应用的 Gitea 仓库管理服务。 +☁ WinBoll 将会提供 winboll.cc 域名 WinBoll 项目组注册登录功能。 + +# 本项目要实际运用需要注意以下几个步骤: +# 在项目根目录下: +## 1. 项目模块编译环境设置(必须),settings.gradle-demo 要复制为 settings.gradle,并取消相应项目模块的注释。 +## 2. 项目 Android SDK 编译环境设置(可选),local.properties-demo 要复制为 local.properties,并按需要设置 Android SDK 目录。 +## 3. 类库型模块编译环境设置(可选),winboll.properties-demo 要复制为 winboll.properties,并按需要设置 WinBoll Maven 库登录用户信息。 + + +# ☆类库型项目编译方法 +## 先编译类库对应的模块测试项目 +### 修改模块测试项目的 build.properties 文件 +设置属性 libraryProject=<类库项目模块文件夹名称> +### 再编译测试项目 +$ bash .winboll/bashPublishAPKAddTag.sh <应用项目模块文件夹名称> +#### 测试项目编译后,编译器会复制一份 APK 到以下路径:"/sdcard/WinBollStudio/APKs/<项目根目录名称>/tag/" 文件夹。 +### 最后编译类库项目 +$ bash .winboll/bashPublishLIBAddTag.sh <类库项目模块文件夹名称> +#### 类库模块编译命令执行后,编译器会发布到 WinBoll Nexus Maven 库:Maven 库地址可以参阅根项目目录配置 build.gradle 文件。 + +# ☆应用型项目编译方法 +## 直接调用以下命令编译应用型项目 +$ bash .winboll/bashPublishAPKAddTag.sh <应用项目模块文件夹名称> +#### 应用模块编译命令执行后,编译器会复制一份 APK 到以下路径:"/sdcard/WinBollStudio/APKs/<项目根目录名称>/tag/" 文件夹。 diff --git a/aes/.gitignore b/aes/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/aes/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/aes/app_update_description.txt b/aes/app_update_description.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/aes/app_update_description.txt @@ -0,0 +1 @@ + diff --git a/aes/build.gradle b/aes/build.gradle new file mode 100644 index 0000000..c6a3a6c --- /dev/null +++ b/aes/build.gradle @@ -0,0 +1,69 @@ +apply plugin: 'com.android.application' +apply from: '../.winboll/winboll_app_build.gradle' +apply from: '../.winboll/winboll_lint_build.gradle' + +def genVersionName(def versionName){ + // 检查编译标志位配置 + assert (winbollBuildProps['stageCount'] != null) + assert (winbollBuildProps['baseVersion'] != null) + // 保存基础版本号 + winbollBuildProps.setProperty("baseVersion", "${versionName}"); + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + // 返回编译版本号 + return "${versionName}." + winbollBuildProps['stageCount'] +} + +android { + compileSdkVersion 32 + buildToolsVersion "33.0.3" + + defaultConfig { + applicationId "cc.winboll.studio.aes" + minSdkVersion 24 + targetSdkVersion 30 + versionCode 1 + // versionName 更新后需要手动设置 + // 项目模块目录的 build.gradle 文件的 stageCount=0 + // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" + versionName "7.6" + if(true) { + versionName = genVersionName("${versionName}") + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } +} + +dependencies { + api project(':libaes') + + //api 'cc.winboll.studio:winboll-shared:1.6.5' + api 'io.github.medyo:android-about-page:2.0.0' + api 'com.github.getActivity:ToastUtils:10.5' + api 'com.jcraft:jsch:0.1.55' + api 'org.jsoup:jsoup:1.13.1' + api 'com.squareup.okhttp3:okhttp:4.4.1' + + api 'androidx.appcompat:appcompat:1.0.0' + api 'androidx.fragment:fragment:1.0.0' + api 'com.google.android.material:material:1.0.0' + + api 'cc.winboll.studio:libapputils:9.2.1' + api 'cc.winboll.studio:libappbase:1.0.3' + + api fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/aes/build.properties b/aes/build.properties new file mode 100644 index 0000000..69caa9a --- /dev/null +++ b/aes/build.properties @@ -0,0 +1,8 @@ +#Created by .winboll/winboll_app_build.gradle +#Sun Jan 19 04:58:59 GMT 2025 +stageCount=3 +libraryProject=libaes +baseVersion=7.6 +publishVersion=7.6.2 +buildCount=4 +baseBetaVersion=7.6.3 diff --git a/aes/proguard-rules.pro b/aes/proguard-rules.pro new file mode 100644 index 0000000..233bad2 --- /dev/null +++ b/aes/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\tools\adt-bundle-windows-x86_64-20131030\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/aes/src/beta/AndroidManifest.xml b/aes/src/beta/AndroidManifest.xml new file mode 100644 index 0000000..ee78d9f --- /dev/null +++ b/aes/src/beta/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/aes/src/beta/res/values/strings.xml b/aes/src/beta/res/values/strings.xml new file mode 100644 index 0000000..6f287f2 --- /dev/null +++ b/aes/src/beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + + AES+ + diff --git a/aes/src/main/AndroidManifest.xml b/aes/src/main/AndroidManifest.xml new file mode 100644 index 0000000..cc00d93 --- /dev/null +++ b/aes/src/main/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/aes/src/main/java/cc/winboll/studio/aes/App.java b/aes/src/main/java/cc/winboll/studio/aes/App.java new file mode 100644 index 0000000..578f72d --- /dev/null +++ b/aes/src/main/java/cc/winboll/studio/aes/App.java @@ -0,0 +1,20 @@ +package cc.winboll.studio.aes; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2024/06/13 19:03:58 + * @Describe AES应用类 + */ +import cc.winboll.studio.libappbase.GlobalApplication; + +public class App extends GlobalApplication { + + public static final String TAG = "App"; + + @Override + public void onCreate() { + super.onCreate(); + //setIsDebug(BuildConfig.DEBUG); + } + +} diff --git a/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java b/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java new file mode 100644 index 0000000..cafaf1e --- /dev/null +++ b/aes/src/main/java/cc/winboll/studio/aes/MainActivity.java @@ -0,0 +1,16 @@ +package cc.winboll.studio.aes; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2024/06/13 19:05:52 + * @Describe 应用主窗口 + */ +import cc.winboll.studio.libaes.unittests.LibraryActivity; + +public class MainActivity extends LibraryActivity { + + public static final String TAG = "MainActivity"; + + + +} diff --git a/aes/src/main/res/values/strings.xml b/aes/src/main/res/values/strings.xml new file mode 100644 index 0000000..6b856ff --- /dev/null +++ b/aes/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + AES + + diff --git a/aes/src/main/res/values/styles.xml b/aes/src/main/res/values/styles.xml new file mode 100644 index 0000000..c5c6ef3 --- /dev/null +++ b/aes/src/main/res/values/styles.xml @@ -0,0 +1,5 @@ + + + + diff --git a/aes/src/stage/AndroidManifest.xml b/aes/src/stage/AndroidManifest.xml new file mode 100644 index 0000000..ee78d9f --- /dev/null +++ b/aes/src/stage/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/aes/src/stage/res/values/strings.xml b/aes/src/stage/res/values/strings.xml new file mode 100644 index 0000000..ace0c41 --- /dev/null +++ b/aes/src/stage/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/app.md b/app/app.md new file mode 100644 index 0000000..e69de29 diff --git a/app/app.perl b/app/app.perl new file mode 100644 index 0000000..e69de29 diff --git a/app/app.php b/app/app.php new file mode 100644 index 0000000..e69de29 diff --git a/app/app.py b/app/app.py new file mode 100644 index 0000000..e69de29 diff --git a/app/app.sh b/app/app.sh new file mode 100644 index 0000000..e69de29 diff --git a/app/app.txt b/app/app.txt new file mode 100644 index 0000000..e69de29 diff --git a/app/app_update_description.txt b/app/app_update_description.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/app/app_update_description.txt @@ -0,0 +1 @@ + diff --git a/app/build.gradle b/app/build.gradle new file mode 100644 index 0000000..73dcdaf --- /dev/null +++ b/app/build.gradle @@ -0,0 +1,54 @@ +apply plugin: 'com.android.application' +apply from: '../.winboll/winboll_app_build.gradle' +apply from: '../.winboll/winboll_lint_build.gradle' + +def genVersionName(def versionName){ + // 检查编译标志位配置 + assert (winbollBuildProps['stageCount'] != null) + assert (winbollBuildProps['baseVersion'] != null) + // 保存基础版本号 + winbollBuildProps.setProperty("baseVersion", "${versionName}"); + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + // 返回编译版本号 + return "${versionName}." + winbollBuildProps['stageCount'] +} + +android { + compileSdkVersion 32 + buildToolsVersion "33.0.3" + + defaultConfig { + applicationId "cc.winboll.studio.app" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + // versionName 更新后需要手动设置 + // 项目模块目录的 build.gradle 文件的 stageCount=0 + // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" + versionName "1.8" + if(true) { + versionName = genVersionName("${versionName}") + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +dependencies { + api project(':winboll-shared') + api fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/app/build.properties b/app/build.properties new file mode 100644 index 0000000..89a998f --- /dev/null +++ b/app/build.properties @@ -0,0 +1,8 @@ +#Created by .winboll/winboll_app_build.gradle +#Sun Jan 05 07:55:24 HKT 2025 +stageCount=17 +libraryProject=winboll-shared +baseVersion=1.8 +publishVersion=1.8.16 +buildCount=0 +baseBetaVersion=1.8.17 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..233bad2 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\tools\adt-bundle-windows-x86_64-20131030\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/app/src/beta/AndroidManifest.xml b/app/src/beta/AndroidManifest.xml new file mode 100644 index 0000000..c598f4f --- /dev/null +++ b/app/src/beta/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/app/src/beta/res/values/strings.xml b/app/src/beta/res/values/strings.xml new file mode 100644 index 0000000..520e813 --- /dev/null +++ b/app/src/beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + WinBoll-APP+ + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2f401d1 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/cc/winboll/studio/app/App.java b/app/src/main/java/cc/winboll/studio/app/App.java new file mode 100644 index 0000000..fd86979 --- /dev/null +++ b/app/src/main/java/cc/winboll/studio/app/App.java @@ -0,0 +1,24 @@ +package cc.winboll.studio.app; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2024/12/08 15:10:51 + * @Describe 全局应用类 + */ +import cc.winboll.studio.shared.app.WinBollApplication; +import cc.winboll.studio.shared.log.LogUtils; + +public class App extends WinBollApplication { + + public static final String TAG = "App"; + + @Override + public void onCreate() { + // 必须在调用基类前设置应用调试标志, + // 这样可以预先设置日志与数据的存储根目录。 + //setIsDebug(BuildConfig.DEBUG); + super.onCreate(); + LogUtils.d(TAG, "onCreate"); + } + +} diff --git a/app/src/main/java/cc/winboll/studio/app/MainActivity.java b/app/src/main/java/cc/winboll/studio/app/MainActivity.java new file mode 100644 index 0000000..167b517 --- /dev/null +++ b/app/src/main/java/cc/winboll/studio/app/MainActivity.java @@ -0,0 +1,168 @@ +package cc.winboll.studio.app; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.Menu; +import android.view.MenuItem; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.shared.app.WinBollActivity; +import cc.winboll.studio.shared.app.WinBollActivityManager; +import cc.winboll.studio.shared.app.WinBollApplication; +import cc.winboll.studio.shared.log.LogUtils; +import cc.winboll.studio.shared.util.UriUtils; +import cc.winboll.studio.shared.view.StringToQrCodeView; +import cc.winboll.studio.shared.view.YesNoAlertDialog; +import cc.winboll.studio.unittest.UnitTestActivity; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.UUID; + +final public class MainActivity extends WinBollActivity { + + public static final String TAG = "MainActivity"; + + public static final int REQUEST_HOME_ACTIVITY = 0; + public static final int REQUEST_ABOUT_ACTIVITY = 1; + + @Override + protected boolean isEnableDisplayHomeAsUp() { + return false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + // 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回 + if (prosessIntents(getIntent())) return; + // 以下正常创建主窗口 + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + // 设置 WinBoll 应用 UI 类型 + WinBollApplication.setWinBollUI_TYPE(WinBollApplication.WinBollUI_TYPE.Aplication); + //ToastUtils.show("WinBollUI_TYPE " + WinBollApplication.getWinBollUI_TYPE()); + LogUtils.d(TAG, "BuildConfig.DEBUG : " + Boolean.toString(BuildConfig.DEBUG)); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + setSubTitle(""); + } + + // + // 处理传入的 Intent 数据 + // + boolean prosessIntents(Intent intent) { + if (intent == null + || intent.getAction() == null + || intent.getAction().equals("")) + return false; + + if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) { + try { + WinBollActivity clazzActivity = UnitTestActivity.class.newInstance(); + String tag = clazzActivity.getTag(); + LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag); + Intent subIntent = new Intent(this, UnitTestActivity.class); + subIntent.setAction(intent.getAction()); + File file = new File(getCacheDir(), UUID.randomUUID().toString()); + //取出文件uri + Uri uri = intent.getData(); + if (uri == null) { + uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); + } + //获取文件真实地址 + String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri); + if (TextUtils.isEmpty(szSrcPath)) { + return false; + } + + Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath())); + //startWinBollActivity(subIntent, tag); + WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class); + } catch (IllegalAccessException | InstantiationException | IOException e) { + LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); + // 函数处理异常返回失败 + return false; + } + } else { + LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet"); + return false; + } + return true; + } + + @Override + public String getTag() { + return TAG; + } + + + @Override + protected boolean isAddWinBollToolBar() { + return true; + } + + @Override + public void onBackPressed() { + exit(); + } + + void exit() { + YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){ + + @Override + public void onYes() { + WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); + } + + @Override + public void onNo() { + } + }; + YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener); + } + + @Override + protected Toolbar initToolBar() { + return findViewById(R.id.activitymainToolbar1); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_winboll_app_main, menu); + return super.onCreateOptionsMenu(menu); + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.item_unittest) { + WinBollActivityManager.getInstance(this).startWinBollActivity(this, UnitTestActivity.class); + } else if (item.getItemId() == R.id.item_exit) { + exit(); + return true; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (resultCode) { + case REQUEST_HOME_ACTIVITY : { + LogUtils.d(TAG, "REQUEST_HOME_ACTIVITY"); + break; + } + case REQUEST_ABOUT_ACTIVITY : { + LogUtils.d(TAG, "REQUEST_ABOUT_ACTIVITY"); + break; + } + default : { + super.onActivityResult(requestCode, resultCode, data); + } + } + } +} diff --git a/app/src/main/res/drawable/ic_launcher.xml b/app/src/main/res/drawable/ic_launcher.xml new file mode 100644 index 0000000..d4d1eaf --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..9486190 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..872b04e --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,10 @@ + + + + diff --git a/app/src/main/res/drawable/shape_gradient.xml b/app/src/main/res/drawable/shape_gradient.xml new file mode 100644 index 0000000..c164fe9 --- /dev/null +++ b/app/src/main/res/drawable/shape_gradient.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..1f05c49 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/view_toast.xml b/app/src/main/res/layout/view_toast.xml new file mode 100644 index 0000000..d6a9915 --- /dev/null +++ b/app/src/main/res/layout/view_toast.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/menu/toolbar_winboll_app_main.xml b/app/src/main/res/menu/toolbar_winboll_app_main.xml new file mode 100644 index 0000000..4a5cc30 --- /dev/null +++ b/app/src/main/res/menu/toolbar_winboll_app_main.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..6be8764 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + + #FF196ABC + #FF002B57 + #FF80BFFF + #FFA9A9A9 + #FF000000 + #FFFFFFFF + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..41ba8af --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + WinBoll-APP + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..045e125 --- /dev/null +++ b/app/src/main/res/values/styles.xml @@ -0,0 +1,3 @@ + + + diff --git a/app/src/main/res/xml/studio_provider.xml b/app/src/main/res/xml/studio_provider.xml new file mode 100644 index 0000000..f045677 --- /dev/null +++ b/app/src/main/res/xml/studio_provider.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/app/src/stage/AndroidManifest.xml b/app/src/stage/AndroidManifest.xml new file mode 100644 index 0000000..ee78d9f --- /dev/null +++ b/app/src/stage/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/app/src/stage/res/values/strings.xml b/app/src/stage/res/values/strings.xml new file mode 100644 index 0000000..ace0c41 --- /dev/null +++ b/app/src/stage/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/appbase/.gitignore b/appbase/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/appbase/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/appbase/app_update_description.txt b/appbase/app_update_description.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/appbase/app_update_description.txt @@ -0,0 +1 @@ + diff --git a/appbase/build.gradle b/appbase/build.gradle new file mode 100644 index 0000000..7fc290b --- /dev/null +++ b/appbase/build.gradle @@ -0,0 +1,54 @@ +apply plugin: 'com.android.application' +apply from: '../.winboll/winboll_app_build.gradle' +apply from: '../.winboll/winboll_lint_build.gradle' + +def genVersionName(def versionName){ + // 检查编译标志位配置 + assert (winbollBuildProps['stageCount'] != null) + assert (winbollBuildProps['baseVersion'] != null) + // 保存基础版本号 + winbollBuildProps.setProperty("baseVersion", "${versionName}"); + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + // 返回编译版本号 + return "${versionName}." + winbollBuildProps['stageCount'] +} + +android { + compileSdkVersion 32 + buildToolsVersion "33.0.3" + + defaultConfig { + applicationId "cc.winboll.studio.appbase" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + // versionName 更新后需要手动设置 + // .winboll/winbollBuildProps.properties 文件的 stageCount=0 + // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" + versionName "1.0" + if(true) { + versionName = genVersionName("${versionName}") + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } +} + +dependencies { + api project(':libappbase') + api fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/appbase/build.properties b/appbase/build.properties new file mode 100644 index 0000000..907174b --- /dev/null +++ b/appbase/build.properties @@ -0,0 +1,8 @@ +#Created by .winboll/winboll_app_build.gradle +#Sun Jan 05 02:30:11 GMT 2025 +stageCount=0 +libraryProject= +baseVersion=1.0 +publishVersion=1.0.0 +buildCount=2 +baseBetaVersion=1.0.1 diff --git a/appbase/proguard-rules.pro b/appbase/proguard-rules.pro new file mode 100644 index 0000000..233bad2 --- /dev/null +++ b/appbase/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\tools\adt-bundle-windows-x86_64-20131030\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/appbase/src/beta/AndroidManifest.xml b/appbase/src/beta/AndroidManifest.xml new file mode 100644 index 0000000..ee78d9f --- /dev/null +++ b/appbase/src/beta/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/appbase/src/beta/res/values/strings.xml b/appbase/src/beta/res/values/strings.xml new file mode 100644 index 0000000..024cdd2 --- /dev/null +++ b/appbase/src/beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + AppBase+ + + diff --git a/appbase/src/main/AndroidManifest.xml b/appbase/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5392b6 --- /dev/null +++ b/appbase/src/main/AndroidManifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/App.java b/appbase/src/main/java/cc/winboll/studio/appbase/App.java new file mode 100644 index 0000000..874e4fa --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/App.java @@ -0,0 +1,16 @@ +package cc.winboll.studio.appbase; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2025/01/05 09:54:42 + * @Describe APPbase 应用类 + */ + import cc.winboll.studio.GlobalApplication; + +public class App extends GlobalApplication { + + public static final String TAG = "App"; + + + +} diff --git a/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java new file mode 100644 index 0000000..6100bcf --- /dev/null +++ b/appbase/src/main/java/cc/winboll/studio/appbase/MainActivity.java @@ -0,0 +1,15 @@ +package cc.winboll.studio.appbase; + +import android.app.Activity; +import android.os.Bundle; + +public class MainActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + } + +} \ No newline at end of file diff --git a/appbase/src/main/res/drawable/ic_launcher.png b/appbase/src/main/res/drawable/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..b824ebdd48db917eea2e67a82260a100371f8a24 GIT binary patch literal 9250 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 literal 0 HcmV?d00001 diff --git a/appbase/src/main/res/layout/activity_main.xml b/appbase/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..177c979 --- /dev/null +++ b/appbase/src/main/res/layout/activity_main.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/appbase/src/main/res/values-v21/styles.xml b/appbase/src/main/res/values-v21/styles.xml new file mode 100644 index 0000000..0aed032 --- /dev/null +++ b/appbase/src/main/res/values-v21/styles.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/appbase/src/main/res/values/colors.xml b/appbase/src/main/res/values/colors.xml new file mode 100644 index 0000000..294809a --- /dev/null +++ b/appbase/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #009688 + #00796B + #FF9800 + \ No newline at end of file diff --git a/appbase/src/main/res/values/strings.xml b/appbase/src/main/res/values/strings.xml new file mode 100644 index 0000000..ba23523 --- /dev/null +++ b/appbase/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + AppBase + diff --git a/appbase/src/main/res/values/styles.xml b/appbase/src/main/res/values/styles.xml new file mode 100644 index 0000000..6799c28 --- /dev/null +++ b/appbase/src/main/res/values/styles.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/appbase/src/stage/AndroidManifest.xml b/appbase/src/stage/AndroidManifest.xml new file mode 100644 index 0000000..ee78d9f --- /dev/null +++ b/appbase/src/stage/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/appbase/src/stage/res/values/strings.xml b/appbase/src/stage/res/values/strings.xml new file mode 100644 index 0000000..ace0c41 --- /dev/null +++ b/appbase/src/stage/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/apputils/app_update_description.txt b/apputils/app_update_description.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/apputils/app_update_description.txt @@ -0,0 +1 @@ + diff --git a/apputils/build.gradle b/apputils/build.gradle new file mode 100644 index 0000000..6e1573e --- /dev/null +++ b/apputils/build.gradle @@ -0,0 +1,55 @@ +apply plugin: 'com.android.application' +apply from: '../.winboll/winboll_app_build.gradle' +apply from: '../.winboll/winboll_lint_build.gradle' + +def genVersionName(def versionName){ + // 检查编译标志位配置 + assert (winbollBuildProps['stageCount'] != null) + assert (winbollBuildProps['baseVersion'] != null) + // 保存基础版本号 + winbollBuildProps.setProperty("baseVersion", "${versionName}"); + //保存编译标志配置 + FileOutputStream fos = new FileOutputStream(winbollBuildPropsFile) + winbollBuildProps.store(fos, "${winbollBuildPropsDesc}"); + fos.close(); + + // 返回编译版本号 + return "${versionName}." + winbollBuildProps['stageCount'] +} + +android { + compileSdkVersion 32 + buildToolsVersion "33.0.3" + + defaultConfig { + applicationId "cc.winboll.studio.apputils" + minSdkVersion 21 + targetSdkVersion 30 + versionCode 1 + // versionName 更新后需要手动设置 + // 项目模块目录的 build.gradle 文件的 stageCount=0 + // Gradle编译环境下合起来的 versionName 就是 "${versionName}.0" + versionName "9.2" + if(true) { + versionName = genVersionName("${versionName}") + } + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } +} + +dependencies { + api project(':libapputils') + api 'cc.winboll.studio:libappbase:1.0.3' + api fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/apputils/build.properties b/apputils/build.properties new file mode 100644 index 0000000..9d55320 --- /dev/null +++ b/apputils/build.properties @@ -0,0 +1,8 @@ +#Created by .winboll/winboll_app_build.gradle +#Sat Jan 18 13:03:10 HKT 2025 +stageCount=2 +libraryProject=libapputils +baseVersion=9.2 +publishVersion=9.2.1 +buildCount=0 +baseBetaVersion=9.2.2 diff --git a/apputils/proguard-rules.pro b/apputils/proguard-rules.pro new file mode 100644 index 0000000..233bad2 --- /dev/null +++ b/apputils/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in C:\tools\adt-bundle-windows-x86_64-20131030\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/apputils/src/beta/AndroidManifest.xml b/apputils/src/beta/AndroidManifest.xml new file mode 100644 index 0000000..c598f4f --- /dev/null +++ b/apputils/src/beta/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/apputils/src/beta/res/values/strings.xml b/apputils/src/beta/res/values/strings.xml new file mode 100644 index 0000000..4c1123c --- /dev/null +++ b/apputils/src/beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + APPUtils+ + + diff --git a/apputils/src/main/AndroidManifest.xml b/apputils/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1a0c9c3 --- /dev/null +++ b/apputils/src/main/AndroidManifest.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/App.java b/apputils/src/main/java/cc/winboll/studio/apputils/App.java new file mode 100644 index 0000000..ca55cce --- /dev/null +++ b/apputils/src/main/java/cc/winboll/studio/apputils/App.java @@ -0,0 +1,31 @@ +package cc.winboll.studio.apputils; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2024/12/08 15:10:51 + * @Describe 全局应用类 + */ +import android.view.Gravity; +import cc.winboll.studio.libapputils.app.WinBollApplication; +import com.hjq.toast.ToastUtils; +import com.hjq.toast.style.WhiteToastStyle; + +public class App extends WinBollApplication { + + public static final String TAG = "App"; + + public static final String _ACTION_DEBUGVIEW = WinBollApplication.class.getName() + "_ACTION_DEBUGVIEW"; + + @Override + public void onCreate() { + super.onCreate(); + // 初始化 Toast 框架 + // + ToastUtils.init(this); + // 设置 Toast 布局样式 + //ToastUtils.setView(R.layout.view_toast); + ToastUtils.setStyle(new WhiteToastStyle()); + ToastUtils.setGravity(Gravity.BOTTOM, 0, 200); + } + +} diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java new file mode 100644 index 0000000..49963b5 --- /dev/null +++ b/apputils/src/main/java/cc/winboll/studio/apputils/MainActivity.java @@ -0,0 +1,182 @@ +package cc.winboll.studio.apputils; + +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.Toast; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity; +import cc.winboll.studio.libapputils.activities.QRCodeDecodeActivity; +import cc.winboll.studio.libapputils.app.WinBollActivity; +import cc.winboll.studio.libapputils.app.WinBollActivityManager; +import cc.winboll.studio.libapputils.log.LogActivity; +import cc.winboll.studio.libapputils.log.LogUtils; +import com.hjq.toast.ToastUtils; + +final public class MainActivity extends WinBollActivity { + + public static final String TAG = "MainActivity"; + + public static final int REQUEST_QRCODEDECODE_ACTIVITY = 0; + + @Override + protected boolean isEnableDisplayHomeAsUp() { + return false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + + //Toolbar toolbar = findViewById(R.id.activitymainToolbar1); + //setActionBar(toolbar); + + // 接收并处理 Intent 数据,函数 Intent 处理接收就直接返回 + //if (prosessIntents(getIntent())) return; + // 以下正常创建主窗口 + +// // 设置 WinBoll 应用 UI 类型 +// WinBollApplication.setWinBollUI_TYPE(WinBollApplication.WinBollUI_TYPE.Aplication); +// //ToastUtils.show("WinBollUI_TYPE " + WinBollApplication.getWinBollUI_TYPE()); +// LogUtils.d(TAG, "BuildConfig.DEBUG : " + Boolean.toString(BuildConfig.DEBUG)); + } + + public void onTestLogClick(View view) { + LogUtils.d(TAG, "onTestLogClick"); + Toast.makeText(getApplication(), "onTestLogClick", Toast.LENGTH_SHORT).show(); + } + + public void onLogUtilsClick(View view) { + Intent intent = new Intent(this, LogActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); + intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + startActivity(intent); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); +// setSubTitle(""); + } + + @Override + public void onBackPressed() { +// exit(); + } + +// void exit() { +// YesNoAlertDialog.OnDialogResultListener listener = new YesNoAlertDialog.OnDialogResultListener(){ +// +// @Override +// public void onYes() { +// WinBollActivityManager.getInstance(getApplicationContext()).finishAll(); +// } +// +// @Override +// public void onNo() { +// } +// }; +// YesNoAlertDialog.show(this, "[ " + getString(R.string.app_name) + " ]", "Exit(Yes/No).\nIs close all activity?", listener); +// } + + // + // 处理传入的 Intent 数据 + // + boolean prosessIntents(Intent intent) { + if (intent == null + || intent.getAction() == null + || intent.getAction().equals("")) + return false; + +// if (intent.getAction().equals(StringToQrCodeView.ACTION_UNITTEST_QRCODE)) { +// try { +// WinBollActivity clazzActivity = UnitTestActivity.class.newInstance(); +// String tag = clazzActivity.getTag(); +// LogUtils.d(TAG, "String tag = clazzActivity.getTag(); tag " + tag); +// Intent subIntent = new Intent(this, UnitTestActivity.class); +// subIntent.setAction(intent.getAction()); +// File file = new File(getCacheDir(), UUID.randomUUID().toString()); +// //取出文件uri +// Uri uri = intent.getData(); +// if (uri == null) { +// uri = intent.getParcelableExtra(Intent.EXTRA_STREAM); +// } +// //获取文件真实地址 +// String szSrcPath = UriUtils.getFileFromUri(getApplication(), uri); +// if (TextUtils.isEmpty(szSrcPath)) { +// return false; +// } +// +// Files.copy(Paths.get(szSrcPath), Paths.get(file.getPath())); +// //startWinBollActivity(subIntent, tag); +// WinBollActivityManager.getInstance(this).startWinBollActivity(this, subIntent, UnitTestActivity.class); +// } catch (IllegalAccessException | InstantiationException | IOException e) { +// LogUtils.d(TAG, e, Thread.currentThread().getStackTrace()); +// // 函数处理异常返回失败 +// return false; +// } +// } else { +// LogUtils.d(TAG, "prosessIntents|" + intent.getAction() + "|yet"); +// return false; +// } + return true; + } + + @Override + public String getTag() { + return TAG; + } + + @Override + protected boolean isAddWinBollToolBar() { + return true; + } + + @Override + protected Toolbar initToolBar() { + return findViewById(R.id.activitymainToolbar1); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.toolbar_main, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.item_testwinboll) { + WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestWinBollActivity.class); + } else if (item.getItemId() == R.id.item_teststringtoqrcodeview) { + WinBollActivityManager.getInstance(this).startWinBollActivity(this, TestStringToQrCodeViewActivity.class); + } else if (item.getItemId() == R.id.item_testqrcodedecodeactivity) { + Intent intent = new Intent(this, QRCodeDecodeActivity.class); + startActivityForResult(intent, REQUEST_QRCODEDECODE_ACTIVITY); + } + return super.onOptionsItemSelected(item); + } + + public void onTestJavascriptHtmlActivity(View view) { + Intent intent = new Intent(this, AssetsHtmlActivity.class); + intent.putExtra(AssetsHtmlActivity.EXTRA_HTMLFILENAME, "javascript_test.html"); + WinBollActivityManager.getInstance(this).startWinBollActivity(this, intent, AssetsHtmlActivity.class); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case REQUEST_QRCODEDECODE_ACTIVITY : { + String text = data.getStringExtra(QRCodeDecodeActivity.EXTRA_RESULT); + ToastUtils.show(text); + break; + } + default : { + ToastUtils.show(String.format("%d, %d", requestCode, resultCode)); + super.onActivityResult(requestCode, resultCode, data); + } + } + } +} diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java new file mode 100644 index 0000000..06c80a3 --- /dev/null +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestStringToQrCodeViewActivity.java @@ -0,0 +1,50 @@ +package cc.winboll.studio.apputils; + +import android.os.Bundle; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libapputils.app.WinBollActivity; +import cc.winboll.studio.libapputils.view.StringToQrCodeView; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2025/01/17 19:50:46 + */ +public class TestStringToQrCodeViewActivity extends WinBollActivity { + + public static final String TAG = "TestStringToQrCodeViewActivity"; + + StringToQrCodeView mStringToQrCodeView; + + @Override + public String getTag() { + return TAG; + } + + @Override + protected Toolbar initToolBar() { + return findViewById(R.id.activityteststringtoqrcodeviewToolbar1); + } + + @Override + protected boolean isEnableDisplayHomeAsUp() { + return true; + } + + @Override + protected boolean isAddWinBollToolBar() { + return true; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_teststringtoqrcodeview); + mStringToQrCodeView = findViewById(R.id.activityteststringtoqrcodeviewStringToQrCodeView1); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + setSubTitle(TAG); + } +} diff --git a/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java new file mode 100644 index 0000000..91bc4b4 --- /dev/null +++ b/apputils/src/main/java/cc/winboll/studio/apputils/TestWinBollActivity.java @@ -0,0 +1,52 @@ +package cc.winboll.studio.apputils; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import androidx.appcompat.widget.Toolbar; +import cc.winboll.studio.libapputils.activities.AssetsHtmlActivity; +import cc.winboll.studio.libapputils.app.WinBollActivity; +import cc.winboll.studio.libapputils.app.WinBollActivityManager; + +/** + * @Author ZhanGSKen@QQ.COM + * @Date 2025/01/13 15:09:46 + */ +public class TestWinBollActivity extends WinBollActivity { + + public static final String TAG = "TestWinBollActivity"; + + @Override + public String getTag() { + return TAG; + } + + @Override + protected Toolbar initToolBar() { + return findViewById(R.id.activitytestwinbollToolbar1); + } + + @Override + protected boolean isEnableDisplayHomeAsUp() { + return true; + } + + @Override + protected boolean isAddWinBollToolBar() { + return true; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_testwinboll); + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + setSubTitle(TAG); + } + + +} diff --git a/apputils/src/main/res/drawable/ic_launcher.xml b/apputils/src/main/res/drawable/ic_launcher.xml new file mode 100644 index 0000000..d4d1eaf --- /dev/null +++ b/apputils/src/main/res/drawable/ic_launcher.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/apputils/src/main/res/drawable/ic_launcher_background.xml b/apputils/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..9486190 --- /dev/null +++ b/apputils/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apputils/src/main/res/drawable/ic_launcher_foreground.xml b/apputils/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..872b04e --- /dev/null +++ b/apputils/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,10 @@ + + + + diff --git a/apputils/src/main/res/drawable/shape_gradient.xml b/apputils/src/main/res/drawable/shape_gradient.xml new file mode 100644 index 0000000..c164fe9 --- /dev/null +++ b/apputils/src/main/res/drawable/shape_gradient.xml @@ -0,0 +1,10 @@ + + + + + + diff --git a/apputils/src/main/res/layout/activity_main.xml b/apputils/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..ad57465 --- /dev/null +++ b/apputils/src/main/res/layout/activity_main.xml @@ -0,0 +1,60 @@ + + + + + + + + + +