Full Code of wgllss/WXDynamicPlugin for AI

master cd6bc61159f4 cached
1527 files
2.4 MB
739.0k tokens
353 symbols
1 requests
Download .txt
Showing preview only (3,039K chars total). Download the full file or copy to clipboard to get everything.
Repository: wgllss/WXDynamicPlugin
Branch: master
Commit: cd6bc61159f4
Files: 1527
Total size: 2.4 MB

Directory structure:
gitextract_2old5cjg/

├── .gitignore
├── LICENSE
├── README.md
├── WX/
│   ├── WX-Code/
│   │   ├── WX-Host/
│   │   │   ├── app/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── build.gradle
│   │   │   │   ├── proguard-rules.pro
│   │   │   │   ├── sign/
│   │   │   │   │   └── WXSample.jks
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           ├── assets/
│   │   │   │           │   └── loading_1000
│   │   │   │           ├── java/
│   │   │   │           │   └── com/
│   │   │   │           │       └── wgllss/
│   │   │   │           │           └── dynamic/
│   │   │   │           │               └── host/
│   │   │   │           │                   ├── FaceImpl.kt
│   │   │   │           │                   ├── SampleApplication.kt
│   │   │   │           │                   └── VersionImpl.kt
│   │   │   │           └── res/
│   │   │   │               ├── drawable/
│   │   │   │               │   └── ic_launcher_background.xml
│   │   │   │               ├── drawable-v24/
│   │   │   │               │   └── ic_launcher_foreground.xml
│   │   │   │               ├── mipmap-anydpi-v26/
│   │   │   │               │   └── ic_launcher.xml
│   │   │   │               └── xml/
│   │   │   │                   ├── backup_rules.xml
│   │   │   │                   ├── data_extraction_rules.xml
│   │   │   │                   └── network_security_config.xml
│   │   │   └── app-lib/
│   │   │       ├── wgllss-business-re-library/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── build.gradle
│   │   │       │   ├── proguard-rules.pro
│   │   │       │   └── src/
│   │   │       │       ├── main/
│   │   │       │       │   ├── AndroidManifest.xml
│   │   │       │       │   └── java/
│   │   │       │       │       └── com/
│   │   │       │       │           └── wgllss/
│   │   │       │       │               └── sample/
│   │   │       │       │                   └── feature_system/
│   │   │       │       │                       └── globle/
│   │   │       │       │                           └── Constants.kt
│   │   │       │       └── test/
│   │   │       │           └── java/
│   │   │       │               └── com/
│   │   │       │                   └── wgllss/
│   │   │       │                       └── sample/
│   │   │       │                           └── ExampleUnitTest.kt
│   │   │       ├── wgllss-common-re-library/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── build.gradle
│   │   │       │   ├── libs/
│   │   │       │   │   └── com_wang_avi_library-2.1.3.aar
│   │   │       │   ├── proguard-rules.pro
│   │   │       │   └── src/
│   │   │       │       └── main/
│   │   │       │           ├── AndroidManifest.xml
│   │   │       │           ├── java/
│   │   │       │           │   └── com/
│   │   │       │           │       └── wgllss/
│   │   │       │           │           └── core/
│   │   │       │           │               ├── dialog/
│   │   │       │           │               │   └── CommonLoadingView.kt
│   │   │       │           │               ├── ex/
│   │   │       │           │               │   ├── ContextEX.kt
│   │   │       │           │               │   ├── Flow.kt
│   │   │       │           │               │   └── NetWorkHelp.kt
│   │   │       │           │               ├── permissions/
│   │   │       │           │               │   ├── PermissionInterceptor.kt
│   │   │       │           │               │   └── PermissionNameConvert.kt
│   │   │       │           │               ├── units/
│   │   │       │           │               │   ├── AppGlobals.kt
│   │   │       │           │               │   ├── DeviceIdUtil.kt
│   │   │       │           │               │   └── LogTimer.kt
│   │   │       │           │               └── widget/
│   │   │       │           │                   └── CommonToast.kt
│   │   │       │           └── res/
│   │   │       │               ├── anim/
│   │   │       │               │   └── anim_alpha_121.xml
│   │   │       │               ├── drawable/
│   │   │       │               │   ├── button_bg_transparent_helf.xml
│   │   │       │               │   └── progressbar_shape.xml
│   │   │       │               ├── layout/
│   │   │       │               │   └── common_loading.xml
│   │   │       │               └── values/
│   │   │       │                   ├── colors.xml
│   │   │       │                   ├── strings.xml
│   │   │       │                   └── themes.xml
│   │   │       ├── wgllss-dynamic-host-library/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── build.gradle
│   │   │       │   ├── consumer-rules.pro
│   │   │       │   ├── proguard-rules.pro
│   │   │       │   └── src/
│   │   │       │       ├── androidTest/
│   │   │       │       │   └── java/
│   │   │       │       │       └── com/
│   │   │       │       │           └── wgllss/
│   │   │       │       │               └── host/
│   │   │       │       │                   └── library/
│   │   │       │       │                       └── ExampleInstrumentedTest.kt
│   │   │       │       ├── main/
│   │   │       │       │   └── AndroidManifest.xml
│   │   │       │       └── test/
│   │   │       │           └── java/
│   │   │       │               └── com/
│   │   │       │                   └── wgllss/
│   │   │       │                       └── host/
│   │   │       │                           └── library/
│   │   │       │                               └── ExampleUnitTest.kt
│   │   │       └── wgllss-dynamic-host-skin-resource-lib/
│   │   │           ├── .gitignore
│   │   │           ├── build.gradle
│   │   │           ├── proguard-rules.pro
│   │   │           └── src/
│   │   │               └── main/
│   │   │                   ├── AndroidManifest.xml
│   │   │                   └── res/
│   │   │                       ├── drawable/
│   │   │                       │   ├── ic_baseline_pause_36.xml
│   │   │                       │   ├── ic_baseline_play_arrow_36.xml
│   │   │                       │   ├── ic_baseline_skip_next_36.xml
│   │   │                       │   ├── ic_baseline_skip_previous_36.xml
│   │   │                       │   ├── splash_preview.xml
│   │   │                       │   └── splash_preview_dark.xml
│   │   │                       ├── values/
│   │   │                       │   ├── colors.xml
│   │   │                       │   ├── dimens.xml
│   │   │                       │   ├── ids.xml
│   │   │                       │   ├── strings.xml
│   │   │                       │   └── themes.xml
│   │   │                       ├── values-night/
│   │   │                       │   ├── colors.xml
│   │   │                       │   └── themes.xml
│   │   │                       ├── values-v27/
│   │   │                       │   └── themes.xml
│   │   │                       └── values-v29/
│   │   │                           └── themes.xml
│   │   └── WX-Plugin/
│   │       ├── Wgllss-Dynamic-Plugin-Common-Library/
│   │       │   ├── .gitignore
│   │       │   ├── build.gradle
│   │       │   ├── proguard-rules.pro
│   │       │   └── src/
│   │       │       └── main/
│   │       │           ├── AndroidManifest.xml
│   │       │           └── java/
│   │       │               └── com/
│   │       │                   └── wgllss/
│   │       │                       └── core/
│   │       │                           ├── activity/
│   │       │                           │   ├── BaseActivity.kt
│   │       │                           │   ├── BaseMVVMActivity.kt
│   │       │                           │   ├── BaseViewModePluginActivity.kt
│   │       │                           │   ├── BaseViewModelActivity.kt
│   │       │                           │   ├── BaseViewModelClassActivity.kt
│   │       │                           │   ├── BaseViewPluginResActivity.kt
│   │       │                           │   ├── WActivityManager.kt
│   │       │                           │   └── compose/
│   │       │                           │       └── BaseComposeActivity.kt
│   │       │                           ├── adapter/
│   │       │                           │   ├── BasePagerAdapter.kt
│   │       │                           │   ├── BasePluginRecyclerAdapter.kt
│   │       │                           │   ├── BaseRecyclerAdapter.kt
│   │       │                           │   └── ViewPage2ChildFragmentAdapter.kt
│   │       │                           ├── data/
│   │       │                           │   └── DialogBean.kt
│   │       │                           ├── ex/
│   │       │                           │   ├── Context.kt
│   │       │                           │   ├── Fragment.kt
│   │       │                           │   ├── FragmentActivity.kt
│   │       │                           │   ├── ImageView.kt
│   │       │                           │   ├── SwipeRefreshLayout.kt
│   │       │                           │   └── ViewModel.kt
│   │       │                           ├── fragment/
│   │       │                           │   ├── BaseFragment.kt
│   │       │                           │   ├── BasePluginResFragment.kt
│   │       │                           │   ├── BaseViewModelClassFragment.kt
│   │       │                           │   ├── BaseViewModelFragment.kt
│   │       │                           │   └── BaseViewModelPluginFragment.kt
│   │       │                           ├── http/
│   │       │                           │   ├── HttpRequest.kt
│   │       │                           │   └── HttpUrlConnectionRequest.kt
│   │       │                           ├── material/
│   │       │                           │   └── ThemeUtils.kt
│   │       │                           ├── units/
│   │       │                           │   ├── DeviceIdUtilX.kt
│   │       │                           │   ├── ImageUtils.kt
│   │       │                           │   ├── ResourceUtils.kt
│   │       │                           │   ├── ScreenManager.kt
│   │       │                           │   ├── SdkIntUtils.kt
│   │       │                           │   ├── ServiceUtil.kt
│   │       │                           │   ├── StatusBarUtil.kt
│   │       │                           │   └── WLog.kt
│   │       │                           ├── viewmodel/
│   │       │                           │   └── BaseViewModel.kt
│   │       │                           └── widget/
│   │       │                               ├── ButtomNavigationViewEx.kt
│   │       │                               ├── DividerGridItemDecoration.kt
│   │       │                               ├── DrawerBack.kt
│   │       │                               ├── MusicVisualizerView.kt
│   │       │                               └── OnRecyclerViewItemClickListener.kt
│   │       ├── Wgllss-Dynamic-Plugin-Generate/
│   │       │   ├── wgllss-sample-create-all-app/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── version/
│   │       │   │                               └── json/
│   │       │   │                                   └── Test.kt
│   │       │   ├── wgllss-sample-create-version-config-annotations/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── annotations/
│   │       │   │                           └── CreateVersionConfig.kt
│   │       │   ├── wgllss-sample-create-version-config-app/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── version/
│   │       │   │                               └── json/
│   │       │   │                                   └── Test.kt
│   │       │   └── wgllss-sample-create-version-config-compiler/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── libs/
│   │       │       │   ├── Wgllss-Dynamic-Host-Protobuf-lib.jar
│   │       │       │   └── classes.jar
│   │       │       └── src/
│   │       │           └── main/
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           └── compiler/
│   │       │                               └── AptCreateConfigProcessor.kt
│   │       ├── Wgllss-Dynamic-Plugin-Manager/
│   │       │   ├── Wgllss-Dynamic-Plugin-DownloadFace-Impl/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── plugin/
│   │       │   │                               └── download_face/
│   │       │   │                                   └── DownLoadFaceImpl.kt
│   │       │   ├── Wgllss-Dynamic-Plugin-Loader-Impl/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── plugin/
│   │       │   │                               └── loader/
│   │       │   │                                   └── LoaderManagerImpl.kt
│   │       │   └── Wgllss-Dynamic-Plugin-Manager/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── proguard-rules.pro
│   │       │       └── src/
│   │       │           └── main/
│   │       │               ├── AndroidManifest.xml
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           └── dynamic/
│   │       │                               └── plugin/
│   │       │                                   └── manager/
│   │       │                                       ├── PluginManager.kt
│   │       │                                       └── PluginResource.kt
│   │       ├── Wgllss-Dynamic-Plugin-SDK/
│   │       │   ├── Wgllss-Dynamic-Plugin-Library/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── consumer-rules.pro
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       ├── main/
│   │       │   │       │   ├── AndroidManifest.xml
│   │       │   │       │   └── java/
│   │       │   │       │       └── com/
│   │       │   │       │           └── wgllss/
│   │       │   │       │               └── dynamic/
│   │       │   │       │                   └── runtime/
│   │       │   │       │                       └── library/
│   │       │   │       │                           ├── WXDynamicAidlInterface.java
│   │       │   │       │                           ├── WXHostActivityDelegate.java
│   │       │   │       │                           └── WXHostServiceDelegate.java
│   │       │   │       └── test/
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── plugin/
│   │       │   │                           └── library/
│   │       │   │                               └── ExampleUnitTest.kt
│   │       │   └── Wgllss-Dynamic-Plugin-RunTime-Apk/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── consumer-rules.pro
│   │       │       ├── proguard-rules.pro
│   │       │       └── src/
│   │       │           ├── main/
│   │       │           │   ├── AndroidManifest.xml
│   │       │           │   └── java/
│   │       │           │       └── com/
│   │       │           │           └── wgllss/
│   │       │           │               └── dynamic/
│   │       │           │                   └── plugin/
│   │       │           │                       └── runtime/
│   │       │           │                           ├── HostComposePluginActivity.java
│   │       │           │                           ├── HostPluginActivity.java
│   │       │           │                           ├── HostPluginService.java
│   │       │           │                           ├── PluginClassLoader.java
│   │       │           │                           ├── PluginProcessStartNotStickyService.java
│   │       │           │                           ├── PluginProcessStartRedeliverIntentService.java
│   │       │           │                           ├── PluginProcessStartStickyCompatibilityService.java
│   │       │           │                           ├── PluginProcessStartStickyService.java
│   │       │           │                           ├── PluginSingleInstanceActivity.java
│   │       │           │                           ├── PluginSingleInstanceComposeActivity.java
│   │       │           │                           ├── PluginSingleTaskActivity.java
│   │       │           │                           ├── PluginSingleTaskComposeActivity.java
│   │       │           │                           ├── PluginSingleTopActivity.java
│   │       │           │                           ├── PluginSingleTopComposeActivity.java
│   │       │           │                           ├── PluginStandardActivity.java
│   │       │           │                           ├── PluginStandardComposeActivity.java
│   │       │           │                           ├── PluginStartNotStickyService.java
│   │       │           │                           ├── PluginStartRedeliverIntentService.java
│   │       │           │                           ├── PluginStartStickyCompatibilityService.java
│   │       │           │                           └── PluginStartStickyService.java
│   │       │           └── test/
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           └── dynamic/
│   │       │                               └── runtime/
│   │       │                                   └── ExampleUnitTest.kt
│   │       ├── Wgllss-Dynamic-Plugin-Sample/
│   │       │   ├── wgllss-sample-assets-source-apk/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── assets/
│   │       │   │               ├── css/
│   │       │   │               │   └── main.8f39d45c.css
│   │       │   │               └── js/
│   │       │   │                   ├── jquery.js
│   │       │   │                   └── jquery.lazyload.js
│   │       │   ├── wgllss-sample-business-library/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── sample/
│   │       │   │                           ├── data/
│   │       │   │                           │   ├── ImgExtraData.kt
│   │       │   │                           │   ├── NewsBean.kt
│   │       │   │                           │   └── SampleItemBean.kt
│   │       │   │                           ├── datasource/
│   │       │   │                           │   ├── net/
│   │       │   │                           │   │   ├── HeaderInterceptor.kt
│   │       │   │                           │   │   ├── MyApi.kt
│   │       │   │                           │   │   └── RetrofitUtils.kt
│   │       │   │                           │   └── repository/
│   │       │   │                           │       └── NewsRepository.kt
│   │       │   │                           ├── feature_system/
│   │       │   │                           │   ├── music/
│   │       │   │                           │   │   ├── exoplayerimpl/
│   │       │   │                           │   │   │   ├── ExoPlayerUtils.kt
│   │       │   │                           │   │   │   └── MusicServiceConnection.kt
│   │       │   │                           │   │   ├── extensions/
│   │       │   │                           │   │   │   ├── MediaExtensions.kt
│   │       │   │                           │   │   │   ├── MediaMetadataCompatExt.kt
│   │       │   │                           │   │   │   └── PlaybackStateCompatExt.kt
│   │       │   │                           │   │   └── notification/
│   │       │   │                           │   │       ├── WXNotificationListener.kt
│   │       │   │                           │   │       └── WXPlayerNotificationManager.kt
│   │       │   │                           │   ├── room/
│   │       │   │                           │   │   ├── CollectDataBase.kt
│   │       │   │                           │   │   ├── dao/
│   │       │   │                           │   │   │   └── CollectDao.kt
│   │       │   │                           │   │   ├── help/
│   │       │   │                           │   │   │   ├── RoomDBHelper.kt
│   │       │   │                           │   │   │   └── RoomDBMigration.kt
│   │       │   │                           │   │   └── table/
│   │       │   │                           │   │       └── CollectTableBean.kt
│   │       │   │                           │   ├── savestatus/
│   │       │   │                           │   │   └── MMKVHelp.kt
│   │       │   │                           │   ├── services/
│   │       │   │                           │   │   └── MusicService.kt
│   │       │   │                           │   └── untils/
│   │       │   │                           │       └── UUIDHelp.kt
│   │       │   │                           └── features_ui/
│   │       │   │                               └── playing/
│   │       │   │                                   └── activity/
│   │       │   │                                       └── NotificationTargetActivity.kt
│   │       │   ├── wgllss-sample-loader-version/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── loader/
│   │       │   │                           └── version/
│   │       │   │                               └── LoaderVersionImpl.kt
│   │       │   ├── wgllss-sample-skin-resource-apk/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── res/
│   │       │   │               ├── drawable/
│   │       │   │               │   ├── bottom_navigation_color_selector.xml
│   │       │   │               │   ├── circle_gray_border.xml
│   │       │   │               │   ├── ic_baseline_arrow_back_24.xml
│   │       │   │               │   ├── ic_baseline_grade_24.xml
│   │       │   │               │   ├── ic_baseline_pause_36.xml
│   │       │   │               │   ├── ic_baseline_play_arrow_36.xml
│   │       │   │               │   ├── ic_baseline_search_24.xml
│   │       │   │               │   ├── ic_baseline_skip_next_36.xml
│   │       │   │               │   ├── ic_baseline_skip_previous_36.xml
│   │       │   │               │   ├── ic_dashboard_black_24dp.xml
│   │       │   │               │   ├── ic_home_black_24dp.xml
│   │       │   │               │   ├── ic_notifications_black_24dp.xml
│   │       │   │               │   ├── ic_round_queue_music_24.xml
│   │       │   │               │   ├── play_btn_play_pause_selector.xml
│   │       │   │               │   ├── play_load_drawable.xml
│   │       │   │               │   ├── play_mode_level_list.xml
│   │       │   │               │   ├── seek_bar_progress_style.xml
│   │       │   │               │   ├── seekbar_circle_red_border.xml
│   │       │   │               │   ├── seekbar_thumb.xml
│   │       │   │               │   ├── switch_thumb_selector.xml
│   │       │   │               │   └── switch_track_selector.xml
│   │       │   │               ├── values/
│   │       │   │               │   ├── colors.xml
│   │       │   │               │   ├── dimens.xml
│   │       │   │               │   ├── ids.xml
│   │       │   │               │   ├── strings.xml
│   │       │   │               │   └── themes.xml
│   │       │   │               ├── values-night/
│   │       │   │               │   ├── colors.xml
│   │       │   │               │   └── themes.xml
│   │       │   │               ├── values-v27/
│   │       │   │               │   └── themes.xml
│   │       │   │               └── values-v29/
│   │       │   │                   └── themes.xml
│   │       │   ├── wgllss-sample-ui-home/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           ├── impl/
│   │       │   │                           │   └── ILoadHomeImpl.kt
│   │       │   │                           ├── initializer/
│   │       │   │                           │   └── InitHomeFirstInitialize.kt
│   │       │   │                           ├── provider/
│   │       │   │                           │   └── TestContentProvider.kt
│   │       │   │                           ├── sample/
│   │       │   │                           │   ├── feature_home/
│   │       │   │                           │   │   ├── adapter/
│   │       │   │                           │   │   │   └── HomeNewsAdapter.kt
│   │       │   │                           │   │   ├── fragment/
│   │       │   │                           │   │   │   ├── HomeFragment.kt
│   │       │   │                           │   │   │   └── HomeTabFragment.kt
│   │       │   │                           │   │   ├── pkg/
│   │       │   │                           │   │   │   └── ResourceContains.kt
│   │       │   │                           │   │   └── viewmodels/
│   │       │   │                           │   │       ├── HomeTabViewModel.kt
│   │       │   │                           │   │       ├── HomeViewModel.kt
│   │       │   │                           │   │       └── SettingViewModel.kt
│   │       │   │                           │   └── feature_startup/
│   │       │   │                           │       └── startup/
│   │       │   │                           │           ├── GenerateHomeLayout.kt
│   │       │   │                           │           ├── HomeContains.kt
│   │       │   │                           │           ├── InitHomeFirstInitializeHelp.kt
│   │       │   │                           │           └── LaunchInflateKey.kt
│   │       │   │                           └── ui/
│   │       │   │                               └── HomeActivity.kt
│   │       │   ├── wgllss-sample-ui-loading/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           ├── initializer/
│   │       │   │                           │   └── InitHomeFirstInitialize.kt
│   │       │   │                           ├── system/
│   │       │   │                           │   └── broadcast/
│   │       │   │                           │       ├── BroadCastAction.kt
│   │       │   │                           │       └── DownLoadCompleteBroadCast.kt
│   │       │   │                           └── ui/
│   │       │   │                               └── HomeActivity.kt
│   │       │   ├── wgllss-sample-ui-other/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── res/
│   │       │   │               └── layout/
│   │       │   │                   ├── adapter_collection_item.xml
│   │       │   │                   ├── adapter_sample_item.xml
│   │       │   │                   ├── fragment_collection.xml
│   │       │   │                   ├── fragment_sample.xml
│   │       │   │                   └── fragment_setting.xml
│   │       │   ├── wgllss-sample-ui-other-lib/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           ├── java/
│   │       │   │           │   └── com/
│   │       │   │           │       └── wgllss/
│   │       │   │           │           └── sample/
│   │       │   │           │               ├── datasource/
│   │       │   │           │               │   ├── SettingRepository.kt
│   │       │   │           │               │   └── SkinPluginBean.kt
│   │       │   │           │               └── features_ui/
│   │       │   │           │                   └── page/
│   │       │   │           │                       ├── base/
│   │       │   │           │                       │   ├── BasePluginActivity.kt
│   │       │   │           │                       │   ├── BasePluginFragment.kt
│   │       │   │           │                       │   └── SkinContains.kt
│   │       │   │           │                       └── home/
│   │       │   │           │                           ├── adapter/
│   │       │   │           │                           │   ├── CollectionAdapter.kt
│   │       │   │           │                           │   ├── SampleAdapter.kt
│   │       │   │           │                           │   └── SkinAdapter.kt
│   │       │   │           │                           ├── fragment/
│   │       │   │           │                           │   ├── CollectFragment.kt
│   │       │   │           │                           │   ├── SampleFragment.kt
│   │       │   │           │                           │   └── SettingFragment.kt
│   │       │   │           │                           └── viewmodels/
│   │       │   │           │                               ├── CollectViewModel.kt
│   │       │   │           │                               ├── SampleViewModel.kt
│   │       │   │           │                               └── SettingViewModel.kt
│   │       │   │           └── res/
│   │       │   │               └── layout/
│   │       │   │                   ├── activity_locker.xml
│   │       │   │                   ├── activity_play.xml
│   │       │   │                   ├── adapter_home_item_music.xml
│   │       │   │                   ├── adapter_item_music.xml
│   │       │   │                   ├── adapter_music_playlist_item.xml
│   │       │   │                   ├── fragment_history.xml
│   │       │   │                   ├── fragment_locker.xml
│   │       │   │                   ├── fragment_play.xml
│   │       │   │                   ├── fragment_search.xml
│   │       │   │                   ├── fragment_setting.xml
│   │       │   │                   └── music_cd_layout.xml
│   │       │   ├── wgllss-sample-ui-other2/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── res/
│   │       │   │               └── layout/
│   │       │   │                   ├── activity_locker.xml
│   │       │   │                   ├── activity_other2.xml
│   │       │   │                   ├── activity_other3.xml
│   │       │   │                   ├── activity_play.xml
│   │       │   │                   ├── activity_video.xml
│   │       │   │                   ├── activity_webview.xml
│   │       │   │                   ├── dialog_sample.xml
│   │       │   │                   ├── fragment_activity_sample.xml
│   │       │   │                   ├── fragment_broadcast_sample.xml
│   │       │   │                   ├── fragment_dialog_sample.xml
│   │       │   │                   ├── fragment_locker.xml
│   │       │   │                   ├── fragment_notification_sample.xml
│   │       │   │                   ├── fragment_play.xml
│   │       │   │                   ├── fragment_provider_sample.xml
│   │       │   │                   ├── fragment_service_sample.xml
│   │       │   │                   ├── fragment_so_sample.xml
│   │       │   │                   └── music_cd_layout.xml
│   │       │   └── wgllss-sample-ui-other2-lib2/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── proguard-rules.pro
│   │       │       └── src/
│   │       │           └── main/
│   │       │               ├── AndroidManifest.xml
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           ├── nativex/
│   │       │                           │   ├── MainActivity.kt
│   │       │                           │   └── NativeCallBack.kt
│   │       │                           ├── sample/
│   │       │                           │   └── features_ui/
│   │       │                           │       └── page/
│   │       │                           │           ├── base/
│   │       │                           │           │   ├── BasePluginActivity.kt
│   │       │                           │           │   ├── BasePluginComposeActivity.kt
│   │       │                           │           │   ├── BasePluginFragment.kt
│   │       │                           │           │   └── SkinContains.kt
│   │       │                           │           └── other2/
│   │       │                           │               ├── activity/
│   │       │                           │               │   ├── AudioActivity.kt
│   │       │                           │               │   ├── ComposeDemoActivity.kt
│   │       │                           │               │   ├── Other2Activity.kt
│   │       │                           │               │   ├── Other3Activity.kt
│   │       │                           │               │   ├── VideoActivity.kt
│   │       │                           │               │   └── WebViewActivity.kt
│   │       │                           │               ├── broadcast/
│   │       │                           │               │   └── TestBroadCast.kt
│   │       │                           │               ├── dialog/
│   │       │                           │               │   └── MyDialog.kt
│   │       │                           │               ├── fragment/
│   │       │                           │               │   ├── SampleActivityFragment.kt
│   │       │                           │               │   ├── SampleBroadCastFragment.kt
│   │       │                           │               │   ├── SampleContentProviderFragment.kt
│   │       │                           │               │   ├── SampleDialogFragment.kt
│   │       │                           │               │   ├── SampleMusicFragment.kt
│   │       │                           │               │   ├── SampleNotificationFragment.kt
│   │       │                           │               │   ├── SampleServiceFragment.kt
│   │       │                           │               │   └── SampleSoFragment.kt
│   │       │                           │               ├── service/
│   │       │                           │               │   ├── MyProcessService.kt
│   │       │                           │               │   ├── MyService.kt
│   │       │                           │               │   ├── MyService2.kt
│   │       │                           │               │   └── MyService3.kt
│   │       │                           │               ├── viewmodel/
│   │       │                           │               │   ├── ComposeDemoViewModel.kt
│   │       │                           │               │   ├── Other2ViewModel.kt
│   │       │                           │               │   ├── PlayModel.kt
│   │       │                           │               │   ├── SampleActivityViewModel.kt
│   │       │                           │               │   └── WebViewModel.kt
│   │       │                           │               └── web/
│   │       │                           │                   └── ImplWebViewClient.kt
│   │       │                           └── theme/
│   │       │                               ├── Color.kt
│   │       │                               ├── Theme.kt
│   │       │                               └── Type.kt
│   │       └── Wgllss-Dynamic-Plugin_Skin/
│   │           ├── blue-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── brown-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── dark-blue-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── dark-green-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── dark-red-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── green-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── light-green-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── orange-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── pink-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           └── red-resource/
│   │               ├── .gitignore
│   │               ├── build.gradle
│   │               ├── proguard-rules.pro
│   │               └── src/
│   │                   └── main/
│   │                       ├── AndroidManifest.xml
│   │                       └── res/
│   │                           ├── drawable/
│   │                           │   ├── bottom_navigation_color_selector.xml
│   │                           │   ├── circle_gray_border.xml
│   │                           │   ├── ic_baseline_arrow_back_24.xml
│   │                           │   ├── ic_baseline_grade_24.xml
│   │                           │   ├── ic_baseline_pause_36.xml
│   │                           │   ├── ic_baseline_play_arrow_36.xml
│   │                           │   ├── ic_baseline_search_24.xml
│   │                           │   ├── ic_baseline_skip_next_36.xml
│   │                           │   ├── ic_baseline_skip_previous_36.xml
│   │                           │   ├── ic_dashboard_black_24dp.xml
│   │                           │   ├── ic_home_black_24dp.xml
│   │                           │   ├── ic_notifications_black_24dp.xml
│   │                           │   ├── ic_round_queue_music_24.xml
│   │                           │   ├── play_btn_play_pause_selector.xml
│   │                           │   ├── play_load_drawable.xml
│   │                           │   ├── play_mode_level_list.xml
│   │                           │   ├── seek_bar_progress_style.xml
│   │                           │   ├── seekbar_circle_red_border.xml
│   │                           │   ├── seekbar_thumb.xml
│   │                           │   ├── switch_thumb_selector.xml
│   │                           │   └── switch_track_selector.xml
│   │                           ├── values/
│   │                           │   ├── colors.xml
│   │                           │   ├── dimens.xml
│   │                           │   ├── ids.xml
│   │                           │   ├── strings.xml
│   │                           │   └── themes.xml
│   │                           ├── values-night/
│   │                           │   ├── colors.xml
│   │                           │   └── themes.xml
│   │                           ├── values-v27/
│   │                           │   └── themes.xml
│   │                           └── values-v29/
│   │                               └── themes.xml
│   ├── WX-Dynamic-Host-SDK-Lib/
│   │   ├── Wgllss-Dynamic-Host-Lib/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── wgllss/
│   │   │       │               └── dynamic/
│   │   │       │                   └── host/
│   │   │       │                       └── wxdynamicpluginsdk/
│   │   │       │                           └── ExampleInstrumentedTest.kt
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── wgllss/
│   │   │       │               └── dynamic/
│   │   │       │                   └── host/
│   │   │       │                       └── lib/
│   │   │       │                           ├── classloader/
│   │   │       │                           │   ├── PluginKey.java
│   │   │       │                           │   └── WXClassLoader.java
│   │   │       │                           ├── download/
│   │   │       │                           │   ├── DownLoadResult.kt
│   │   │       │                           │   ├── DynamicDownloadPlugin.kt
│   │   │       │                           │   └── IDynamicDownLoadFace.kt
│   │   │       │                           ├── home/
│   │   │       │                           │   └── ILoadHome.kt
│   │   │       │                           ├── impl/
│   │   │       │                           │   ├── WXDynamicLoader.kt
│   │   │       │                           │   └── WXLoaderManagerImpl.kt
│   │   │       │                           ├── loader/
│   │   │       │                           │   └── ILoaderManager.kt
│   │   │       │                           ├── loader_base/
│   │   │       │                           │   ├── BaseLoaderManagerImpl.kt
│   │   │       │                           │   └── DynamicManageUtils.kt
│   │   │       │                           ├── provider/
│   │   │       │                           │   ├── ProviderAuthority.kt
│   │   │       │                           │   ├── WXHostContentProviderDelegate.kt
│   │   │       │                           │   ├── WXPluginContentProvider.kt
│   │   │       │                           │   └── WXProviderManager.kt
│   │   │       │                           └── runtime/
│   │   │       │                               ├── ContainerClassLoader.kt
│   │   │       │                               └── MultiDynamicRuntime.kt
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── wgllss/
│   │   │                       └── dynamic/
│   │   │                           └── host/
│   │   │                               └── wxdynamicpluginsdk/
│   │   │                                   └── ExampleUnitTest.kt
│   │   └── Wgllss-Dynamic-Host-Version-Lib/
│   │       ├── .gitignore
│   │       ├── build.gradle
│   │       ├── consumer-rules.pro
│   │       ├── proguard-rules.pro
│   │       └── src/
│   │           └── main/
│   │               └── java/
│   │                   └── com/
│   │                       └── wgllss/
│   │                           └── dynamic/
│   │                               └── host/
│   │                                   └── lib/
│   │                                       ├── constant/
│   │                                       │   └── DynamicPluginConstant.kt
│   │                                       └── version/
│   │                                           └── ILoaderVersion.kt
│   └── WX-Maven/
│       ├── WX-Host/
│       │   ├── sample/
│       │   │   ├── .gitignore
│       │   │   ├── build.gradle
│       │   │   ├── proguard-rules.pro
│       │   │   ├── sign/
│       │   │   │   └── WXSample.jks
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── AndroidManifest.xml
│       │   │           ├── assets/
│       │   │           │   └── loading_1000
│       │   │           ├── java/
│       │   │           │   └── com/
│       │   │           │       └── wgllss/
│       │   │           │           └── dynamic/
│       │   │           │               └── host/
│       │   │           │                   ├── FaceImpl.kt
│       │   │           │                   ├── SampleApplication.kt
│       │   │           │                   └── VersionImpl.kt
│       │   │           └── res/
│       │   │               ├── drawable/
│       │   │               │   └── ic_launcher_background.xml
│       │   │               ├── drawable-v24/
│       │   │               │   └── ic_launcher_foreground.xml
│       │   │               ├── mipmap-anydpi-v26/
│       │   │               │   └── ic_launcher.xml
│       │   │               ├── values/
│       │   │               │   ├── colors.xml
│       │   │               │   ├── strings.xml
│       │   │               │   └── themes.xml
│       │   │               ├── values-night/
│       │   │               │   └── themes.xml
│       │   │               └── xml/
│       │   │                   ├── backup_rules.xml
│       │   │                   ├── data_extraction_rules.xml
│       │   │                   └── network_security_config.xml
│       │   └── sample-lib/
│       │       ├── maven-wgllss-business-re-library/
│       │       │   ├── .gitignore
│       │       │   ├── build.gradle
│       │       │   ├── proguard-rules.pro
│       │       │   └── src/
│       │       │       ├── main/
│       │       │       │   ├── AndroidManifest.xml
│       │       │       │   └── java/
│       │       │       │       └── com/
│       │       │       │           └── wgllss/
│       │       │       │               └── sample/
│       │       │       │                   └── feature_system/
│       │       │       │                       └── globle/
│       │       │       │                           └── Constants.kt
│       │       │       └── test/
│       │       │           └── java/
│       │       │               └── com/
│       │       │                   └── wgllss/
│       │       │                       └── sample/
│       │       │                           └── ExampleUnitTest.kt
│       │       ├── maven-wgllss-common-re-library/
│       │       │   ├── .gitignore
│       │       │   ├── build.gradle
│       │       │   ├── libs/
│       │       │   │   └── com_wang_avi_library-2.1.3.aar
│       │       │   ├── proguard-rules.pro
│       │       │   └── src/
│       │       │       └── main/
│       │       │           ├── AndroidManifest.xml
│       │       │           ├── java/
│       │       │           │   └── com/
│       │       │           │       └── wgllss/
│       │       │           │           └── core/
│       │       │           │               ├── dialog/
│       │       │           │               │   └── CommonLoadingView.kt
│       │       │           │               ├── ex/
│       │       │           │               │   ├── ContextEX.kt
│       │       │           │               │   ├── Flow.kt
│       │       │           │               │   └── NetWorkHelp.kt
│       │       │           │               ├── permissions/
│       │       │           │               │   ├── PermissionInterceptor.kt
│       │       │           │               │   └── PermissionNameConvert.kt
│       │       │           │               ├── units/
│       │       │           │               │   ├── AppGlobals.kt
│       │       │           │               │   ├── DeviceIdUtil.kt
│       │       │           │               │   └── LogTimer.kt
│       │       │           │               └── widget/
│       │       │           │                   └── CommonToast.kt
│       │       │           └── res/
│       │       │               ├── anim/
│       │       │               │   └── anim_alpha_121.xml
│       │       │               ├── drawable/
│       │       │               │   ├── button_bg_transparent_helf.xml
│       │       │               │   └── progressbar_shape.xml
│       │       │               ├── layout/
│       │       │               │   └── common_loading.xml
│       │       │               └── values/
│       │       │                   ├── colors.xml
│       │       │                   ├── strings.xml
│       │       │                   └── themes.xml
│       │       ├── maven-wgllss-dynamic-host-library/
│       │       │   ├── .gitignore
│       │       │   ├── build.gradle
│       │       │   ├── consumer-rules.pro
│       │       │   ├── proguard-rules.pro
│       │       │   └── src/
│       │       │       ├── androidTest/
│       │       │       │   └── java/
│       │       │       │       └── com/
│       │       │       │           └── wgllss/
│       │       │       │               └── host/
│       │       │       │                   └── library/
│       │       │       │                       └── ExampleInstrumentedTest.kt
│       │       │       ├── main/
│       │       │       │   └── AndroidManifest.xml
│       │       │       └── test/
│       │       │           └── java/
│       │       │               └── com/
│       │       │                   └── wgllss/
│       │       │                       └── host/
│       │       │                           └── library/
│       │       │                               └── ExampleUnitTest.kt
│       │       └── maven-wgllss-dynamic-host-skin-resource-lib/
│       │           ├── .gitignore
│       │           ├── build.gradle
│       │           ├── proguard-rules.pro
│       │           └── src/
│       │               └── main/
│       │                   ├── AndroidManifest.xml
│       │                   └── res/
│       │                       ├── drawable/
│       │                       │   ├── ic_baseline_pause_36.xml
│       │                       │   ├── ic_baseline_play_arrow_36.xml
│       │                       │   ├── ic_baseline_skip_next_36.xml
│       │                       │   ├── ic_baseline_skip_previous_36.xml
│       │                       │   ├── splash_preview.xml
│       │                       │   └── splash_preview_dark.xml
│       │                       ├── values/
│       │                       │   ├── colors.xml
│       │                       │   ├── dimens.xml
│       │                       │   ├── ids.xml
│       │                       │   ├── strings.xml
│       │                       │   └── themes.xml
│       │                       ├── values-night/
│       │                       │   ├── colors.xml
│       │                       │   └── themes.xml
│       │                       ├── values-v27/
│       │                       │   └── themes.xml
│       │                       └── values-v29/
│       │                           └── themes.xml
│       └── WX-Plugin/
│           ├── Maven-Wgllss-Dynamic-Plugin-Common-Library/
│           │   ├── .gitignore
│           │   ├── build.gradle
│           │   ├── proguard-rules.pro
│           │   └── src/
│           │       └── main/
│           │           ├── AndroidManifest.xml
│           │           └── java/
│           │               └── com/
│           │                   └── wgllss/
│           │                       └── core/
│           │                           ├── activity/
│           │                           │   ├── BaseActivity.kt
│           │                           │   ├── BaseMVVMActivity.kt
│           │                           │   ├── BaseViewModePluginActivity.kt
│           │                           │   ├── BaseViewModelActivity.kt
│           │                           │   ├── BaseViewModelClassActivity.kt
│           │                           │   ├── BaseViewPluginResActivity.kt
│           │                           │   ├── WActivityManager.kt
│           │                           │   └── compose/
│           │                           │       └── BaseComposeActivity.kt
│           │                           ├── adapter/
│           │                           │   ├── BasePagerAdapter.kt
│           │                           │   ├── BasePluginRecyclerAdapter.kt
│           │                           │   ├── BaseRecyclerAdapter.kt
│           │                           │   └── ViewPage2ChildFragmentAdapter.kt
│           │                           ├── data/
│           │                           │   └── DialogBean.kt
│           │                           ├── ex/
│           │                           │   ├── Context.kt
│           │                           │   ├── Fragment.kt
│           │                           │   ├── FragmentActivity.kt
│           │                           │   ├── ImageView.kt
│           │                           │   ├── SwipeRefreshLayout.kt
│           │                           │   └── ViewModel.kt
│           │                           ├── fragment/
│           │                           │   ├── BaseFragment.kt
│           │                           │   ├── BasePluginResFragment.kt
│           │                           │   ├── BaseViewModelClassFragment.kt
│           │                           │   ├── BaseViewModelFragment.kt
│           │                           │   └── BaseViewModelPluginFragment.kt
│           │                           ├── http/
│           │                           │   ├── HttpRequest.kt
│           │                           │   └── HttpUrlConnectionRequest.kt
│           │                           ├── material/
│           │                           │   └── ThemeUtils.kt
│           │                           ├── units/
│           │                           │   ├── DeviceIdUtilX.kt
│           │                           │   ├── ImageUtils.kt
│           │                           │   ├── ResourceUtils.kt
│           │                           │   ├── ScreenManager.kt
│           │                           │   ├── SdkIntUtils.kt
│           │                           │   ├── ServiceUtil.kt
│           │                           │   ├── StatusBarUtil.kt
│           │                           │   └── WLog.kt
│           │                           ├── viewmodel/
│           │                           │   └── BaseViewModel.kt
│           │                           └── widget/
│           │                               ├── ButtomNavigationViewEx.kt
│           │                               ├── DividerGridItemDecoration.kt
│           │                               ├── DrawerBack.kt
│           │                               ├── MusicVisualizerView.kt
│           │                               └── OnRecyclerViewItemClickListener.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-Generate/
│           │   ├── maven-wgllss-sample-create-all-app/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── version/
│           │   │                               └── json/
│           │   │                                   └── Test.kt
│           │   ├── maven-wgllss-sample-create-version-config-annotations/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   └── src/
│           │   │       └── main/
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── annotations/
│           │   │                           └── CreateVersionConfig.kt
│           │   ├── maven-wgllss-sample-create-version-config-app/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── version/
│           │   │                               └── json/
│           │   │                                   └── Test.kt
│           │   └── maven-wgllss-sample-create-version-config-compiler/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── libs/
│           │       │   ├── Wgllss-Dynamic-Host-Protobuf-lib.jar
│           │       │   └── classes.jar
│           │       └── src/
│           │           └── main/
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           └── compiler/
│           │                               └── AptCreateConfigProcessor.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-Manager/
│           │   ├── Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── plugin/
│           │   │                               └── download_face/
│           │   │                                   └── DownLoadFaceImpl.kt
│           │   ├── Maven-Wgllss-Dynamic-Plugin-Loader-Impl/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── plugin/
│           │   │                               └── loader/
│           │   │                                   └── LoaderManagerImpl.kt
│           │   └── Maven-Wgllss-Dynamic-Plugin-Manager/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           └── main/
│           │               ├── AndroidManifest.xml
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           └── dynamic/
│           │                               └── plugin/
│           │                                   └── manager/
│           │                                       ├── PluginManager.kt
│           │                                       └── PluginResource.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-SDK/
│           │   ├── Maven-Wgllss-Dynamic-Plugin-Library/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── consumer-rules.pro
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       ├── main/
│           │   │       │   ├── AndroidManifest.xml
│           │   │       │   └── java/
│           │   │       │       └── com/
│           │   │       │           └── wgllss/
│           │   │       │               └── dynamic/
│           │   │       │                   └── runtime/
│           │   │       │                       └── library/
│           │   │       │                           ├── WXDynamicAidlInterface.java
│           │   │       │                           ├── WXHostActivityDelegate.java
│           │   │       │                           └── WXHostServiceDelegate.java
│           │   │       └── test/
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── plugin/
│           │   │                           └── library/
│           │   │                               └── ExampleUnitTest.kt
│           │   └── Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── consumer-rules.pro
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           ├── main/
│           │           │   ├── AndroidManifest.xml
│           │           │   └── java/
│           │           │       └── com/
│           │           │           └── wgllss/
│           │           │               └── dynamic/
│           │           │                   └── plugin/
│           │           │                       └── runtime/
│           │           │                           ├── HostComposePluginActivity.java
│           │           │                           ├── HostPluginActivity.java
│           │           │                           ├── HostPluginService.java
│           │           │                           ├── PluginClassLoader.java
│           │           │                           ├── PluginProcessStartNotStickyService.java
│           │           │                           ├── PluginProcessStartRedeliverIntentService.java
│           │           │                           ├── PluginProcessStartStickyCompatibilityService.java
│           │           │                           ├── PluginProcessStartStickyService.java
│           │           │                           ├── PluginSingleInstanceActivity.java
│           │           │                           ├── PluginSingleInstanceComposeActivity.java
│           │           │                           ├── PluginSingleTaskActivity.java
│           │           │                           ├── PluginSingleTaskComposeActivity.java
│           │           │                           ├── PluginSingleTopActivity.java
│           │           │                           ├── PluginSingleTopComposeActivity.java
│           │           │                           ├── PluginStandardActivity.java
│           │           │                           ├── PluginStandardComposeActivity.java
│           │           │                           ├── PluginStartNotStickyService.java
│           │           │                           ├── PluginStartRedeliverIntentService.java
│           │           │                           ├── PluginStartStickyCompatibilityService.java
│           │           │                           └── PluginStartStickyService.java
│           │           └── test/
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           └── dynamic/
│           │                               └── runtime/
│           │                                   └── ExampleUnitTest.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-Sample/
│           │   ├── README.md
│           │   ├── maven-wgllss-sample-assets-source-apk/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── assets/
│           │   │               ├── css/
│           │   │               │   └── main.8f39d45c.css
│           │   │               └── js/
│           │   │                   ├── jquery.js
│           │   │                   └── jquery.lazyload.js
│           │   ├── maven-wgllss-sample-business-library/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── sample/
│           │   │                           ├── data/
│           │   │                           │   ├── ImgExtraData.kt
│           │   │                           │   ├── NewsBean.kt
│           │   │                           │   └── SampleItemBean.kt
│           │   │                           ├── datasource/
│           │   │                           │   ├── net/
│           │   │                           │   │   ├── HeaderInterceptor.kt
│           │   │                           │   │   ├── MyApi.kt
│           │   │                           │   │   └── RetrofitUtils.kt
│           │   │                           │   └── repository/
│           │   │                           │       └── NewsRepository.kt
│           │   │                           ├── feature_system/
│           │   │                           │   ├── music/
│           │   │                           │   │   ├── exoplayerimpl/
│           │   │                           │   │   │   ├── ExoPlayerUtils.kt
│           │   │                           │   │   │   └── MusicServiceConnection.kt
│           │   │                           │   │   ├── extensions/
│           │   │                           │   │   │   ├── MediaExtensions.kt
│           │   │                           │   │   │   ├── MediaMetadataCompatExt.kt
│           │   │                           │   │   │   └── PlaybackStateCompatExt.kt
│           │   │                           │   │   └── notification/
│           │   │                           │   │       ├── WXNotificationListener.kt
│           │   │                           │   │       └── WXPlayerNotificationManager.kt
│           │   │                           │   ├── room/
│           │   │                           │   │   ├── CollectDataBase.kt
│           │   │                           │   │   ├── dao/
│           │   │                           │   │   │   └── CollectDao.kt
│           │   │                           │   │   ├── help/
│           │   │                           │   │   │   ├── RoomDBHelper.kt
│           │   │                           │   │   │   └── RoomDBMigration.kt
│           │   │                           │   │   └── table/
│           │   │                           │   │       └── CollectTableBean.kt
│           │   │                           │   ├── savestatus/
│           │   │                           │   │   └── MMKVHelp.kt
│           │   │                           │   ├── services/
│           │   │                           │   │   └── MusicService.kt
│           │   │                           │   └── untils/
│           │   │                           │       └── UUIDHelp.kt
│           │   │                           └── features_ui/
│           │   │                               └── playing/
│           │   │                                   └── activity/
│           │   │                                       └── NotificationTargetActivity.kt
│           │   ├── maven-wgllss-sample-loader-version/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── loader/
│           │   │                           └── version/
│           │   │                               └── LoaderVersionImpl.kt
│           │   ├── maven-wgllss-sample-skin-resource-apk/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-wgllss-sample-ui-home/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           ├── impl/
│           │   │                           │   └── ILoadHomeImpl.kt
│           │   │                           ├── initializer/
│           │   │                           │   └── InitHomeFirstInitialize.kt
│           │   │                           ├── provider/
│           │   │                           │   └── TestContentProvider.kt
│           │   │                           ├── sample/
│           │   │                           │   ├── feature_home/
│           │   │                           │   │   ├── adapter/
│           │   │                           │   │   │   └── HomeNewsAdapter.kt
│           │   │                           │   │   ├── fragment/
│           │   │                           │   │   │   ├── HomeFragment.kt
│           │   │                           │   │   │   └── HomeTabFragment.kt
│           │   │                           │   │   ├── pkg/
│           │   │                           │   │   │   └── ResourceContains.kt
│           │   │                           │   │   └── viewmodels/
│           │   │                           │   │       ├── HomeTabViewModel.kt
│           │   │                           │   │       ├── HomeViewModel.kt
│           │   │                           │   │       └── SettingViewModel.kt
│           │   │                           │   └── feature_startup/
│           │   │                           │       └── startup/
│           │   │                           │           ├── GenerateHomeLayout.kt
│           │   │                           │           ├── HomeContains.kt
│           │   │                           │           ├── InitHomeFirstInitializeHelp.kt
│           │   │                           │           └── LaunchInflateKey.kt
│           │   │                           └── ui/
│           │   │                               └── HomeActivity.kt
│           │   ├── maven-wgllss-sample-ui-loading/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           ├── initializer/
│           │   │                           │   └── InitHomeFirstInitialize.kt
│           │   │                           ├── system/
│           │   │                           │   └── broadcast/
│           │   │                           │       ├── BroadCastAction.kt
│           │   │                           │       └── DownLoadCompleteBroadCast.kt
│           │   │                           └── ui/
│           │   │                               └── HomeActivity.kt
│           │   ├── maven-wgllss-sample-ui-other/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               └── layout/
│           │   │                   ├── adapter_collection_item.xml
│           │   │                   ├── adapter_sample_item.xml
│           │   │                   ├── fragment_collection.xml
│           │   │                   ├── fragment_sample.xml
│           │   │                   └── fragment_setting.xml
│           │   ├── maven-wgllss-sample-ui-other-lib/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           ├── java/
│           │   │           │   └── com/
│           │   │           │       └── wgllss/
│           │   │           │           └── sample/
│           │   │           │               ├── datasource/
│           │   │           │               │   ├── SettingRepository.kt
│           │   │           │               │   └── SkinPluginBean.kt
│           │   │           │               └── features_ui/
│           │   │           │                   └── page/
│           │   │           │                       ├── base/
│           │   │           │                       │   ├── BasePluginActivity.kt
│           │   │           │                       │   ├── BasePluginFragment.kt
│           │   │           │                       │   └── SkinContains.kt
│           │   │           │                       └── home/
│           │   │           │                           ├── adapter/
│           │   │           │                           │   ├── CollectionAdapter.kt
│           │   │           │                           │   ├── SampleAdapter.kt
│           │   │           │                           │   └── SkinAdapter.kt
│           │   │           │                           ├── fragment/
│           │   │           │                           │   ├── CollectFragment.kt
│           │   │           │                           │   ├── SampleFragment.kt
│           │   │           │                           │   └── SettingFragment.kt
│           │   │           │                           └── viewmodels/
│           │   │           │                               ├── CollectViewModel.kt
│           │   │           │                               ├── SampleViewModel.kt
│           │   │           │                               └── SettingViewModel.kt
│           │   │           └── res/
│           │   │               └── layout/
│           │   │                   ├── activity_locker.xml
│           │   │                   ├── activity_play.xml
│           │   │                   ├── adapter_home_item_music.xml
│           │   │                   ├── adapter_item_music.xml
│           │   │                   ├── adapter_music_playlist_item.xml
│           │   │                   ├── fragment_history.xml
│           │   │                   ├── fragment_locker.xml
│           │   │                   ├── fragment_play.xml
│           │   │                   ├── fragment_search.xml
│           │   │                   ├── fragment_setting.xml
│           │   │                   └── music_cd_layout.xml
│           │   ├── maven-wgllss-sample-ui-other2/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               └── layout/
│           │   │                   ├── activity_locker.xml
│           │   │                   ├── activity_other2.xml
│           │   │                   ├── activity_other3.xml
│           │   │                   ├── activity_play.xml
│           │   │                   ├── activity_video.xml
│           │   │                   ├── activity_webview.xml
│           │   │                   ├── dialog_sample.xml
│           │   │                   ├── fragment_activity_sample.xml
│           │   │                   ├── fragment_broadcast_sample.xml
│           │   │                   ├── fragment_dialog_sample.xml
│           │   │                   ├── fragment_locker.xml
│           │   │                   ├── fragment_notification_sample.xml
│           │   │                   ├── fragment_play.xml
│           │   │                   ├── fragment_provider_sample.xml
│           │   │                   ├── fragment_service_sample.xml
│           │   │                   ├── fragment_so_sample.xml
│           │   │                   └── music_cd_layout.xml
│           │   └── maven-wgllss-sample-ui-other2-lib2/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           └── main/
│           │               ├── AndroidManifest.xml
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           ├── nativex/
│           │                           │   ├── MainActivity.kt
│           │                           │   └── NativeCallBack.kt
│           │                           ├── sample/
│           │                           │   └── features_ui/
│           │                           │       └── page/
│           │                           │           ├── base/
│           │                           │           │   ├── BasePluginActivity.kt
│           │                           │           │   ├── BasePluginComposeActivity.kt
│           │                           │           │   ├── BasePluginFragment.kt
│           │                           │           │   └── SkinContains.kt
│           │                           │           └── other2/
│           │                           │               ├── activity/
│           │                           │               │   ├── AudioActivity.kt
│           │                           │               │   ├── ComposeDemoActivity.kt
│           │                           │               │   ├── Other2Activity.kt
│           │                           │               │   ├── Other3Activity.kt
│           │                           │               │   ├── VideoActivity.kt
│           │                           │               │   └── WebViewActivity.kt
│           │                           │               ├── broadcast/
│           │                           │               │   └── TestBroadCast.kt
│           │                           │               ├── dialog/
│           │                           │               │   └── MyDialog.kt
│           │                           │               ├── fragment/
│           │                           │               │   ├── SampleActivityFragment.kt
│           │                           │               │   ├── SampleBroadCastFragment.kt
│           │                           │               │   ├── SampleContentProviderFragment.kt
│           │                           │               │   ├── SampleDialogFragment.kt
│           │                           │               │   ├── SampleMusicFragment.kt
│           │                           │               │   ├── SampleNotificationFragment.kt
│           │                           │               │   ├── SampleServiceFragment.kt
│           │                           │               │   └── SampleSoFragment.kt
│           │                           │               ├── service/
│           │                           │               │   ├── MyProcessService.kt
│           │                           │               │   ├── MyService.kt
│           │                           │               │   ├── MyService2.kt
│           │                           │               │   └── MyService3.kt
│           │                           │               ├── viewmodel/
│           │                           │               │   ├── ComposeDemoViewModel.kt
│           │                           │               │   ├── Other2ViewModel.kt
│           │                           │               │   ├── PlayModel.kt
│           │                           │               │   ├── SampleActivityViewModel.kt
│           │                           │               │   └── WebViewModel.kt
│           │                           │               └── web/
│           │                           │                   └── ImplWebViewClient.kt
│           │                           └── theme/
│           │                               ├── Color.kt
│           │                               ├── Theme.kt
│           │                               └── Type.kt
│           ├── Maven-Wgllss-Dynamic-Plugin_Skin/
│           │   ├── maven-blue-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-brown-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-dark-blue-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-dark-green-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-dark-red-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-green-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-light-green-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-orange-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-pink-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   └── maven-red-resource/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           └── main/
│           │               ├── AndroidManifest.xml
│           │               └── res/
│           │                   ├── drawable/
│           │                   │   ├── bottom_navigation_color_selector.xml
│           │                   │   ├── circle_gray_border.xml
│           │                   │   ├── ic_baseline_arrow_back_24.xml
│           │                   │   ├── ic_baseline_grade_24.xml
│           │                   │   ├── ic_baseline_pause_36.xml
│           │                   │   ├── ic_baseline_play_arrow_36.xml
│           │                   │   ├── ic_baseline_search_24.xml
│           │                   │   ├── ic_baseline_skip_next_36.xml
│           │                   │   ├── ic_baseline_skip_previous_36.xml
│           │                   │   ├── ic_dashboard_black_24dp.xml
│           │                   │   ├── ic_home_black_24dp.xml
│           │                   │   ├── ic_notifications_black_24dp.xml
│           │                   │   ├── ic_round_queue_music_24.xml
│           │                   │   ├── play_btn_play_pause_selector.xml
│           │                   │   ├── play_load_drawable.xml
│           │                   │   ├── play_mode_level_list.xml
│           │                   │   ├── seek_bar_progress_style.xml
│           │                   │   ├── seekbar_circle_red_border.xml
│           │                   │   ├── seekbar_thumb.xml
│           │                   │   ├── switch_thumb_selector.xml
│           │                   │   └── switch_track_selector.xml
│           │                   ├── values/
│           │                   │   ├── colors.xml
│           │                   │   ├── dimens.xml
│           │                   │   ├── ids.xml
│           │                   │   ├── strings.xml
│           │                   │   └── themes.xml
│           │                   ├── values-night/
│           │                   │   ├── colors.xml
│           │                   │   └── themes.xml
│           │                   ├── values-v27/
│           │                   │   └── themes.xml
│           │                   └── values-v29/
│           │                       └── themes.xml
│           └── README.md
├── WX-Resource/
│   ├── B05F9543937A5BA61901FC14F2540C62DA3E86C2/
│   │   └── 10000/
│   │       ├── classes_business_lib_dex
│   │       ├── classes_business_web_res
│   │       ├── classes_common_lib_dex
│   │       ├── classes_common_skin_res
│   │       ├── classes_home_dex
│   │       ├── classes_loading_dex
│   │       ├── classes_manager_dex
│   │       ├── classes_other2_dex
│   │       ├── classes_other2_res
│   │       ├── classes_other_dex
│   │       ├── classes_other_res
│   │       ├── classes_version_dex
│   │       ├── classes_wgllss_dynamic_plugin_runtime
│   │       └── vc
│   ├── dxde_m_p/
│   │   └── 10000/
│   │       ├── classes_business_lib_dex
│   │       ├── classes_business_web_res
│   │       ├── classes_common_lib_dex
│   │       ├── classes_common_skin_res
│   │       ├── classes_home_dex
│   │       ├── classes_loading_dex
│   │       ├── classes_manager_dex
│   │       ├── classes_other2_dex
│   │       ├── classes_other2_res
│   │       ├── classes_other_dex
│   │       ├── classes_other_res
│   │       ├── classes_version_dex
│   │       ├── classes_wgllss_dynamic_plugin_runtime
│   │       └── vc
│   └── skins/
│       ├── blue.apk
│       ├── brown.apk
│       ├── dark_blue.apk
│       ├── dark_red.apk
│       ├── light_green.apk
│       ├── orange.apk
│       ├── pink.apk
│       ├── red_green.apk
│       ├── skin_dark_green.apk
│       ├── skin_green.apk
│       └── skins.txt
├── build.gradle
├── gradle/
│   ├── libs.versions.toml
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, wgllss 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 [yyyy] [name of copyright owner]

   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.


================================================
FILE: README.md
================================================
# WXDynamicPlugin

## 介绍

#### 最新接入研究配置参考文章介绍  [Compose的全动态插件化框架支持了,已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.cn/post/7435587382345482303)

#### 插件化模块按需下载首页之外模块  [按需下载!!全动态插件化框架WXDynamicPlugin解析怎么支持的](https://juejin.cn/post/7497428040484241462)

#### **WXDynamicPlugin是由本人自住研发的Android插件框架**

### 零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构

## 示例Sample (注意,请不要抓包,设置代理等!!!请不要抓包,设置代理等!!!)

![扫码下载](https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Qrcode.png)

## 示例Sample截图

|                                                                                                                                                 |                                                                                                                                                      |                                                                                                                                                 |
|-------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_home.png" width="220" height="448"/>    | <img src="https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/Screenshot_sc.png" width="220" height="448"/>                    | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_sample.jpg" width="220" height="448"/>  |
| <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_setting.png" width="220" height="448"/> | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_vedio.png" width="220" height="448"/>        | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_audio.png" width="220" height="448"/>   |
| <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_a2.png" width="220" height="448"/>      | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_notification.png" width="220" height="448"/> | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_webview.png" width="220" height="448"/> |
| <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_cp.png" width="220" height="448"/>      | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_service.png" width="220" height="448"/>      | <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_so.png" width="220" height="448"/>      |

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_home.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_sc.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_sample.jpg" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_setting.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_vedio.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_audio.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_a2.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_notification.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_webview.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_cp.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_service.png" width="220" height="448"/>)

[//]: # (<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_so.png" width="220" height="448"/>)

## 与市面上其他插件框架相比,WXDynamicPlugin主要具有以下优势和特点

### 优势:

#### 1.支持宿主就一个空壳子,并且启动速度不受任何影响,做到真正原生不用发版

#### 2.插件打包支持“分布式”,多模块单独插件,单独下载,单独加载,单独访问

#### 3.支持接入到宿主的那仅有的一小部分代码 都可以动态更新(插件下载逻辑,版本管理,下载服务器地址,环境全动态化)

#### 4.支持Debug调试插件,不存在插件调试难度

### 特点:

* **零反射无Hack实现插件技术**:从理论上就已经确定无需对任何系统做兼容开发,更无任何隐藏API调用,和Google限制非公开SDK接口访问的策略完全不冲突。
* **全动态插件框架**:一次性实现完美的插件框架很难,但WXDynamicPlugin将这些全部动态化来实现,使插件化框架代码也成为了插件,同时,宿主下载插件的逻辑,版本控制也可以插件化起来,使得插件的迭代,及插件化框架的修改,以及可能涉及到宿主下载插件逻辑,版本控制逻辑,加载插件逻辑,这些全部动态化起来。目前市面上插件化框架,都没有实现插件下载到本地逻辑的动态化起来
* **插件极限瘦身优化**:编译出插件体积最小,所有插件模块总体积加载起来不到500k,单个模块70k左右,同时可以让各个功能模块单独插件化起来,市面上插件化框架插件体积编译出来基本都3M以上
* **宿主增量极小**:接入宿主的代码全Kotlin实现,真正插件化框架实现宿主接入代码仅4K多,加上下载逻辑,插件版本控制加载接入宿主代码仅60k左右,加上下载版本判断逻辑总共方法数仅80个方法数
* **极限启动优化性能**:做到宿主空壳子,第一次启动就下载到本地到加载,到显示到第一个页面,所需要的总耗时最小,基本是秒开,这得益于插件模块编译出来体积最小化,4G网络基本500ms就下载完了,如果插件编译出来基本3M以上,那么从服务端下载到本地至少10s以上,第一次再加载一个3M的插件又去了2~
  3s,第一次进入到主UI界面,差不多20s去了。而WXDynamicPlugin真正做到接入插件化后都比各大厂主流顶级App,没有通过宿主接插件化启动时间还快

## 支持特性

* 四大组件 Activity ,Service , ContentProvider ,Broadcaster
* 跨进程使用插件Service
* fragment
* assets
* 插件访问宿主类
* 插件之间可以互不依赖,也可以存在有依赖关系
* 通知栏
* So加载
* 分段加载插件(多Apk分别加载或多Apk以此依赖加载)
* 一个app 分多个模块单独加载
* 一个Activity中加载多个Apk中的View
* 支持插件调试debug
* 支持Compose
* 等等……

## 插件化框架对比

| 插件化框架         | Shadow      | WXDynamicPlugin |
|---------------|-------------|-----------------|
| 插件打包体积        | 3M以上        | 500k左右 ✅        |
| 极致化下载管理版本控制   | 需自己实现       | 1步到位 ✅          |
| 插件加载逻辑        | 宿主->管理器->插件 | 宿主->插件 ✅        |
| 首次插件下载到展示首页耗时 | 3~5s以上?     | 1s内 ✅           |
| 插件已经到本地后加载速度  | 1500ms以上?   | 500ms内 ✅        |
| 全动态化          | 部分支持        | 支持 ✅            |
| 插件化框架动态化      | 支持          | 支持 ✅            |
| 下载逻辑代码动态化     | 不支持         | 支持 ✅            |
| 版本控制代码动态化     | 不支持         | 支持 ✅            |
| 插件调试debug     | 不支持         | 支持 ✅            |
| Compose       | 不支持         | 支持 ✅            |

## 示例运行:

* **方式1:扫码安装即可**
* **方式2:拉取代码,查看空壳子宿主工程,运行sample**
* **以上两种运行实例方式宿主都是空壳子,所有插件存放在我配置的服务器地址**
* **想把插件换成自己服务器上面,自己打包插件,想看插件具体写法,请放开 settings.gradle 中第150行 到 212行的注释 (为了拉取下来只运行宿主空壳子注释掉了),并按照下面文档进行相关配置**

#### 最新接入研究配置参考文章介绍  [Compose的全动态插件化框架支持了,已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.cn/post/7435587382345482303)

#### 插件化模块按需下载首页之外模块  [按需下载!!全动态插件化框架WXDynamicPlugin解析怎么支持的](https://juejin.cn/post/7497428040484241462)

## 编译与开发环境

#### 环境准备

* **AS设置JDK 选17,电脑java版本需要安装 1.8.xxx(这是电脑安装的JDK,电脑!!!,不是AS), 打开工程下 local.properties**
##### 以下为我本地电脑配置,需要添加一行下面一句,并改成自己电脑配置:
```
workingDirPath=D\:\\android_software\\android_sdk\\android_sdk\\build-tools\\32.0.0\\
```

* **如果电脑安装了几个版本的JDK,再次安装的JDK1.8.xxx后,因为有多个JDK共存,可拉取master-d8分支,单独配置JDK环境变量如下:**
##### 以下为我本地电脑配置,需要添加一行下面一句,并改成自己电脑配置:
```
jdkDirPath=C\:\\Program Files\\Java\\jdk1.8.0_181\\
```
* **最新版本AS(Android Studio Ladybug 2024.2.1 Patch 3)以上提示JDK需要 17时:需要修改如下2个工程:**
* **maven-wgllss-sample-create-version-config-compiler 和 maven-wgllss-sample-create-version-config-annotations工程都需要java版本需要改成如下17**

```
java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}
```

* **最新版本AS(Android Studio Meerkat Feature Drop | 2024.3.2)以上提示JDK需要 21时:需要修改上面配置2个工程改成21:**



##### 然后在IDE中选择 app 或 sample 模块直接运行,如下:

  <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/run_app.jpeg" width="181" height="56"/>
  <img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/run_sample.jpeg" width="578" height="38"/>

## 项目工程目录截图

<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/project_img.png" width="331" height="631"/>

## 项目工程目录介绍

| 文件夹                     | 介绍                  | 接入方式               | 
|-------------------------|---------------------|--------------------|
| WX-Code                 | 示例工程全源码级接入方式        | 接入方式一:依赖host模块工程   |   
| WX-Dynamic-Host-SDK-Lib | 宿主工程所依赖的lib工程源码     |                    |       
| WX-Maven                | 示例工程maven依赖仓库方式接入工程 | 接入方式二:maven引入host包 |    

* **特别说明**:WX-Code 和 WX-Maven 下实际代码内容一样,目录结构一样,唯一区别接入全动态host代码方式不一样,另外WX-Maven 下所有文件夹和项目工程名多了 maven前缀,用于在同一工程下区分成 2个不同的项目

#### 推荐用方式二: Maven接入方式

#### 为了方便编译查看,已经注释掉 settings.gradle 中第35行到119行,需要看源码及源码方式接入(WX-Code下面),请自行放开注释

#### 以 WX-Maven下目录结构介绍为例:

#### WX-Host:   下面全部为host宿主项目代码

&emsp;&emsp;sample:  host宿主真实工程app

##### &emsp;&emsp;sample-lib:  下面为宿主工程依赖的4个工程模块

&emsp;&emsp;&emsp;&emsp;maven-wgllss-business-re-library:涉及到app的公共业务带res资源的模块lib       
&emsp;&emsp;&emsp;&emsp;maven-wgllss-common-re-library:涉及到公共代码带res资源的模块lib        
&emsp;&emsp;&emsp;&emsp;maven-wgllss-dynamic-host-library:宿主里manifest注册所必备的四大组件等lib          
&emsp;&emsp;&emsp;&emsp;maven-wgllss-dynamic-host-skin-resource-lib:宿主所必须的资源样式主题等lib

#### WX-Plugin:  该文件夹下面的所有工程都是插件的形式,不存在宿主里面

&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Common-Library:  插件中公共代码    
&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Generate:  插件中打包所用的apt工程   
&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Manager:  插件中管理插件,管理动态代码的3个工程   
&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Sample:  插件中真正业务代码插件工程   
&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-SDK:  插件框架四大组件SDK代码,以插件形式存在  
&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin_Skin:  插件中换皮肤资源

### WX-Resource: 为项目已经打包好的插件,so,皮肤包文件等 存放的文件夹

#### 上面介绍 直接 run运行 ,打开app 进入宿主,直接下载的插件 为我已经放在准好的服务器上面了

#### maven接入方式 请不要设置代理抓包!!!

&emsp;&emsp;可以通过源码工程自行打包,上传到自己的服务器上部署,方法如下:  
&emsp;&emsp;找到 WX/WX-Maven/WX-Host/sample/ com.wgllss.dynamic.host.FaceImpl

```
  //    override fun getHostL() = "http://192.168.3.21:8080/assets/WXDynamicPlugin/"
//    override fun getHostL() = "http://192.168.1.9:8080/assets/WXDynamicPlugin/"
    //todo 自己本地搭一个服务器,或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,
    // 切记不要往往我的 gitee 项目上面推
    override fun getHostL() = "https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/"

    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:
     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,
     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了,插件配置在新宿主版本文件夹下面,原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主
     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面
     */
    override fun getBaseL(): String {
        if (TextUtils.isEmpty(baseXL)) {
            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append("/").append(BuildConfig.VERSION_CODE).append("/").toString()
        }
        return baseXL
    }
```

&emsp;&emsp;修改 getHostL() 地址为自己服务器地址, 修改 getBaseL() 中主要路劲,确保修改后地址可以访问通  
&emsp;&emsp;然后将打包好的14个文件 放入getHostL()+getBaseL() 服务器文件夹下面  
&emsp;&emsp;该 14个文件打包如下:  
<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/createfile.jpeg" width="628" height="277"/>

&emsp;&emsp;点击 assembleCreateAllFileRelease 等待 14个文件生成 ,一次不行,再次点击执行命令,如果还不生成,点击当前项目下maven-wgllss-sample-create-version-config-app的另一个assembleCreateVersion2FileRelease,生成2个文件之后再执行assembleCreateAllFileRelease  
&emsp;&emsp;14个文件生成在以下目录:可以拷贝到自己的服务器上面供下载:即上面修改的 getHostL()+getBaseL() 服务器文件夹下面 ,同时把我准备的WX-Resource/so 文件夹和 WX-Resource/skins 文件夹拷贝过去,这是供sample 工程演示所用的,另外皮肤资源包多个apk文件也可以自行通过源码工程打包  
<img src="https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/14file.jpg" width="610" height="260"/>

## 全动态插件化框架WXDynamicPlugin介绍文章:

#### [(一) 插件化框架开发背景:零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7347994218235363382)

#### [(二)插件化框架主要介绍:零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7367676494976532490)

#### [(三)插件化框架内部详细介绍: 零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7368397264026370083)

#### [(四)插件化框架接入详细指南:零反射,零HooK,全动态化,插件化框架,全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7372393698230550565)

#### [(五) 大型项目架构:全动态插件化+模块化+Kotlin+协程+Flow+Retrofit+JetPack+MVVM+极限瘦身+极限启动优化+架构示例+全网唯一](https://juejin.cn/post/7381787510071934985)

#### [(六) 大型项目架构:解析全动态插件化框架WXDynamicPlugin是如何做到全动态化的?](https://juejin.cn/post/7388891131037777929)

#### [(七) 还在不断升级发版吗?从0到1带你看懂WXDynamicPlugin全动态插件化框架?](https://juejin.cn/post/7412124636239904819)

#### [(八) Compose插件化:一个Demo带你入门Compose,同时带你入门插件化开发](https://juejin.cn/post/7425434773026537483)

#### [(九) 花式高阶:插件化之Dex文件的高阶用法,极少人知道的秘密 ](https://juejin.cn/spost/7428216743166771212)

#### [(十) 5种常见Android的SDK开发的方式,你知道几种? ](https://juejin.cn/post/7431088937278947391)

#### [(十一) 5种WebView混合开发动态更新方式,直击痛点,有你想要的? ](https://juejin.cn/post/7433288965942165558)

#### [(十二) Compose的全动态插件化框架支持了,已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.cn/post/7435587382345482303)

#### [(十三)按需下载!!全动态插件化框架WXDynamicPlugin解析怎么支持的](https://juejin.cn/post/7497428040484241462)

## 作者开源 Compose可视化图表库

#### [(一)Compose曲线图表库WXChart,你只需要提供数据配置就行了](https://juejin.cn/post/7438835112790605865 "https://juejin.cn/post/7438835112790605865")\

#### [(二)Compose折线图,贝赛尔曲线图,柱状图,圆饼图,圆环图。带动画和点击效果](https://juejin.cn/post/7442228138501259283 "https://juejin.cn/post/7442228138501259283")\

#### [(三)全网最火视频,Compose代码写出来,动态可视化趋势视频,帅到爆](https://juejin.cn/post/7449238845214244875 "https://juejin.cn/post/7449238845214244875")\

#### [(四)全网最火可视化趋势视频实现深度解析,同时新增条形图表](https://juejin.cn/post/7449910229573943350)

#### [(五)庆元旦,出排名,手撸全网火爆的排名视频,排名动态可视化](https://juejin.cn/post/7454386729702375465)

#### [(六)Android六边形战士能力图绘制,Compose实现](https://juejin.cn/post/7457449985530757161)

#### [(七)ndroid之中美PK,赛事PK对比图Compose实现](https://juejin.cn/post/7462544107527389247)

#### [(八)Android之等级金字塔之Compose智能实现](https://juejin.cn/post/7468865451134091275)

#### [(九)地图之Compose轻松绘制,可视化带点击事件,可扩展二次开发](https://juejin.cn/post/7485936146070356006)

## 本人其他开源文章:

#### [那些大厂架构师是怎样封装网络请求的?](https://juejin.cn/post/7435904232597372940)

#### [Kotlin+协程+Flow+Retrofit+OkHttp这么好用,不运行安装到手机可以调试接口吗?可以自己搭建一套网络请求工具](https://juejin.cn/post/7406675078810910761)

#### [花式封装:Kotlin+协程+Flow+Retrofit+OkHttp +Repository,倾囊相授,彻底减少模版代码进阶之路](https://juejin.cn/post/7417847546323042345)

#### [注解处理器在架构,框架中实战应用:MVVM中数据源提供Repository类的自动生成](https://juejin.cn/post/7392258195089162290)

#### [Android串口,USB,打印机,扫码枪,支付盒子,键盘,鼠标,U盘等开发使用一网打尽](https://juejin.cn/post/7439231301869305910)

#### [多台Android设备局域网下的数据备份如何实现?](https://juejin.cn/post/7444378661934055464)

#### [轻松搞定Android蓝牙打印机,双屏异显及副屏分辨率适配解决办法](https://juejin.cn/post/7446820939943428107)

#### [一个Kotlin版Demo带你入门JNI,NDK编程](https://juejin.cn/post/7452181029996380171)

#### [元宵节前福利,神之操作,一键下载想要的同类型多个图片??](https://juejin.cn/post/7469991575277207602)

#### [如何拦截其他Android应用程序播放器的原始音频数据自定义保存下来?](https://juejin.cn/post/7459720128983351337)

#### [Android拦截其它播放声音:内录音,外录音,录屏,剪辑,混音,一键制作大片全搞定](https://juejin.cn/post/7472223022192836659)

#### [Android之Apk全面瘦身,极致瘦身优化](https://juejin.cn/post/7483439484052258853)

#### [电影电视剧网红广告屏自动轮播介绍视频特效制作,Compose轻松实现](https://juejin.cn/post/7491241868861554726)

#### [Android下载进度百分比按钮,Compose轻松秒杀实现](https://juejin.cn/post/7493449430789095476)

#### [Android监听开机自启,是否在前后台,锁屏界面,息屏后自动亮屏,一直保持亮屏](https://juejin.cn/post/7494083990069444648)

#### [Android图片处理:多合一,多张生成视频,裁剪,滤镜色调,饱和度,亮度,缩放调整](https://juejin.cn/post/7496344493705510927)

#### [Android投屏,设备远程协助,被远程服务浏览器上面操控屏幕如何实现?](https://juejin.cn/post/7500981295104000039)

#### 感谢阅读,欢迎给给个星,你们的支持是我开源的动力

## 欢迎光临:

#### **[我的掘金地址](https://juejin.cn/user/356661835082573)**

#### 关于我

**VX号:wgllss**  ,如果想更多交流请加我VX








================================================
FILE: WX/WX-Code/WX-Host/app/.gitignore
================================================
/build

================================================
FILE: WX/WX-Code/WX-Host/app/build.gradle
================================================
plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
}

android {
    namespace 'com.wgllss.dynamic.host'
    compileSdk libs.versions.compileSdk.get().toInteger()

    defaultConfig {
        applicationId "com.wgllss.dynamic.host.sample"
        minSdkVersion libs.versions.minSdk.get().toInteger()
        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()
        versionCode 10000
        versionName "1.0000"
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
    }

    signingConfigs {
        def password = "WXSample"
        def alias = "WXSample"
        def filePath = "./sign/WXSample.jks"

        debug {
            keyAlias alias
            keyPassword password
            storeFile file(filePath)
            storePassword(password)
            v1SigningEnabled true
            v2SigningEnabled true
        }
        release {
            keyAlias alias
            keyPassword password
            storeFile file(filePath)
            storePassword(password)
            v1SigningEnabled true
            v2SigningEnabled true
        }
    }

    buildTypes {
        debug {
            // 假如打包后运行闪退,可以在调试模式下打开混淆查看日志找出混淆问题
            debuggable false
            minifyEnabled true // 开启混淆
            shrinkResources false // 启动资源压缩
            zipAlignEnabled true // 开启zipalign优化
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }

        release {
            debuggable false
            minifyEnabled true // 开启混淆
            shrinkResources false // 启动资源压缩
            zipAlignEnabled true // 开启zipalign优化
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "WXDynamicPlugin_Sample_${variant.buildType.name}.apk"
            }
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    buildFeatures {
        buildConfig true
//        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.7.0"
    }

//    lintOptions {
//        abortOnError false
//    }
}

dependencies {

    implementation libs.appcompat
    implementation libs.androidx.recyclerview
    implementation libs.google.material
    implementation libs.constraintlayout

    implementation project(path: ':Wgllss-Dynamic-Host-Version-Lib')
    implementation project(path: ':Wgllss-Dynamic-Host-Lib')
//    implementation project(path: ':Wgllss-Dynamic-Host-Download-Lib')
//    implementation project(path: ':Wgllss-Dynamic-Host-Constant-Lib')

    implementation project(path: ':wgllss-dynamic-host-skin-resource-lib')
    implementation project(path: ':wgllss-common-re-library')
    implementation project(path: ':wgllss-business-re-library')
    implementation project(path: ':wgllss-dynamic-host-library')

//    //compose
//    implementation(libs.androidx.activity.compose)
//    implementation(platform(libs.androidx.compose.bom))
//    implementation(libs.androidx.ui)
//    implementation(libs.androidx.ui.graphics)
//    implementation(libs.androidx.ui.tooling.preview)
//    implementation(libs.androidx.material3)
//    implementation libs.androidx.constraintlayout.compose
//    implementation libs.androidx.runtime.livedata
//    implementation libs.coil.compose
//    implementation libs.androidx.navigation.compose
//    implementation libs.androidx.navigation.runtime.ktx
//    implementation libs.androidx.compose.material3.adaptive.navigation
//    implementation libs.androidx.compose.material3.adaptive
//    implementation libs.androidx.compose.material3.adaptive.layout
//    implementation libs.androidx.compose.material3.navigationSuite
//    implementation libs.androidx.compose.material3.windowSizeClass
}

================================================
FILE: WX/WX-Code/WX-Host/app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# 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 *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法,一般不做更改
-optimizationpasses 7 # 代码混淆压缩比,在0~7之间,默认为5,一般不做修改
-dontpreverify # 不做预校验,preverify是proguard的四个步骤之一,Android不需要preverify,去掉这一步能够加快混淆速度。
-dontusemixedcaseclassnames #混合时不使用大小写混合,混合后的类名为小写
-verbose #包含有类名->混淆后类名的映射关系 日志记录
-keepattributes SourceFile,LineNumberTable # 保留代码行号

# Preserve some attributes that may be required for reflection.
-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解
                EnclosingMethod, # 避免混淆匿名类
                InnerClasses, # 避免混淆内部类
                RuntimeVisibleAnnotations,
                RuntimeVisibleParameterAnnotations,
                RuntimeVisibleTypeAnnotations,
                Signature # 避免混淆泛型
-keep class com.google.android.material.** { *; }


-keep class androidx.appcompat.view.ContextThemeWrapper { }
-keep class androidx.fragment.app.FragmentActivity { }
-keep class androidx.lifecycle.** { *; }


-keep class com.wgllss.core.** { *; }
-keep class com.wgllss.sample.** { *; }
-keep class com.wgllss.dynamic.host.lib.**{}
#-keep class com.wgllss.host.library.** { *; }

#-keep class com.wgllss.dynamic.lib.** { *; }
#-keep class com.wgllss.host.library.** { *; }
#-keep class com.wgllss.plugin.library.** { *; }
#-keep class com.wgllss.host.library.impl.** { *; }

-keep class androidx.savedstate.** { *; }
-keep class androidx.arch.core.internal.**{*;}

-keep class com.wgllss.**{*;}
-keep class android.**{*;}
-keep class android.app.**{*;}
-keep class androidx.**{*;}
-keep class androidx.activity.**{*;}
-keep class kotlinx.**{*;}
-keep class coil.**{*;}
-keep class com.tencent.mmkv.**{*;}
-keep class com.google.android.**{*;}
-keep class com.google.android.exoplayer2**{*;}
-keep class com.google.gson.**{*;}
-keep class retrofit2.**{*;}
-keep class okhttp3.**{*;}
-keep class okio.**{*;}
-keep class com.bumptech.glide.**{*;}
-keep class com.mcxtzhang.**{*;}
-keep class com.hjq.**{*;}
-keep class com.umeng.**{*;}
-keep class org.jsoup.**{*;}
-keep class res.**{*;}
-keep class com.wgllss.sample.skin.**{*;}
-keep class androidx.compose.**{*;}
-keep class androidx.constraintlayout.compose.**{*;}


-keep class * extends androidx.startup.Initializer{}

# Fragment
-keep class * extends androidx.fragment.app.Fragment{}
-keep class * extends android.app.Application{}
-keep class * extends androidx.lifecycle.LiveData{}
-keep class * extends androidx.startup.InitializationProvider{}

# keepclassmembers :防止类成员被移除或被混淆
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
# 保留本地native方法不被混淆
-keepclasseswithmembernames class * { native <methods>;}

-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# 保留R下面的资源
-keep class **.R$* {*;}
## Android architecture components: Lifecycle
# LifecycleObserver's empty constructor is considered to be unused by proguard
-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {
    <init>(...);
}
# ViewModel's empty constructor is considered to be unused by proguard
-keepclassmembers class * extends androidx.lifecycle.ViewModel {
    <init>(...);
}
-keepclassmembers class * extends androidx.lifecycle.LifecycleOwner {
    <init>(...);
}
#-keepclassmembers class * extends androidx.savedstate.SavedStateRegistryOwner {
#    <init>(...);
#}
# keep methods annotated with @OnLifecycleEvent even if they seem to be unused
# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)
-keepclassmembers class * {
    @androidx.lifecycle.OnLifecycleEvent *;
}

# ViewBinding
#-keep class androidx.databinding.DataBindingUtil{}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}


## Databinding
#-dontwarn android.databinding.**
#-keep class android.databinding.** { *; }
#
#-keep class android.content.Intent { *; }
#-keep class android.os.Bundle { *; }

# kotlin 相关
-dontwarn kotlin.**
-keep class kotlin.** { *; }
-keep interface kotlin.** { *; }


================================================
FILE: WX/WX-Code/WX-Host/app/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wgllss.dynamic.host">

    <application
        android:name=".SampleApplication"
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:requestLegacyExternalStorage="true"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true" >


    </application>

</manifest>

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/FaceImpl.kt
================================================
package com.wgllss.dynamic.host

import android.text.TextUtils
import com.wgllss.core.units.DeviceIdUtil
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CDLFD
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CLMD
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.FIRST
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.VERSION
import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS
import com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace

class FaceImpl : IDynamicDownLoadFace {

    private var baseXL: String = ""

//    override fun getHostL() = "http://192.168.3.108:8080/assets/WXDynamicPlugin/"
//    override fun getHostL() = "http://192.168.1.5:8080/assets/WXDynamicPlugin/"
    //todo 自己本地搭一个服务器,或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,
    // 切记不要往往我的 gitee 项目上面推
    override fun getHostL() = "https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/"

    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:
     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,
     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了,插件配置在新宿主版本文件夹下面,原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主
     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面
     */
    override fun getBaseL(): String {
        if (TextUtils.isEmpty(baseXL)) {
            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append("/").append(BuildConfig.VERSION_CODE).append("/").toString()
        }
        return baseXL
    }

    override fun isDebug() = false

    override fun getOtherDLU() = realUrl("vc")

    override fun getMapDLU() = mutableMapOf(
        VERSION to realUrl("classes_version_dex"),
        COMMON to realUrl("classes_common_lib_dex"),
        WEB_ASSETS to realUrl("classes_business_web_res"),
        COMMON_BUSINESS to realUrl("classes_business_lib_dex"),
        HOME to realUrl("classes_home_dex"),
        RESOURCE_SKIN to realUrl("classes_common_skin_res"),
        RUNTIME to realUrl("classes_wgllss_dynamic_plugin_runtime"),
        MANAGER to realUrl("classes_manager_dex"),
        FIRST to realUrl("classes_loading_dex"),
        CLMD to realUrl("class_loader_impl_dex"),
        CDLFD to realUrl("classes_downloadface_impl_dex")
    )

    override fun getLoadVersionClassName() = "com.wgllss.loader.version.LoaderVersionImpl"

    private fun realUrl(name: String) = StringBuilder().append(getBaseL()).append(name).toString()

}

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/SampleApplication.kt
================================================
package com.wgllss.dynamic.host

import android.app.Application
import android.content.Context
import com.wgllss.core.units.AppGlobals
import com.wgllss.core.units.LogTimer
import com.wgllss.dynamic.host.lib.impl.WXDynamicLoader

class SampleApplication : Application() {

    override fun attachBaseContext(base: Context) {
        super.attachBaseContext(base)
        LogTimer.initTime(this)
        AppGlobals.sApplication = this
        WXDynamicLoader.instance.installPlugin(base, FaceImpl(), VersionImpl())
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/VersionImpl.kt
================================================
package com.wgllss.dynamic.host

import com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant
import com.wgllss.dynamic.host.lib.version.ILoaderVersion

class VersionImpl : ILoaderVersion {

    override fun getV() = 1000

    override fun isMustShowLoading() = false

    override fun getClfd() = Triple(
        "com.wgllss.dynamic.impl.ILoadHomeImpl", "loading", 1000
    )

    override fun getClmd() = Triple("", "", 0)

    override fun getCdlfd() = Triple("", "", 0)

    override fun getMapDLU() = linkedMapOf(
        DynamicPluginConstant.COMMON to Pair("classes_common_lib_dex", 1000),
        DynamicPluginConstant.WEB_ASSETS to Pair("classes_business_web_res", 1000),
        DynamicPluginConstant.COMMON_BUSINESS to Pair("classes_business_lib_dex", 1000),
        DynamicPluginConstant.RUNTIME to Pair("classes_wgllss_dynamic_plugin_runtime", 1000),
        DynamicPluginConstant.MANAGER to Pair("classes_manager_dex", 1000),
        DynamicPluginConstant.RESOURCE_SKIN to Pair("classes_common_skin_res", 1000),
        DynamicPluginConstant.HOME to Pair("classes_home_dex", 1000)
    )

//    override fun getOthers() = mutableMapOf<String, Int>()

    override fun getOthers() = mutableMapOf(
        "classes_other_dex" to 1000,
        "classes_other_res" to 1000,
        "classes_other2_dex" to 1000,
        "classes_other2_res" to 1000
    )
}

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/res/drawable/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<vector
    android:height="108dp"
    android:width="108dp"
    android:viewportHeight="108"
    android:viewportWidth="108"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#3DDC84"
          android:pathData="M0,0h108v108h-108z"/>
    <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
    <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</vector>


================================================
FILE: WX/WX-Code/WX-Host/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    android:width="108dp"
    android:height="108dp"
    android:viewportWidth="108"
    android:viewportHeight="108">
    <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
        <aapt:attr name="android:fillColor">
            <gradient
                android:endX="85.84757"
                android:endY="92.4963"
                android:startX="42.9492"
                android:startY="49.59793"
                android:type="linear">
                <item
                    android:color="#44000000"
                    android:offset="0.0" />
                <item
                    android:color="#00000000"
                    android:offset="1.0" />
            </gradient>
        </aapt:attr>
    </path>
    <path
        android:fillColor="#FFFFFF"
        android:fillType="nonZero"
        android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
        android:strokeWidth="1"
        android:strokeColor="#00000000" />
</vector>

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background"/>
    <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/res/xml/backup_rules.xml
================================================
<?xml version="1.0" encoding="utf-8"?><!--
   Sample backup rules file; uncomment and customize as necessary.
   See https://developer.android.com/guide/topics/data/autobackup
   for details.
   Note: This file is ignored for devices older that API 31
   See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
    <!--
   <include domain="sharedpref" path="."/>
   <exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/res/xml/data_extraction_rules.xml
================================================
<?xml version="1.0" encoding="utf-8"?><!--
   Sample data extraction rules file; uncomment and customize as necessary.
   See https://developer.android.com/about/versions/12/backup-restore#xml-changes
   for details.
-->
<data-extraction-rules>
    <cloud-backup>
        <!-- TODO: Use <include> and <exclude> to control what is backed up.
        <include .../>
        <exclude .../>
        -->
    </cloud-backup>
    <!--
    <device-transfer>
        <include .../>
        <exclude .../>
    </device-transfer>
    -->
</data-extraction-rules>

================================================
FILE: WX/WX-Code/WX-Host/app/src/main/res/xml/network_security_config.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:tools="http://schemas.android.com/tools">
    <!--    <domain-config tools:ignore="NetworkSecurityConfig">-->
    <base-config cleartextTrafficPermitted="true" />
    <!--    </domain-config>-->
</network-security-config>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/.gitignore
================================================
/build
/.gradle

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/build.gradle
================================================
plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
    alias(libs.plugins.kotlin.kapt)
}

android {
    compileSdk libs.versions.compileSdk.get().toInteger()
    namespace "com.wgllss.sample.library.re"

    defaultConfig {
        minSdkVersion libs.versions.minSdk.get().toInteger()
        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    kapt {
        generateStubs = true
    }
}


dependencies {
    implementation project(':wgllss-dynamic-host-skin-resource-lib')
    implementation libs.glide
    implementation libs.swiperefreshlayout
    implementation libs.startup.runtime
    implementation libs.squareup.retrofit
    implementation libs.com.squareup.okhttp3.logging.interceptor
    implementation libs.okhttp3.okhttp
    implementation libs.okio
    implementation libs.converter.gson
    implementation libs.converter.scalars
    //解析html
    implementation libs.org.jsoup.jsoup
    //noinspection UseTomlInstead
    implementation libs.palette.ktx
    //room 数据库
    implementation libs.room.runtime
    kapt libs.room.compiler
    //mmkv
    implementation libs.mmkv
    implementation libs.exoplayer.core
    implementation libs.exoplayer.ui
    implementation libs.google.extension.mediasession
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# 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 *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wgllss.sample.library.re">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <uses-permission android:name="android.permission.REORDER_TASKS" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />


    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.REORDER_TASKS" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.GET_TOP" />、

    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.DISABLE_KEYGUARD" />

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <application>

        <provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            android:exported="false">
            <meta-data
                android:name="com.wgllss.dynamic.initializer.InitHomeFirstInitialize"
                android:value="androidx.startup" />
        </provider>

        <service
            android:name="com.wgllss.sample.feature_system.services.MusicService"
            android:enabled="true"
            android:exported="true"
            android:foregroundServiceType="mediaPlayback">
            <intent-filter>
                <action android:name="android.media.browse.MediaBrowserService" />
            </intent-filter>
        </service>

        <activity
            android:name="com.wgllss.sample.features_ui.playing.activity.NotificationTargetActivity"
            android:exported="false"
            android:launchMode="singleTask"
            android:theme="@style/Transparent" />

        <receiver
            android:name="androidx.media.session.MediaButtonReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MEDIA_BUTTON" />
            </intent-filter>
        </receiver>

    </application>
</manifest>



================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/main/java/com/wgllss/sample/feature_system/globle/Constants.kt
================================================
package com.wgllss.sample.feature_system.globle

import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions


object Constants {
    const val MEDIA_ID_ROOT = "-1"

    const val MEDIA_TITLE_KEY = "MEDIA_TITLE_KEY"
    const val MEDIA_ID_KEY = "MEDIA_ID_KEY"
    const val MEDIA_AUTHOR_KEY = "MEDIA_AUTHOR_KEY"
    const val MEDIA_ARTNETWORK_URL_KEY = "MEDIA_ARTNETWORK_URL_KEY"
    const val MEDIA_URL_KEY = "MEDIA_URL_KEY"

    const val NOTIFICATION_LARGE_ICON_SIZE = 144 // px

    val defaultImgID = com.wgllss.host.skin.R.drawable.icon_loading

    val glideOptions = RequestOptions().fallback(com.wgllss.host.skin.R.drawable.icon_loading).diskCacheStrategy(DiskCacheStrategy.DATA)

    //单曲循环
    const val MODE_PLAY_REPEAT_SONG = 2

    //随机模式
    const val MODE_PLAY_SHUFFLE_ALL = 1

    //顺序播放重复队列
    const val MODE_PLAY_REPEAT_QUEUE = 0
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/test/java/com/wgllss/sample/ExampleUnitTest.kt
================================================
package com.wgllss.sample

import org.junit.Test

import org.junit.Assert.*

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/.gitignore
================================================
/build

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/build.gradle
================================================
plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
}

android {
    compileSdk libs.versions.compileSdk.get().toInteger()
    namespace "com.wgllss.core.re"

    defaultConfig {
        minSdkVersion libs.versions.minSdk.get().toInteger()
        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()
        versionCode 1008
        versionName "1.0.0.8"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    buildFeatures {
        dataBinding = true
        buildConfig true
    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
//    implementation files('libs/com_wang_avi_library-2.1.3.aar')

    implementation libs.appcompat
    implementation libs.androidx.core.ktx
    implementation libs.androidx.lifecycle.runtime.ktx
    implementation libs.androidx.lifecycle.livedata.ktx
    implementation libs.androidx.lifecycle.viewmodel.ktx
    implementation libs.glide
    implementation libs.converter.gson
    //权限申请框架
    implementation libs.xxpermissions
    implementation libs.androidx.activity.ktx
    implementation libs.androidx.fragment.ktx

    //compose
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.material3)
    implementation libs.androidx.constraintlayout.compose
    implementation libs.androidx.runtime.livedata
    implementation libs.coil.compose
    implementation libs.androidx.navigation.compose
    implementation libs.androidx.navigation.runtime.ktx
    implementation libs.androidx.compose.material3.adaptive.navigation
    implementation libs.androidx.compose.material3.adaptive
    implementation libs.androidx.compose.material3.adaptive.layout
    implementation libs.androidx.compose.material3.navigationSuite
    implementation libs.androidx.compose.material3.windowSizeClass

    implementation libs.collapsing.toolbar.scaffold
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# 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 *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wgllss.core.re"></manifest>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/dialog/CommonLoadingView.kt
================================================
package com.wgllss.core.dialog

import android.content.Context
import android.view.Gravity
import android.view.View
import android.widget.TextView
import androidx.appcompat.app.AppCompatDialog
import com.wgllss.core.re.R

class CommonLoadingView : AppCompatDialog {
    private lateinit var txt_loading_text: TextView

    constructor (context: Context) : super(context, R.style.Loading) {
        setContentView(R.layout.common_loading)
        window?.run {
            txt_loading_text = findViewById(R.id.txt_loading_text)
            attributes.gravity = Gravity.CENTER
        }
    }

    fun show(showText: String) {
        txt_loading_text?.apply {
            if (showText.isNotEmpty()) {
                text = showText
                visibility = View.VISIBLE
            } else {
                visibility = View.GONE
            }
        }
        if (!isShowing()) {
            show()
        }
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/ContextEX.kt
================================================
package com.wgllss.core.ex

import android.app.Activity
import android.content.Context
import android.content.Intent
import com.wgllss.core.re.R


fun Context.launchActivity(intent: Intent) {
    startActivity(intent)
    if (this is Activity)
        overridePendingTransition(R.anim.anim_alpha_121, R.anim.anim_alpha_121)
}

fun Activity.finishActivity() {
    finish()
    overridePendingTransition(R.anim.anim_alpha_121, R.anim.anim_alpha_121)
}


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/Flow.kt
================================================
package com.wgllss.core.ex

import androidx.lifecycle.MutableLiveData
import com.google.gson.JsonSyntaxException
import com.wgllss.core.re.R
import com.wgllss.core.units.AppGlobals
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.flowOn
import retrofit2.HttpException
import java.io.InterruptedIOException
import java.net.ConnectException
import java.net.SocketException
import java.net.SocketTimeoutException
import java.net.UnknownHostException
import java.util.concurrent.TimeoutException

fun Throwable?.parseErrorString(): String = when (this) {
    is ConnectException, is SocketException -> {
        if (message?.contains("Network is unreachable") == true)
            getString(R.string.Mobilenetuseless_msg)
        if (message?.contains("Failed to connect to") == true)
            getString(R.string.failed_to_connect_to)
        else
            getString(R.string.ConnectException)
    }
    is HttpException -> {
        if (message?.contains("HTTP 50") == true) {
            message!!.substring(0, 8)
        } else {
            getString(R.string.HttpException)
        }
    }
    is InterruptedIOException -> {
        if (message?.contains("timeout") == true)
            getString(R.string.SocketTimeoutException)
        else
            getString(R.string.ConnectException)
    }
    is UnknownHostException -> getString(R.string.UnknownHostException)
    is JsonSyntaxException -> getString(R.string.JsonSyntaxException)
    is SocketTimeoutException, is TimeoutException -> getString(R.string.SocketTimeoutException)
    is IllegalArgumentException -> {
        if (message?.contains("baseUrl must end in ") == true)
            if (AppGlobals.sApplication.isNetWorkActive()) getString(R.string.HostBaseUrlError)
            else getString(R.string.Mobilenetuseless_msg)
        else message ?: getString(R.string.ElseNetException)
    }
    else -> getString(R.string.ElseNetException)
}

fun <T> Flow<T>.flowOnIOAndCatch(errorMsgLiveData: MutableLiveData<String>? = null): Flow<T> =
    flowOn(Dispatchers.IO)
        .catch {
            it.printStackTrace()
            errorMsgLiveData?.value = it.parseErrorString();
        }

suspend fun <T> Flow<T>.flowOnIOAndCatchAAndCollect() {
    flowOnIOAndCatch().collect()//这里,开始结束全放在异步里面处理
}

fun getString(resID: Int) = AppGlobals.sApplication.getString(resID)

//fun <T1, T2, T3, R> Flow<T1>.zip(flow2: Flow<T2>, flow3: Flow<T3>, transform: suspend (T1, T2, T3) -> R): Flow<R> = channelFlow {
//
//    val first: ReceiveChannel<T1> = produce {
//        this@zip.collect {
//            channel.send(it)
//        }
//    }
//
//    val second: ReceiveChannel<T2> = produce {
//        flow2.collect {
//            channel.send(it)
//        }
//    }
//
//    val third: ReceiveChannel<T3> = produce {
//        flow3.collect {
//            channel.send(it)
//        }
//    }
//
//    (second as SendChannel<*>).invokeOnClose {
//        if (!first.isClosedForReceive) first.cancel(CancellationException())
//        if (!third.isClosedForReceive) third.cancel(CancellationException())
//    }
//
//    (third as SendChannel<*>).invokeOnClose {
//        if (!first.isClosedForReceive) first.cancel(CancellationException())
//        if (!second.isClosedForReceive) second.cancel(CancellationException())
//    }
//
//    val otherIterator = second.iterator()
//    val anotherIterator = third.iterator()
//
//    try {
//        first.consumeEach { value ->
//            if (!otherIterator.hasNext() || !anotherIterator.hasNext()) {
//                return@consumeEach
//            }
//            send(transform(value, otherIterator.next(), anotherIterator.next()))
//        }
//    } catch (e: CancellationException) {
//        e.printStackTrace()
//        android.util.Log.e("TAG", "${e.message}")
//        // complete
//    } finally {
//        if (!second.isClosedForReceive) second.cancel(CancellationException())
//        if (!third.isClosedForReceive) third.cancel(CancellationException())
//    }
//}




================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/NetWorkHelp.kt
================================================
package com.wgllss.core.ex
import android.app.Application
import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.os.Build

fun Application.isNetWorkActive(): Boolean {
    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val network = connectivityManager.activeNetwork ?: return false
        val activeNetwork =
            connectivityManager.getNetworkCapabilities(network) ?: return false
        return when {
            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true
            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> true
            else -> false
        }
    } else {
        @Suppress("DEPRECATION") val networkInfo =
            connectivityManager.activeNetworkInfo ?: return false
        @Suppress("DEPRECATION")
        return networkInfo.isConnected
    }
    return true
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionInterceptor.kt
================================================
package com.wgllss.core.permissions

import android.app.Activity
import android.app.AlertDialog
import android.content.DialogInterface
import android.os.Build
import com.hjq.permissions.*
import com.wgllss.core.re.R
import com.wgllss.core.widget.CommonToast

open class PermissionInterceptor : IPermissionInterceptor {

    override fun grantedPermissions(activity: Activity?, allPermissions: List<String?>?, grantedPermissions: List<String?>?, all: Boolean, callback: OnPermissionCallback?) {
        if (callback == null) {
            return
        }
        callback.onGranted(grantedPermissions, all)
    }

    override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {
        callback?.onDenied(deniedPermissions, never)
        if (never) {
            if (deniedPermissions.size == 1 && Permission.ACCESS_MEDIA_LOCATION == deniedPermissions[0]) {
                CommonToast.show(R.string.common_permission_media_location_hint_fail)
                return
            }
            showPermissionSettingDialog(activity, allPermissions, deniedPermissions, callback)
            return
        }
        if (deniedPermissions.size == 1) {
            val deniedPermission = deniedPermissions[0]
            if (Permission.ACCESS_BACKGROUND_LOCATION == deniedPermission) {
                CommonToast.show(R.string.common_permission_background_location_fail_hint)
                return
            }
            if (Permission.BODY_SENSORS_BACKGROUND == deniedPermission) {
                CommonToast.show(R.string.common_permission_background_sensors_fail_hint)
                return
            }
        }
        val message: String
        val permissionNames: List<String> = PermissionNameConvert.permissionsToNames(activity, deniedPermissions)
        message = if (!permissionNames.isEmpty()) {
            activity.getString(R.string.common_permission_fail_assign_hint, PermissionNameConvert.listToString(permissionNames))
        } else {
            activity.getString(R.string.common_permission_fail_hint)
        }
        CommonToast.show(message)
    }

    /**
     * 显示授权对话框
     */
    private fun showPermissionSettingDialog(
        activity: Activity?, allPermissions: List<String>,
        deniedPermissions: List<String>, callback: OnPermissionCallback?
    ) {
        if (activity == null || activity.isFinishing ||
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed
        ) {
            return
        }
        val message: String
        val permissionNames: List<String> = PermissionNameConvert.permissionsToNames(activity, deniedPermissions)
        message = if (!permissionNames.isEmpty()) {
            activity.getString(R.string.common_permission_manual_assign_fail_hint, PermissionNameConvert.listToString(permissionNames))
        } else {
            activity.getString(R.string.common_permission_manual_fail_hint)
        }

        // 这里的 Dialog 只是示例,没有用 DialogFragment 来处理 Dialog 生命周期
        AlertDialog.Builder(activity)
            .setTitle(R.string.common_permission_alert)
            .setMessage(message)
            .setPositiveButton(R.string.common_permission_goto_setting_page, DialogInterface.OnClickListener { dialog, which ->
                dialog.dismiss()
                XXPermissions.startPermissionActivity(activity,
                    deniedPermissions, object : OnPermissionPageCallback {
                        override fun onGranted() {
                            if (callback == null) {
                                return
                            }
                            callback.onGranted(allPermissions, true)
                        }

                        override fun onDenied() {
                            showPermissionSettingDialog(
                                activity, allPermissions,
                                XXPermissions.getDenied(activity, allPermissions), callback
                            )
                        }
                    })
            })
            .show()
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionNameConvert.kt
================================================
package com.wgllss.core.permissions

import android.content.Context
import android.os.Build
import com.hjq.permissions.Permission
import com.wgllss.core.re.R

object PermissionNameConvert {
    /**
     * 获取权限名称
     */
    fun getPermissionString(context: Context?, permissions: List<String>): String {
        return listToString(permissionsToNames(context, permissions))
    }

    /**
     * String 列表拼接成一个字符串
     */
    fun listToString(hints: List<String>): String {
        if (hints == null || hints.isEmpty()) {
            return ""
        }
        val builder = StringBuilder()
        for (text in hints) {
            if (builder.toString().isEmpty()) {
                builder.append(text)
            } else {
                builder.append("、")
                    .append(text)
            }
        }
        return builder.toString()
    }

    /**
     * 将权限列表转换成对应名称列表
     */
    fun permissionsToNames(context: Context?, permissions: List<String>): List<String> {
        val permissionNames: MutableList<String> = ArrayList()
        if (context == null) {
            return permissionNames
        }
        if (permissions == null) {
            return permissionNames
        }
        for (permission in permissions) {
            when (permission) {
                Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE -> {
                    val hint = context.getString(R.string.common_permission_storage)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.READ_MEDIA_IMAGES, Permission.READ_MEDIA_VIDEO -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                        val hint = context.getString(R.string.common_permission_image_and_video)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.READ_MEDIA_AUDIO -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                        val hint = context.getString(R.string.common_permission_audio)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.CAMERA -> {
                    val hint = context.getString(R.string.common_permission_camera)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.RECORD_AUDIO -> {
                    val hint = context.getString(R.string.common_permission_microphone)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.ACCESS_FINE_LOCATION, Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_BACKGROUND_LOCATION -> {
                    var hint: String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&
                        !permissions.contains(Permission.ACCESS_FINE_LOCATION) &&
                        !permissions.contains(Permission.ACCESS_COARSE_LOCATION)
                    ) {
                        context.getString(R.string.common_permission_location_background)
                    } else {
                        context.getString(R.string.common_permission_location)
                    }
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.BODY_SENSORS, Permission.BODY_SENSORS_BACKGROUND -> {
                    var hint: String
                    hint = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&
                        !permissions.contains(Permission.BODY_SENSORS)
                    ) {
                        context.getString(R.string.common_permission_sensors_background)
                    } else {
                        context.getString(R.string.common_permission_sensors)
                    }
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.BLUETOOTH_SCAN, Permission.BLUETOOTH_CONNECT, Permission.BLUETOOTH_ADVERTISE -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                        val hint = context.getString(R.string.common_permission_wireless_devices)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.NEARBY_WIFI_DEVICES -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                        val hint = context.getString(R.string.common_permission_wireless_devices)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.READ_PHONE_STATE, Permission.CALL_PHONE, Permission.ADD_VOICEMAIL, Permission.USE_SIP, Permission.READ_PHONE_NUMBERS, Permission.ANSWER_PHONE_CALLS -> {
                    val hint = context.getString(R.string.common_permission_phone)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.GET_ACCOUNTS, Permission.READ_CONTACTS, Permission.WRITE_CONTACTS -> {
                    val hint = context.getString(R.string.common_permission_contacts)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.READ_CALENDAR, Permission.WRITE_CALENDAR -> {
                    val hint = context.getString(R.string.common_permission_calendar)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.READ_CALL_LOG, Permission.WRITE_CALL_LOG, Permission.PROCESS_OUTGOING_CALLS -> {
                    val hint: String = context.getString(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) R.string.common_permission_call_log else R.string.common_permission_phone)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.ACTIVITY_RECOGNITION -> {
                    val hint: String = context.getString(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) R.string.common_permission_activity_recognition_30 else R.string.common_permission_activity_recognition_29)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.ACCESS_MEDIA_LOCATION -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                        val hint = context.getString(R.string.common_permission_media_location)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.SEND_SMS, Permission.RECEIVE_SMS, Permission.READ_SMS, Permission.RECEIVE_WAP_PUSH, Permission.RECEIVE_MMS -> {
                    val hint = context.getString(R.string.common_permission_sms)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.MANAGE_EXTERNAL_STORAGE -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
                        val hint = context.getString(R.string.common_permission_manage_storage)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.REQUEST_INSTALL_PACKAGES -> {
                    val hint = context.getString(R.string.common_permission_install)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.SYSTEM_ALERT_WINDOW -> {
                    val hint = context.getString(R.string.common_permission_window)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.WRITE_SETTINGS -> {
                    val hint = context.getString(R.string.common_permission_setting)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.NOTIFICATION_SERVICE -> {
                    val hint = context.getString(R.string.common_permission_notification)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.POST_NOTIFICATIONS -> {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                        val hint = context.getString(R.string.common_permission_post_notifications)
                        if (!permissionNames.contains(hint)) {
                            permissionNames.add(hint)
                        }
                    }
                }
                Permission.BIND_NOTIFICATION_LISTENER_SERVICE -> {
                    val hint = context.getString(R.string.common_permission_notification_listener)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.PACKAGE_USAGE_STATS -> {
                    val hint = context.getString(R.string.common_permission_task)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.SCHEDULE_EXACT_ALARM -> {
                    val hint = context.getString(R.string.common_permission_alarm)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.ACCESS_NOTIFICATION_POLICY -> {
                    val hint = context.getString(R.string.common_permission_not_disturb)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS -> {
                    val hint = context.getString(R.string.common_permission_ignore_battery)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.BIND_VPN_SERVICE -> {
                    val hint = context.getString(R.string.common_permission_vpn)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                Permission.PICTURE_IN_PICTURE -> {
                    val hint = context.getString(R.string.common_permission_picture_in_picture)
                    if (!permissionNames.contains(hint)) {
                        permissionNames.add(hint)
                    }
                }
                else -> {}
            }
        }
        return permissionNames
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/AppGlobals.kt
================================================
package com.wgllss.core.units

import android.app.Application

object AppGlobals {
    lateinit var sApplication: Application

    fun getApplication(): Application {
        if (!this::sApplication.isInitialized) {
            //去反射得到
            try {
                val aClass = Class.forName("android.app.ActivityThread")
                //获取里面的currentApplication
                val currentApplication = aClass.getDeclaredMethod("currentApplication")
                sApplication = currentApplication.invoke(null, null) as Application
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
        return sApplication
    }
}


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/DeviceIdUtil.kt
================================================
package com.wgllss.core.units

import android.content.Context
import android.os.Build
import android.provider.Settings
import java.security.MessageDigest
import java.util.*

object DeviceIdUtil {

    private const val isDeviceSelfSerial = false

    //自己设备测试序号
    private val setsD = setOf("B05F9543937A5BA61901FC14F2540C62DA3E86C2", "2F6039397BA7EEC402E7036339963B23810CCBFD")

    //其他设备测试序号 命名可自定义
    private const val ELSED = "dxde_m_p"

    fun getDeviceId(): String {
        if (isDeviceSelfSerial) {
            //todo 模拟序列号
            return "2F6039397BA7EEC402E7036339963B23810CCBFD"
        } else {
            val context = AppGlobals.sApplication
            val sbDeviceId = StringBuilder()
            val androidID = getAndroidId(context)
            val id = getDeviceUUID(context).replace("-", "")
            if (androidID != null && androidID.isNotEmpty()) {
                sbDeviceId.append(androidID)
                sbDeviceId.append("|")
            }
            if (id != null && id.isNotEmpty()) {
                sbDeviceId.append(id)
            }
            if (sbDeviceId.toString().isNotEmpty()) {
                try {
                    val hash = getHashByString(sbDeviceId.toString())
                    val sha1 = bytesToHex(hash!!)
                    if (sha1 != null && sha1.isNotEmpty()) {
                        LogTimer.LogE(this, "sha1:$sha1")
                        return if (setsD.contains(sha1)) sha1 else ELSED
                    }
                } catch (ex: Exception) {
                    ex.printStackTrace()
                }
            }
            val s = sbDeviceId.toString()
            return if (setsD.contains(s)) s else ELSED
        }
    }

    private fun bytesToHex(data: ByteArray): String? {
        val sb = StringBuilder()
        var stmp: String
        for (n in data.indices) {
            stmp = Integer.toHexString(data[n].toInt() and 0xFF)
            if (stmp.length == 1) sb.append("0")
            sb.append(stmp)
        }
        return sb.toString().uppercase(Locale.CHINA)
    }

    private fun getHashByString(data: String): ByteArray? {
        return try {
            val messageDigest: MessageDigest = MessageDigest.getInstance("SHA1")
            messageDigest.reset()
            messageDigest.update(data.toByteArray(charset("UTF-8")))
            messageDigest.digest()
        } catch (e: java.lang.Exception) {
            " ".toByteArray()
        }
    }

    private fun getDeviceUUID(context: Context): String {
        val sb = StringBuilder().apply {
            append("100001")
            append(Build.BOARD)
            append(Build.BRAND)
            append(Build.DEVICE)
            append(Build.HARDWARE)
            append(Build.ID)
            append(Build.MODEL)
            append(Build.PRODUCT)
        }
        val long = sb.toString().hashCode().toLong()
        return UUID(long, long).toString()
    }

    private fun getAndroidId(context: Context): String {
        try {
            return Settings.Secure.getString(
                context.contentResolver,
                Settings.Secure.ANDROID_ID
            )
        } catch (ex: java.lang.Exception) {
            ex.printStackTrace()
        }
        return " "
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/LogTimer.kt
================================================
package com.wgllss.core.units

import android.util.Log
import com.wgllss.core.re.BuildConfig


object LogTimer {
    var time: Long = System.currentTimeMillis()

    fun initTime(any: Any) {
        time = System.currentTimeMillis()
    }

    fun LogE(any: Any, tagName: String) {
        val cur = System.currentTimeMillis()
        val dis = cur - time
        if (BuildConfig.DEBUG)
            Log.e("${any.javaClass.simpleName}", " $tagName 耗时:${dis} ms")
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/widget/CommonToast.kt
================================================
package com.wgllss.core.widget

import android.content.Context
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Handler
import android.os.Looper
import android.util.TypedValue
import android.view.Gravity
import android.widget.LinearLayout
import android.widget.TextView
import android.widget.Toast
import com.wgllss.core.units.AppGlobals
import java.util.*

class CommonToast {
    companion object {
        private val toastBackgroundId = -1
        private val toastTextColorId = -1
        private var lastDate: Date? = null

        // 提示时间间隔3秒钟
        private val toastPeriod = 3
        private var mToast: Toast? = null
        private var toastText: TextView? = null
        private val mHandler: Handler = Handler(Looper.getMainLooper())
        private val r = Runnable {
            if (mToast != null) {
                mToast!!.cancel()
                mToast = null // toast隐藏后,将其置为null
            }
            if (toastText != null) {
                toastText = null
            }
        }

        /**
         * 显示toast
         *
         * @param strContent      显示内容
         * @param widthRate       占屏幕宽度比例 0为 WRAP_CONTENT
         * @param heightRate      占屏幕高度比例 0为 WRAP_CONTENT
         * @param gravity         占屏幕位置
         * @param delayMillis     延迟多少毫秒隐藏tost
         * @param isInToastPeriod isInToastPeriod 在规定的时间间隔里内是否显示
         * @author :Atar
         * @createTime:2016-3-18上午10:19:13
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        @JvmStatic
        fun show(context: Context, strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, offy: Int, delayMillis: Long, isInToastPeriod: Boolean) {
            show(context, strContent, widthRate, heightRate, gravity, offy, delayMillis, isInToastPeriod, 1, 0)
        }

        /**
         * 显示toast
         *
         * @param strContent      显示内容
         * @param widthRate       占屏幕宽度比例 0为 WRAP_CONTENT
         * @param heightRate      占屏幕高度比例 0为 WRAP_CONTENT
         * @param gravity         占屏幕位置
         * @param delayMillis     延迟多少毫秒隐藏tost
         * @param isInToastPeriod isInToastPeriod 在规定的时间间隔里内是否显示
         * @param orientation     屏幕方向
         * @param rotation        旋转角度
         * @author :Atar
         * @createTime:2016-3-18上午10:19:13
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        @JvmStatic
        fun show(context: Context, strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, offy: Int, delayMillis: Long, isInToastPeriod: Boolean, orientation: Int, rotation: Int) {
            try {
                if (isInToastPeriod) {
                    return
                }
                mHandler!!.removeCallbacks(r)
                if (mToast == null || toastText == null) { // 只有mToast==null时才重新创建,否则只需更改提示文字
                    mToast = Toast(context)
                    val toastLayout = LinearLayout(context)
                    toastLayout.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)
                    toastLayout.orientation = LinearLayout.VERTICAL
                    toastLayout.gravity = Gravity.CENTER
                    toastText = TextView(context)
                    val size = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10f, context.resources.displayMetrics).toInt()
                    var width = 0
                    var height = 0
                    if (orientation == 1) { // 1竖屏
                        val widthPixels = context.resources.displayMetrics.widthPixels
                        width = if (widthRate == 0) {
                            LinearLayout.LayoutParams.WRAP_CONTENT
                        } else {
                            widthPixels / widthRate
                        }
                        height = if (heightRate == 0) {
                            LinearLayout.LayoutParams.WRAP_CONTENT
                        } else {
                            widthPixels / heightRate
                        }
                        toastText!!.layoutParams = LinearLayout.LayoutParams(width, height)
                        toastLayout.rotation = rotation.toFloat()
                    } else {
                        val widthPixels = context.resources.displayMetrics.heightPixels
                        width = if (widthRate == 0) {
                            LinearLayout.LayoutParams.WRAP_CONTENT
                        } else {
                            widthPixels / widthRate
                        }
                        height = if (heightRate == 0) {
                            LinearLayout.LayoutParams.WRAP_CONTENT
                        } else {
                            widthPixels / heightRate
                        }
                        toastText!!.layoutParams = LinearLayout.LayoutParams(width, height)
                        toastLayout.rotation = rotation.toFloat()
                    }
                    toastText!!.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16f)
                    toastText!!.setPadding(size, size, size, size)
                    toastText!!.gravity = Gravity.CENTER
                    if (toastBackgroundId != -1) {
                        toastLayout.setBackgroundDrawable(context.resources.getDrawable(toastBackgroundId))
                    } else {
                        setText(toastText!!)
                    }
                    if (toastTextColorId != -1) {
                        toastText!!.setTextColor(context.resources.getColor(toastTextColorId))
                    } else {
                        setText(toastText!!)
                    }
                    toastLayout.addView(toastText)
                    mToast!!.view = toastLayout
                    mToast!!.setGravity(gravity, 0, offy)
                    mToast!!.duration = Toast.LENGTH_SHORT
                }
                if (toastText != null) {
                    toastText!!.text = strContent
                }
                mHandler.postDelayed(r, delayMillis) // 延迟delayMillis耗秒隐藏toast
                try {
                    mToast!!.show()
                } catch (e: Exception) {
                    e.printStackTrace()
                }
            } catch (e: Exception) {
            }
        }

        @JvmStatic
        fun show(resID: Int) {
            show(AppGlobals.sApplication, AppGlobals.sApplication.resources.getString(resID), 0, 0, Gravity.CENTER, 0, 3000, false)
        }

        /**
         * 显示Toast
         *
         * @param strContent:提示肉容
         * @author :Atar
         * @createTime:2014-6-25上午10:23:59
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        @JvmStatic
        fun show(strContent: String?) {
            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, 3000, false)
        }

        @JvmStatic
        fun show(strContent: String?, dealyMills: Int) {
            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 300, dealyMills.toLong(), false)
        }

        @JvmStatic
        fun show(strContent: String?, gravity: Int, offy: Int) {
            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, offy, 3000, false)
        }

        /**
         * 显示toast
         *
         * @param strContent  显示内容
         * @param widthRate   占屏幕宽度比例
         * @param heightRate  占屏幕高度比例
         * @param gravity     占屏幕位置
         * @param delayMillis 延迟多少毫秒隐藏tost
         * @author :Atar
         * @createTime:2016-3-18上午10:19:13
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        @JvmStatic
        fun show(strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, delayMillis: Long) {
            show(AppGlobals.sApplication, strContent, widthRate, heightRate, gravity, 300, delayMillis, false)
        }

        /**
         * 在时间间隔内不作提示
         *
         * @param strContent
         * @author :Atar
         * @createTime:2015-9-23下午3:33:03
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        @JvmStatic
        fun showWhihPeriod(strContent: String?) {
            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, 3000, isInToastPeriod())
        }

        /**
         * 在时间间隔内不作提示
         *
         * @param strContent
         * @author :Atar
         * @createTime:2015-9-23下午3:33:03
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        fun showWhihPeriod(strContent: String?, delayMills: Int) {
            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, delayMills.toLong(), isInToastPeriod())
        }

        /**
         * @param mTextView
         * @author :Atar
         * @createTime:2015-9-23下午3:33:13
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        private fun setText(mTextView: TextView) {
            mTextView.setTextColor(Color.WHITE)
            val roundRadius = 8
            val fillColor = Color.parseColor("#90000000")
            val gd = GradientDrawable()
            gd.setColor(fillColor)
            gd.cornerRadius = roundRadius.toFloat()
            mTextView.setBackgroundDrawable(gd)
        }

        /**
         * 是否在提示时间间隔内
         *
         * @return
         * @author :Atar
         * @createTime:2014-11-12上午11:26:54
         * @version:1.0.0
         * @modifyTime:
         * @modifyAuthor:
         * @description:
         */
        fun isInToastPeriod(): Boolean {
            val curDate = Date(System.currentTimeMillis()) // 获取当前时间
            return if (curDate != null) {
                var lastTime: Long = 0
                lastTime = if (lastDate == null) {
                    0
                } else {
                    lastDate!!.time
                }
                val timeLong = curDate.time - lastTime
                if (timeLong < toastPeriod * 1000) {
                    true
                } else {
                    lastDate = curDate
                    false
                }
            } else {
                true
            }
        }

        fun dissMissToast() {
            if (mToast != null) {
                mToast!!.cancel()
                mToast = null // toast隐藏后,将其置为null
            }
            if (toastText != null) {
                toastText = null
            }
            mHandler?.removeCallbacksAndMessages(null)
        }
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/anim/anim_alpha_121.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="0"
        android:fromAlpha="1.0"
        android:toAlpha="1.0" />

    <translate
        android:duration="0"
        android:fromXDelta="0%p"
        android:toXDelta="0%p" >
    </translate>

</set>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/drawable/button_bg_transparent_helf.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#80000000"></solid>

    <corners
        android:bottomLeftRadius="4.5dp"
        android:bottomRightRadius="4.5dp"
        android:topLeftRadius="4.5dp"
        android:topRightRadius="4.5dp" />
</shape>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/drawable/progressbar_shape.xml
================================================
<?xml version ="1.0" encoding ="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/ic_loading"
    android:pivotX="50%"
    android:pivotY="50%" />


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/layout/common_loading.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00000000"
    android:gravity="center">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/button_bg_transparent_helf"
        android:gravity="center"
        android:orientation="vertical"
        android:padding="20dp">
        <ProgressBar
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:indeterminateDrawable="@drawable/progressbar_shape" />

        <TextView
            android:id="@+id/txt_loading_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="5dp"
            android:textColor="@android:color/white"
            android:textSize="12dp" />

<!--        <com.wang.avi.AVLoadingIndicatorView-->
        <!--            android:id="@+id/avi"-->
        <!--            android:layout_width="wrap_content"-->
        <!--            android:layout_height="wrap_content"-->
        <!--            android:visibility="visible"-->
        <!--            app:indicatorName="LineSpinFadeLoaderIndicator" />-->

        <!--        <TextView-->
        <!--            android:id="@+id/txt_loading_text"-->
        <!--            android:layout_width="wrap_content"-->
        <!--            android:layout_height="wrap_content"-->
        <!--            android:textColor="@color/white"-->
        <!--            android:layout_marginTop="20dp"-->
        <!--            android:visibility="gone"-->
        <!--            android:textSize="17dp"/>-->
    </LinearLayout>

</LinearLayout>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/strings.xml
================================================
<resources>
    <!--    <string name="app_name">WgllssCode</string>-->

    <!-- 异常错误提示  by Atar start -->
    <string name="ElseNetException">未知错误异常</string>
    <string name="SocketTimeoutException">网络超时</string>
    <string name="TimeoutException">网络超时</string>
    <string name="SocketException">网络错误</string>
    <string name="ConnectException">网络错误</string>
    <string name="HttpException">服务器异常</string>
    <string name="UnknownHostException">无网络连接</string>
    <string name="HostBaseUrlError">请求地址错误</string>
    <string name="Mobilenetuseless_msg">当前网络不可用</string>
    <string name="failed_to_connect_to">无法连接到服务器</string>
    <string name="JsonSyntaxException">数据错误,json解析错误</string>
    <!-- 异常错误提示  by end  -->

    <!-- 权限相关提示  by Atar start -->

    <string name="common_permission_hint">授权提示</string>
    <string name="common_permission_message">使用此功能需要先授予%s</string>
    <string name="common_permission_granted">授予</string>
    <string name="common_permission_denied">取消</string>

    <string name="common_permission_alert">授权提醒</string>
    <string name="common_permission_fail_hint">授权失败,请正确授予权限</string>
    <string name="common_permission_fail_assign_hint">授权失败,请正确授予%s</string>
    <string name="common_permission_manual_fail_hint">获取权限失败,请手动授予权限</string>
    <string name="common_permission_manual_assign_fail_hint">获取权限失败,请手动授予%s</string>
    <string name="common_permission_background_location_fail_hint">获取后台定位权限失败,\n请您选择《始终允许》</string>
    <string name="common_permission_background_sensors_fail_hint">获取后台传感器权限失败,\n请您选择《始终允许》</string>
    <string name="common_permission_media_location_hint_fail">获取媒体位置权限失败\n请清除应用数据后重试</string>
    <string name="common_permission_goto_setting_page">前往授权</string>

    <string name="common_permission_calendar">日历权限</string>
    <string name="common_permission_camera">相机权限</string>
    <string name="common_permission_contacts">通讯录权限</string>
    <string name="common_permission_location">定位权限</string>
    <string name="common_permission_location_background">后台定位权限</string>
    <string name="common_permission_wireless_devices">附近的设备权限</string>
    <string name="common_permission_microphone">麦克风权限</string>
    <string name="common_permission_phone">电话权限</string>
    <string name="common_permission_call_log">通话记录权限</string>
    <string name="common_permission_sensors">身体传感器权限</string>
    <string name="common_permission_sensors_background">后台身体传感器权限</string>
    <string name="common_permission_activity_recognition_29">健身运动权限</string>
    <string name="common_permission_activity_recognition_30">身体活动权限</string>
    <string name="common_permission_media_location">读取媒体文件位置权限</string>
    <string name="common_permission_sms">短信权限</string>
    <string name="common_permission_storage">存储权限</string>
    <string name="common_permission_post_notifications">发送通知权限</string>
    <string name="common_permission_image_and_video">照片和视频权限</string>
    <string name="common_permission_audio">音乐和音频权限</string>

    <string name="common_permission_manage_storage">所有文件访问权限</string>
    <string name="common_permission_install">安装应用权限</string>
    <string name="common_permission_window">悬浮窗权限</string>
    <string name="common_permission_setting">修改系统设置权限</string>
    <string name="common_permission_notification">通知权限</string>
    <string name="common_permission_notification_listener">通知栏监听权限</string>
    <string name="common_permission_task">查看使用情况权限</string>
    <string name="common_permission_alarm">查看闹钟提醒权限</string>
    <string name="common_permission_not_disturb">勿扰权限</string>
    <string name="common_permission_ignore_battery">忽略电池优化权限</string>
    <string name="common_permission_picture_in_picture">画中画权限</string>
    <string name="common_permission_vpn">\tVPN\t权限</string>

    <!-- 权限相关提示  by end -->
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/themes.xml
================================================
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->

    <style name="Loading" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <!-- 设置背景色 透明-->
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 设置是否显示背景 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 设置背景透明度 -->
        <item name="android:backgroundDimAmount">0</item>
        <!-- 设置点击空白不消失 -->
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/.gitignore
================================================
/build

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/build.gradle
================================================
plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
}

android {
    compileSdk libs.versions.compileSdk.get().toInteger()
    namespace "com.wgllss.host.library"

    defaultConfig {
        minSdkVersion libs.versions.minSdk.get().toInteger()
        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()
        versionCode 1
        versionName "1.0"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation project(path: ':wgllss-dynamic-host-skin-resource-lib')
    implementation project(path: ':wgllss-common-re-library')
    implementation project(path: ':wgllss-business-re-library')
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/consumer-rules.pro
================================================


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# 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 *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/androidTest/java/com/wgllss/host/library/ExampleInstrumentedTest.kt
================================================
package com.wgllss.host.library

import android.support.test.InstrumentationRegistry
import android.support.test.runner.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
 * Instrumented test, which will execute on an Android device.
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
    @Test
    fun useAppContext() {
        // Context of the app under test.
        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
        assertEquals("com.wgllss.host.library.test", appContext.packageName)
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wgllss.host.library">

    <application>

        <activity
            android:name="com.wgllss.dynamic.ui.HomeActivity"
            android:exported="true"
            android:theme="@style/LauncherTheme2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginStandardActivity"
            android:launchMode="standard"
            android:theme="@style/LauncherTheme2" />
        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginStandardComposeActivity"
            android:launchMode="standard"
            android:theme="@style/LauncherTheme2" />

        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceActivity"
            android:launchMode="singleInstance"
            android:theme="@style/LauncherTheme2" />
        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceComposeActivity"
            android:launchMode="singleInstance"
            android:theme="@style/LauncherTheme2" />
        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginSingleTaskActivity"
            android:launchMode="singleTask"
            android:theme="@style/LauncherTheme2" />
        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginSingleTaskComposeActivity"
            android:launchMode="singleInstance"
            android:theme="@style/LauncherTheme2" />
        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginSingleTopActivity"
            android:launchMode="singleTop"
            android:theme="@style/LauncherTheme2" />
        <activity
            android:name="com.wgllss.dynamic.plugin.runtime.PluginSingleTopComposeActivity"
            android:launchMode="singleInstance"
            android:theme="@style/LauncherTheme2" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginStartStickyService"
            android:enabled="true"
            android:exported="true" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginStartNotStickyService"
            android:enabled="true"
            android:exported="true" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginStartRedeliverIntentService"
            android:enabled="true"
            android:exported="true" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginStartStickyCompatibilityService"
            android:enabled="true"
            android:exported="true" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyService"
            android:enabled="true"
            android:exported="true"
            android:process=":processSticky" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginProcessStartNotStickyService"
            android:enabled="true"
            android:exported="true"
            android:process=":processNotSticky" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginProcessStartRedeliverIntentService"
            android:enabled="true"
            android:exported="true"
            android:process=":processRedeliver" />

        <service
            android:name="com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyCompatibilityService"
            android:enabled="true"
            android:exported="true"
            android:process=":processStickyCompatibility" />

    </application>

</manifest>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/test/java/com/wgllss/host/library/ExampleUnitTest.kt
================================================
package com.wgllss.host.library

import org.junit.Test

import org.junit.Assert.*

/**
 * Example local unit test, which will execute on the development machine (host).
 *
 * See [testing documentation](http://d.android.com/tools/testing).
 */
class ExampleUnitTest {
    @Test
    fun addition_isCorrect() {
        assertEquals(4, 2 + 2)
    }
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/.gitignore
================================================
/build

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/build.gradle
================================================
plugins {
    alias(libs.plugins.android.library)
}

android {
    compileSdk libs.versions.compileSdk.get().toInteger()
    namespace "com.wgllss.host.skin"

    defaultConfig {
        minSdkVersion libs.versions.minSdk.get().toInteger()
        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation libs.appcompat
    implementation libs.google.material
}

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# 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 *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wgllss.host.skin" />


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_pause_36.xml
================================================
<vector android:height="36dp" android:tint="#FFFFFF"
    android:viewportHeight="24" android:viewportWidth="24"
    android:width="36dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="@android:color/white" android:pathData="M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z"/>
</vector>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_play_arrow_36.xml
================================================
<vector android:height="36dp" android:tint="#FFFFFF"
    android:viewportHeight="24" android:viewportWidth="24"
    android:width="36dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="@android:color/white" android:pathData="M8,5v14l11,-7z"/>
</vector>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_next_36.xml
================================================
<vector android:height="36dp" android:tint="#FFFFFF"
    android:viewportHeight="24" android:viewportWidth="24"
    android:width="36dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="@android:color/white" android:pathData="M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z"/>
</vector>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_previous_36.xml
================================================
<vector android:height="36dp" android:tint="#FFFFFF"
    android:viewportHeight="24" android:viewportWidth="24"
    android:width="36dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="@android:color/white" android:pathData="M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z"/>
</vector>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/white"></item>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/icon_loading" />
    </item>

</layer-list>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview_dark.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/black"></item>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/icon_loading" />
    </item>

</layer-list>


================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="colorPrimary">#FF3300</color>
    <color name="colorOnPrimary">#FFFFFF</color>
    <color name="colorPrimaryDark">#005e91</color>
    <color name="textColorPrimary">#FF000000</color>

    <color name="colorBackground">#008e99</color>

</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/dimens.xml
================================================
<resources>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/ids.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/strings.xml
================================================
<resources>
    <string name="app_name">WXDynamicPlugin</string>


    <string name="duration_unknown">--:--</string>
    <string name="duration_format">%d:%02d</string>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/themes.xml
================================================
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.WXDynamicPlugin" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="android:textColorHighlight">@color/colorOnPrimary</item>
        <item name="android:colorBackground">@color/design_default_color_background</item>
        <item name="android:textColorPrimary">@color/black</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <!--        <item name="android:colorBackground">?colorSurface</item>-->
        <!--        <item name="android:statusBarColor">?colorSurface</item>-->
        <!--        <item name="android:windowLightStatusBar">true</item>-->
    </style>

    <style name="Theme.WXDynamicPlugin" parent="Base.Theme.WXDynamicPlugin">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowBackground">@color/white</item>
        <!--        <item name="android:windowAnimationStyle">@style/dialog_Animation_Translucent</item>-->
    </style>

    <style name="Loading" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <!-- 设置背景色 透明-->
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 设置是否显示背景 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 设置背景透明度 -->
        <item name="android:backgroundDimAmount">0</item>
        <!-- 设置点击空白不消失 -->
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>

    <style name="LauncherTheme" parent="android:Theme.NoTitleBar.Fullscreen">

        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@color/white</item>
    </style>

    <style name="LauncherTheme2" parent="Base.Theme.WXDynamicPlugin">
        <!--        该方式看不到启动页-->

        <item name="android:windowNoTitle">true</item>
        <!--        <item name="android:windowFullscreen">true</item>-->
        <item name="android:windowBackground">@drawable/splash_preview</item>

    </style>

    <style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
    </style>


    <style name="CircleStyle">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">50%</item>
    </style>

    <style name="RippleWhite80" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="android:colorControlHighlight">#FF4081</item>
        <!--        <item name="paddingStart">20dp</item>-->
        <!--        <item name="android:paddingTop">20dp</item>-->
        <item name="android:radius">20dp</item>
    </style>

    <style name="onTextOff" parent="Theme.WXDynamicPlugin">
        <item name="android:textColor">@color/white</item>
        <item name="android:textSize">16dp</item>
    </style>

    <style name="ssStyle" parent="Theme.WXDynamicPlugin">
        <item name="colorControlActivated">@color/colorPrimary</item>
        <item name="colorSwitchThumbNormal">#999999</item>
        <item name="android:colorForeground">@color/colorPrimaryDark</item>
    </style>

    <style name="TabLayout.TextAppearance" parent="TextAppearance.AppCompat">
        <!--        <item name="android:textStyle">nomal</item>-->
        <item name="android:textSize">20dp</item>
    </style>

</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="colorPrimary">#FF3300</color>
    <color name="colorOnPrimary">#B0B0B0</color>
    <color name="colorPrimaryDark">#007A00</color>
    <color name="colorBackground">#222222</color>
    <color name="textColorPrimary">#B0B0B0</color>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/themes.xml
================================================
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.WXDynamicPlugin" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <item name="colorPrimary">@color/colorPrimaryDark</item>
        <item name="android:textColorHighlight">@color/colorOnPrimary</item>
        <item name="android:colorBackground">@color/colorBackground</item>
        <item name="android:textColorPrimary">@color/textColorPrimary</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:statusBarColor">@color/black</item>
        <!--        <item name="android:colorBackground">?colorSurface</item>-->
        <!--        <item name="android:statusBarColor">?colorSurface</item>-->
        <!--        <item name="android:windowLightStatusBar">true</item>-->
    </style>

    <style name="Theme.WXDynamicPlugin" parent="Base.Theme.WXDynamicPlugin">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <!--        <item name="android:windowAnimationStyle">@style/dialog_Animation_Translucent</item>-->
    </style>

    <style name="Loading" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <!-- 设置背景色 透明-->
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 设置是否显示背景 -->
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 设置背景透明度 -->
        <item name="android:backgroundDimAmount">0</item>
        <!-- 设置点击空白不消失 -->
        <item name="android:windowCloseOnTouchOutside">false</item>
    </style>

    <style name="LauncherTheme" parent="android:Theme.NoTitleBar.Fullscreen">

        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@color/white</item>
    </style>

    <style name="LauncherTheme2" parent="Base.Theme.WXDynamicPlugin">
        <!--        该方式看不到启动页-->

        <item name="android:windowNoTitle">true</item>
        <!--        <item name="android:windowFullscreen">true</item>-->
        <item name="android:windowBackground">@drawable/splash_preview_dark</item>

    </style>

    <style name="Transparent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
    </style>


    <style name="CircleStyle">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">50%</item>
    </style>

    <style name="RippleWhite80" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="android:colorControlHighlight">#FF4081</item>
        <!--        <item name="paddingStart">20dp</item>-->
        <!--        <item name="android:paddingTop">20dp</item>-->
        <item name="android:radius">20dp</item>
    </style>

    <style name="onTextOff" parent="Theme.WXDynamicPlugin">
        <item name="android:textColor">@color/white</item>
        <item name="android:textSize">16dp</item>
    </style>

    <style name="ssStyle" parent="Theme.WXDynamicPlugin">
        <item name="colorControlActivated">@color/colorPrimaryDark</item>
        <item name="colorSwitchThumbNormal">#999999</item>
        <item name="android:colorForeground">@color/colorPrimary</item>
    </style>

    <style name="TabLayout.TextAppearance" parent="TextAppearance.AppCompat">
        <!--        <item name="android:textStyle">nomal</item>-->
        <item name="android:textSize">20dp</item>
    </style>
</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v27/themes.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="LauncherTheme2" parent="Base.Theme.WXDynamicPlugin">
        <item name="android:windowNoTitle">true</item>
<!--        <item name="android:windowFullscreen">true</item>-->
<!--        <item name="statusBarBackground">@color/colorPrimary</item>-->
        <item name="android:statusBarColor">@color/white</item>
        <item name="android:windowBackground">@drawable/splash_preview</item>
        <!--指定页面可以延伸到刘海(异性)区域  SDK_INT >= 28,兼容异形屏时用到-->
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>

</resources>

================================================
FILE: WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v29/themes.xml
================================================
<resources xmlns:tools="http://schemas.android.com/tools">

    <style name="Theme.WXDynamicPlugin" parent="Base.Theme.WXDynamicPlugin">
        <!-- Transparent system bars for edge-to-edge. -->
        <item name="android:navigationBarColor">@android:color/transparent</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowLightStatusBar">?attr/isLightTheme</item>
    </style>
</resources>

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/.gitignore
================================================
/build

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/build.gradle
================================================
plugins {
    alias(libs.plugins.android.library)
    alias(libs.plugins.jetbrains.kotlin.android)
    alias(libs.plugins.kotlin.kapt)
}

android {
    compileSdk libs.versions.compileSdk.get().toInteger()
    namespace "com.wgllss.core"

    defaultConfig {
        minSdkVersion libs.versions.minSdk.get().toInteger()
        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()
        versionCode 1008
        versionName "1.0.0.8"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    buildFeatures {
        buildConfig = true
        dataBinding = true
    }
    kapt {
        generateStubs = true
    }

    lintOptions {
        abortOnError false
    }
}

dependencies {
    compileOnly project(':wgllss-common-re-library')

    compileOnly libs.appcompat
    compileOnly libs.androidx.recyclerview
    compileOnly libs.google.material

    compileOnly libs.androidx.lifecycle.runtime.ktx
    compileOnly libs.androidx.lifecycle.livedata.ktx
    compileOnly libs.androidx.lifecycle.viewmodel.ktx
    compileOnly libs.androidx.activity.ktx
    compileOnly libs.androidx.fragment.ktx

    compileOnly libs.androidx.core.ktx
    compileOnly libs.swiperefreshlayout

    compileOnly libs.androidx.navigation.fragment.ktx
    compileOnly libs.androidx.navigation.ui.ktx
    compileOnly libs.glide
    kapt libs.glide.compiler

    //compose
    compileOnly libs.androidx.activity.compose
}


def createCopyTask(buildType) {
    def workingDirPath = rootProject.ext.workingDirPath
    def outputFile = file("${workingDirPath}classes_common_lib.jar")
    def outputDexFile = file("${workingDirPath}classes_common_lib_dex.jar")
    def lastOutputDexFile = file("${rootProject.getBuildDir()}/classes_common_lib_dex")
    if (lastOutputDexFile.exists()) {
        lastOutputDexFile.delete()
    }
    if (outputDexFile.exists()) {
        outputDexFile.delete()
    }
    if (outputFile.exists()) {
        outputFile.delete()
    }
    def inputFile = file("${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar")
    def copyTask = tasks.create("assembleCopy${buildType.capitalize()}", Copy) {
        group = 'other'
        description = "复制${name}到dx环境中."
        from(inputFile.getParent()) {
            include(inputFile.name)
            rename { outputFile.name }
        }
        into(outputFile.getParent())
    }.dependsOn("assemble${buildType.capitalize()}")

    def assembleDxCommand = tasks.create("assembleDxCommand", Exec) {
        group = 'other'
        description = "${name}到dx执行中..."
        workingDir workingDirPath
        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
            it.commandLine 'cmd', '/c', "d8 --release --output ${outputDexFile.name} ${outputFile.name}"
        } else {
            it.commandLine 'bash', '-c', "d8 --release --output ${outputDexFile.name} ${outputFile.name}"
        }
//        it.commandLine 'cmd', "/c", "d8 --output ${outputDexFile.name} ${outputFile.name}"
    }.dependsOn(copyTask.name)

    return tasks.create("assembleDxCommandAndCopy") {
        doLast {
            copy {
                from(outputDexFile.getParent()) {
                    include(outputDexFile.name)
                    rename { lastOutputDexFile.name }
                }
                into(lastOutputDexFile.getParent())
            }
        }
    }.dependsOn(assembleDxCommand.name)
}

tasks.whenTaskAdded { task ->
//    if (task.name == "assembleDebug") {
//        createCopyTask("Debug")
//    }
    if (task.name == "assembleRelease") {
        createCopyTask("Release")
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# 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 *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/AndroidManifest.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.wgllss.core">

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseActivity.kt
================================================
package com.wgllss.core.activity

import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.annotation.Nullable
import androidx.compose.runtime.Composable
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.ViewModelStore
import com.wgllss.core.dialog.CommonLoadingView
import com.wgllss.core.ex.finishActivity
import com.wgllss.core.units.StatusBarUtil
import com.wgllss.core.widget.CommonToast

abstract class BaseActivity : FragmentActivity() {
    private var loading: CommonLoadingView? = null
    private var initFlag = false
    open fun hasNavigationBarStatusBarTranslucent() = true

    override fun onCreate(savedInstanceState: Bundle?) {
        if (hasNavigationBarStatusBarTranslucent()) StatusBarUtil.setStatusBarTranslucent(this)
        beforeSuperOnCreate(savedInstanceState);
        super.onCreate(savedInstanceState)
        initX(savedInstanceState)
    }

    protected open fun initX(savedInstanceState: Bundle?) {
        initControl(savedInstanceState)
        bindEvent()
        initValue()
    }

    override fun onWindowFocusChanged(hasFocus: Boolean) {
        super.onWindowFocusChanged(hasFocus)
        if (hasFocus) {
            if (!initFlag) {
                initFlag = true
                lazyInitValue()
            }
        }
    }

    fun onToast(content: String) {
        CommonToast.show(content);
    }

    //是否loading
    open fun isShowloading(): Boolean? {
        return loading?.isShowing()
    }

    open fun showloading(showText: String?) {
        if (null == loading) loading = CommonLoadingView(this)
        if (isShowloading() == true) return
        if (showText != null) loading?.show(showText)
    }

    open fun hideLoading() {
        loading?.dismiss()
        loading = null
    }

    override fun onDestroy() {
        hideLoading()
        super.onDestroy()
    }

    override fun onBackPressed() {
        super.onBackPressed()
        finishActivity()
    }

    open fun beforeSuperOnCreate(savedInstanceState: Bundle?) {}
    open abstract fun initControl(savedInstanceState: Bundle?)
    open abstract fun bindEvent()
    open abstract fun initValue()
    open fun lazyInitValue() {}


    private var exitTime: Long = 0

    protected open fun exitApp() {
        if (System.currentTimeMillis() - exitTime > 2000) {
            onToast("再按一次退出程序")
            exitTime = System.currentTimeMillis()
        } else {
            WActivityManager.exitApplication()
        }
    }

}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseMVVMActivity.kt
================================================
package com.wgllss.core.activity

import android.os.Bundle
import androidx.annotation.LayoutRes
import androidx.annotation.MainThread
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelLazy
import com.wgllss.core.units.WLog
import com.wgllss.core.viewmodel.BaseViewModel
import java.lang.reflect.ParameterizedType
import kotlin.system.measureTimeMillis

/**
 * contentLayoutId 不传给父类,否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次
 * 父类里面ComponentActivity还要设置一次 共2次 见下
 *
 *
 * @Override
 * protected void onCreate(@Nullable Bundle savedInstanceState) {
 *     // Restore the Saved State first so that it is available to
 *     // OnContextAvailableListener instances
 *    mSavedStateRegistryController.performRestore(savedInstanceState);
 *    mContextAwareHelper.dispatchOnContextAvailable(this);
 *    super.onCreate(savedInstanceState);
 *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);
 *    ReportFragment.injectIfNeededIn(this);
 *    if (mContentLayoutId != 0) {
 *      setContentView(mContentLayoutId);
 *    }
 *  }
 */
abstract class BaseMVVMActivity<VM : BaseViewModel, VB : ViewDataBinding>(@LayoutRes private val contentLayoutId: Int) : BaseActivity() {

    protected val viewModel by lazyViewModels()
    protected lateinit var binding: VB


    override fun initControl(savedInstanceState: Bundle?) {
        val time = measureTimeMillis {
            binding = DataBindingUtil.setContentView(this, contentLayoutId)
            binding.lifecycleOwner = this@BaseMVVMActivity
        }
        WLog.e(this, "time:${time}")
    }

    override fun bindEvent() {
        viewModel?.run {
            showUIDialog.observe(this@BaseMVVMActivity, Observer { it ->
                if (it.isShow) showloading(it.msg) else hideLoading()
            })
            errorMsgLiveData.observe(this@BaseMVVMActivity, Observer {
                onToast(it)
            })
        }
    }

    override fun initValue() {
    }


    @MainThread
    inline fun lazyViewModels(): Lazy<VM> {
        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>
        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModePluginActivity.kt
================================================
package com.wgllss.core.activity

import android.os.Bundle
import androidx.annotation.MainThread
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelLazy
import com.wgllss.core.units.ResourceUtils
import com.wgllss.core.viewmodel.BaseViewModel
import java.lang.reflect.ParameterizedType

/**
 * contentLayoutId 不传给父类,否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次
 * 父类里面ComponentActivity还要设置一次 共2次 见下
 *
 *
 * @Override
 * protected void onCreate(@Nullable Bundle savedInstanceState) {
 *     // Restore the Saved State first so that it is available to
 *     // OnContextAvailableListener instances
 *    mSavedStateRegistryController.performRestore(savedInstanceState);
 *    mContextAwareHelper.dispatchOnContextAvailable(this);
 *    super.onCreate(savedInstanceState);
 *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);
 *    ReportFragment.injectIfNeededIn(this);
 *    if (mContentLayoutId != 0) {
 *      setContentView(mContentLayoutId);
 *    }
 *  }
 */
abstract class BaseViewModePluginActivity<VM : BaseViewModel>(protected val layoutName: String, packageNamePlugin: String) : BaseViewPluginResActivity(packageNamePlugin) {

    protected val viewModel by lazyViewModels()

    override fun initControl(savedInstanceState: Bundle?) {
        ResourceUtils.setContentLayout(this, resourcesPlugin, layoutName, packageNamePlugin)
    }

    override fun bindEvent() {
        viewModel?.run {
            showUIDialog.observe(this@BaseViewModePluginActivity, Observer { it ->
                if (it.isShow) showloading(it.msg) else hideLoading()
            })
            errorMsgLiveData.observe(this@BaseViewModePluginActivity, Observer {
                onToast(it)
            })
        }
    }

    override fun initValue() {
    }


    @MainThread
    inline fun lazyViewModels(): Lazy<VM> {
        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>
        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelActivity.kt
================================================
package com.wgllss.core.activity

import android.os.Bundle
import androidx.annotation.MainThread
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelLazy
import com.wgllss.core.viewmodel.BaseViewModel
import java.lang.reflect.ParameterizedType

/**
 * contentLayoutId 不传给父类,否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次
 * 父类里面ComponentActivity还要设置一次 共2次 见下
 *
 *
 * @Override
 * protected void onCreate(@Nullable Bundle savedInstanceState) {
 *     // Restore the Saved State first so that it is available to
 *     // OnContextAvailableListener instances
 *    mSavedStateRegistryController.performRestore(savedInstanceState);
 *    mContextAwareHelper.dispatchOnContextAvailable(this);
 *    super.onCreate(savedInstanceState);
 *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);
 *    ReportFragment.injectIfNeededIn(this);
 *    if (mContentLayoutId != 0) {
 *      setContentView(mContentLayoutId);
 *    }
 *  }
 */
abstract class BaseViewModelActivity<VM : BaseViewModel>(packageNamePlugin: String) : BaseViewPluginResActivity(packageNamePlugin) {

    protected val viewModel by lazyViewModels()

    override fun bindEvent() {
        viewModel?.run {
            showUIDialog.observe(this@BaseViewModelActivity, Observer { it ->
                if (it.isShow) showloading(it.msg) else hideLoading()
            })
            errorMsgLiveData.observe(this@BaseViewModelActivity, Observer {
                onToast(it)
            })
        }
    }

    override fun initValue() {
    }


    @MainThread
    inline fun lazyViewModels(): Lazy<VM> {
        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>
        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelClassActivity.kt
================================================
package com.wgllss.core.activity

import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import com.wgllss.core.viewmodel.BaseViewModel

/**
 * contentLayoutId 不传给父类,否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次
 * 父类里面ComponentActivity还要设置一次 共2次 见下
 *
 *
 * @Override
 * protected void onCreate(@Nullable Bundle savedInstanceState) {
 *     // Restore the Saved State first so that it is available to
 *     // OnContextAvailableListener instances
 *    mSavedStateRegistryController.performRestore(savedInstanceState);
 *    mContextAwareHelper.dispatchOnContextAvailable(this);
 *    super.onCreate(savedInstanceState);
 *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);
 *    ReportFragment.injectIfNeededIn(this);
 *    if (mContentLayoutId != 0) {
 *      setContentView(mContentLayoutId);
 *    }
 *  }
 */
abstract class BaseViewModelClassActivity : BaseActivity() {

    val viewModel by lazy { ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(getViewModelClass()) }

    override fun bindEvent() {
        viewModel?.run {
            showUIDialog.observe(this@BaseViewModelClassActivity, Observer { it ->
                if (it.isShow) showloading(it.msg) else hideLoading()
            })
            errorMsgLiveData.observe(this@BaseViewModelClassActivity, Observer {
                onToast(it)
            })
        }
    }

    override fun initValue() {
    }

    open abstract fun getViewModelClass(): Class<out BaseViewModel>

}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewPluginResActivity.kt
================================================
package com.wgllss.core.activity

import android.content.Context
import android.content.res.Resources
import android.graphics.drawable.Drawable
import com.wgllss.core.fragment.BasePluginResFragment
import com.wgllss.core.units.ResourceUtils

/**
 * contentLayoutId 不传给父类,否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次
 * 父类里面ComponentActivity还要设置一次 共2次 见下
 *
 *
 * @Override
 * protected void onCreate(@Nullable Bundle savedInstanceState) {
 *     // Restore the Saved State first so that it is available to
 *     // OnContextAvailableListener instances
 *    mSavedStateRegistryController.performRestore(savedInstanceState);
 *    mContextAwareHelper.dispatchOnContextAvailable(this);
 *    super.onCreate(savedInstanceState);
 *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);
 *    ReportFragment.injectIfNeededIn(this);
 *    if (mContentLayoutId != 0) {
 *      setContentView(mContentLayoutId);
 *    }
 *  }
 */
abstract class BaseViewPluginResActivity(protected val packageNamePlugin: String) : BaseActivity() {

    protected lateinit var resourcesPlugin: Resources

    override fun attachBaseContext(newBase: Context) {
        super.attachBaseContext(newBase)
        getPluginResources()?.let {
            resourcesPlugin = it
        }
    }

    override fun onStart() {
        super.onStart()
        onChangeSkin(getSkinResources())
    }

    abstract fun getSkinResources(): Resources

    abstract fun getPluginResources(): Resources?

    protected fun getPluginDrawable(resName: String): Drawable = ResourceUtils.getPluginDrawable(resourcesPlugin, resName, packageNamePlugin)

    protected fun getPluginDrawable(skinRes: Resources, resName: String, skinPackageName: String): Drawable = ResourceUtils.getPluginDrawable(skinRes, resName, skinPackageName)

    protected fun getPluginID(resName: String) = ResourceUtils.getPluginID(resourcesPlugin, resName, packageNamePlugin)

    protected fun getPluginID(skinRes: Resources, resName: String, skinPackageName: String) = ResourceUtils.getPluginID(skinRes, resName, skinPackageName)

    open fun onChangeSkin(skinRes: Resources) {

    }

    open fun callChangeSkin(skinRes: Resources) {
        onChangeSkin(skinRes)
        supportFragmentManager.fragments.forEach {
            if (it.isAdded && it is BasePluginResFragment) {
                it.callChangeSkin(skinRes)
            }
        }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/WActivityManager.kt
================================================
package com.wgllss.core.activity

import android.app.Activity
import android.os.Process
import com.wgllss.core.ex.finishActivity
import java.lang.reflect.Field
import java.lang.reflect.Method

object WActivityManager {

    fun getActivitys(block: (it: Activity) -> Any) {
        try {
            val activityThread = Class.forName("android.app.ActivityThread")
            val currentActivityThread: Method = activityThread.getDeclaredMethod("currentActivityThread")
            currentActivityThread.isAccessible = true
            //获取主线程对象
            val activityThreadObject: Any = currentActivityThread.invoke(null)
            val mActivitiesField: Field = activityThread.getDeclaredField("mActivities")
            mActivitiesField.isAccessible = true
            val mActivities = mActivitiesField[activityThreadObject] as Map<Any, Any>
            mActivities.forEach {
                val activityClientRecordClass: Class<*> = it.value.javaClass
                val activityField = activityClientRecordClass.getDeclaredField("activity")
                activityField.isAccessible = true
                activityField[it.value]?.let {
                    block.invoke(it as Activity)
                }
            }
        } catch (e: java.lang.Exception) {
            e.printStackTrace()
        }
    }

    fun popAllActivity() {
        getActivitys() {
            it.finishActivity()
        }
    }


    fun exitApplication() {
        object : Thread() {
            override fun run() {
                super.run()
                popAllActivity()
                Process.killProcess(Process.myPid())
                System.exit(0) // 常规java、c#的标准退出法,返回值为0代表正常退出
            }
        }.start()
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/compose/BaseComposeActivity.kt
================================================
package com.wgllss.core.activity.compose

import androidx.activity.ComponentActivity


open class BaseComposeActivity : ComponentActivity(){



}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePagerAdapter.kt
================================================
package com.wgllss.core.adapter

import android.view.View
import android.view.ViewGroup
import androidx.viewpager.widget.PagerAdapter

class BasePagerAdapter(val mViews: MutableList<View>) : PagerAdapter() {
    override fun getCount() = mViews?.size ?: 0

    override fun isViewFromObject(view: View, obj: Any) = view === obj

    override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
        mViews?.takeIf { it.size > 0 }?.let { container.removeView(it[position]) }
    }

    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        container.addView(mViews[position])
        return mViews[position]
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePluginRecyclerAdapter.kt
================================================
package com.wgllss.core.adapter

import android.content.Context
import android.content.res.Resources
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView

abstract class BasePluginRecyclerAdapter<T>(protected val re: Resources, private val packageName: String) : RecyclerView.Adapter<BasePluginRecyclerAdapter.BaseBindingViewHolder>() {

    var context: Context? = null
    protected lateinit var mData: MutableList<T>
    lateinit var skinRes: Resources

    fun notifyData(mData: MutableList<T>, skinRes: Resources) {
        if (mData == null) {
            this.mData = mutableListOf()
        } else {
            this.mData = mData
        }
        this.skinRes = skinRes
        notifyDataSetChanged()
    }

    fun notifySkinRes(skinRes: Resources) {
        this.skinRes = skinRes
        notifyDataSetChanged()
    }

    fun removeItem(position: Int) {
        mData?.takeIf {
            it.size > position
        }?.run {
            removeAt(position)
            notifyDataSetChanged()
        }
    }

    fun clearList() {
        mData?.run {
            clear()
            notifyDataSetChanged()
        }
    }

    override fun getItemCount(): Int = if (!this::mData.isInitialized) 0 else mData.size

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    fun getItem(position: Int): T = mData[position]

    protected abstract fun getLayoutResIdName(viewType: Int): String

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {
        if (context == null) {
            context = parent.context
        }
        val layoutID = re.getIdentifier(getLayoutResIdName(viewType), "layout", packageName)
        val xmlResourceParser = re.getLayout(layoutID)
        val view = LayoutInflater.from(context).inflate(xmlResourceParser, parent, false)
        return BaseBindingViewHolder(view)
    }

    override fun onBindViewHolder(holder: BaseBindingViewHolder, position: Int) {
        val item = getItem(position)
        onBindItem(context!!, item, holder, position)
    }

    fun <T : View> findViewByID(contentView: View, resourcesPlugin: Resources, IDResName: String): T {
        val ID = resourcesPlugin.getIdentifier(IDResName, "id", packageName)
        return contentView.findViewById(ID)
    }

    fun getPluginColorID(IDResName: String): Int {
        val ID = re.getIdentifier(IDResName, "color", packageName)
        return ID
    }

    fun getPluginColor(IDResName: String): Int {
        return re.getColor(getPluginColorID(IDResName))
    }

    fun getPluginColor(re: Resources, IDResName: String, packageName: String): Int {
        return re.getColor(getPluginColorID(re, IDResName, packageName))
    }

    fun getPluginColorID(re: Resources, IDResName: String, packageName: String): Int {
        val ID = re.getIdentifier(IDResName, "color", packageName)
        return ID
    }

    protected abstract fun onBindItem(context: Context, item: T, holder: RecyclerView.ViewHolder, position: Int)

    class BaseBindingViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView)
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BaseRecyclerAdapter.kt
================================================
package com.wgllss.core.adapter

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
import androidx.recyclerview.widget.RecyclerView


abstract class BaseRecyclerAdapter<T> : RecyclerView.Adapter<BaseRecyclerAdapter.BaseBindingViewHolder>() {
    var context: Context? = null
    private lateinit var mData: MutableList<T>

    fun notifyData(mData: MutableList<T>) {
        if (mData == null) {
            this.mData = mutableListOf()
        } else {
            this.mData = mData
        }
        notifyDataSetChanged()
    }

    fun removeItem(position: Int) {
        mData?.takeIf {
            it.size > position
        }?.run {
            removeAt(position)
            notifyDataSetChanged()
        }
    }

    fun clearList() {
        mData?.run {
            clear()
            notifyDataSetChanged()
        }
    }

    override fun getItemCount(): Int = if (!this::mData.isInitialized) 0 else mData.size

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    fun getItem(position: Int): T = mData[position]

    override fun onBindViewHolder(holder: BaseBindingViewHolder, position: Int) {
        val item = getItem(position)
        onBindItem(context!!, item, holder, position)
    }

    protected abstract fun onBindItem(context: Context, item: T, holder: RecyclerView.ViewHolder, position: Int)

    class BaseBindingViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView)
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/ViewPage2ChildFragmentAdapter.kt
================================================
package com.wgllss.core.adapter

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.Lifecycle
import androidx.viewpager2.adapter.FragmentStateAdapter

class ViewPage2ChildFragmentAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifecycle) {
    lateinit var list: MutableList<Fragment>

    fun notifyData(mData: MutableList<Fragment>) {
        if (mData == null) {
            list = mutableListOf()
        } else {
            this.list = mData
        }
        notifyDataSetChanged()
    }

    override fun getItemCount() = if (!this::list.isInitialized) 0 else list.size

    override fun createFragment(position: Int) = list[position]
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/data/DialogBean.kt
================================================
package com.wgllss.core.data

data class DialogBean(var msg:String, var isShow:Boolean){
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Context.kt
================================================
package com.wgllss.core.ex

import android.app.Activity
import android.app.ActivityManager
import android.content.Context
import android.graphics.Rect
import android.os.Process
import android.util.DisplayMetrics
import android.util.Log
import android.util.TypedValue
import android.view.WindowManager
import androidx.annotation.StyleRes
import androidx.appcompat.view.ContextThemeWrapper
import java.lang.reflect.Field


fun Context.toTheme(@StyleRes style: Int) = ContextThemeWrapper(this, style)

fun Context.dpToPx(dp: Float) = dp * resources.displayMetrics.density

fun Context.pxToDp(px: Float) = px / resources.displayMetrics.density

fun Context.dp2px(dipValue: Float) = (dipValue * resources.displayMetrics.density + 0.5f).toInt()

fun Context.dpToPxInt(dp: Float) = (dpToPx(dp) + 0.5f).toInt().toFloat()

fun Context.pxToDpCeilInt(px: Float) = (pxToDp(px) + 0.5f).toInt().toFloat()

fun Context.getIntToDip(intSize: Float) = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, intSize, resources.displayMetrics)

fun Activity.getStatusHight() = window.decorView.getWindowVisibleDisplayFrame(Rect())

/**
 * 得到状态栏高度
 *
 * @return
 */
fun Activity.getStatusBarHeight(): Int {
    /*
     * 方法一,荣耀3c无效 Rect frame = new Rect(); act.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; return statusBarHeight;
     */

    /*
     * 方法二,荣耀3c无效 Rect rectgle= new Rect(); Window window= act.getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rectgle); int StatusBarHeight= rectgle.top; int contentViewTop=
     * window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int statusBar = contentViewTop - StatusBarHeight; return statusBar;
     */
    // 方法三,荣耀3c有效
    var c: Class<*>? = null
    var obj: Any? = null
    var field: Field? = null
    var x = 0
    var sbar = 0
    try {
        c = Class.forName("com.android.internal.R\$dimen")
        obj = c.newInstance()
        field = c.getField("status_bar_height")
        x = field[obj].toString().toInt()
        sbar = resources.getDimensionPixelSize(x)
        return sbar
    } catch (e1: Exception) {
        e1.printStackTrace()
    }
    return 0
}

fun Activity.getDensity(): Float {
    val dm = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(dm)
    val density: Float = dm.density//屏幕的密度density
    return density
}

fun Activity.getDensityDpi(): Int {
    val dm = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(dm)
    val density: Int = dm.densityDpi//屏幕的密度density
    return density
}


/**
 * 获得屏幕宽度
 *
 * @param context
 * @return
 */
fun Context.getScreenWidth(): Int {
    val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val outMetrics = DisplayMetrics()
    wm.defaultDisplay.getMetrics(outMetrics)
    return outMetrics.widthPixels
}

/**
 * 获得屏幕高度
 *
 * @param context
 * @return
 */
fun Context.getScreenHeight(): Int {
    val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager
    val outMetrics = DisplayMetrics()
    wm.defaultDisplay.getMetrics(outMetrics)
    return outMetrics.heightPixels
}


//获取底部导航栏高度
fun Activity.getNavigationBarHeight(): Int {
    val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android")
    return resources.getDimensionPixelSize(resourceId)
}

fun Context.isUIProcess(): Boolean {
    try {
        val am: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        val processInfos: List<ActivityManager.RunningAppProcessInfo> = am.runningAppProcesses
        val mainProcessName: String = packageName
        val myPid = Process.myPid()
        for (info in processInfos) {
            if (info.pid === myPid && mainProcessName == info.processName) {
                return true
            }
        }
    } catch (e: Exception) {
        e.printStackTrace()
    }
    return false
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Fragment.kt
================================================
package com.wgllss.core.ex

import android.content.Context
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.annotation.IdRes
import androidx.fragment.app.Fragment

fun Fragment.switchFragment(fragment: Fragment, mCurrentFragmentTAG: StringBuilder?, @IdRes idRes: Int) {
    if (mCurrentFragmentTAG == null || fragment.javaClass.simpleName !== mCurrentFragmentTAG.toString()) {
        childFragmentManager.apply {
            val f = findFragmentByTag(mCurrentFragmentTAG.toString())
            beginTransaction()?.let {
                f?.let { f -> it.hide(f) }
                fragment?.apply {
                    if (!isAdded) {
                        userVisibleHint = true;
                        it.add(idRes, this, javaClass.simpleName).show(this)
                    } else {
                        it.show(this)
                    }
                }
                it.commitAllowingStateLoss()
            }
        }
    }
}

fun Fragment.setFramgment(fragment: Fragment, layoutID: Int) {
    childFragmentManager.beginTransaction()?.let {
        fragment?.apply {
            if (!isAdded) {
                userVisibleHint = true;
                it.add(layoutID, this, javaClass.simpleName).show(this)
            } else {
                it.show(this)
            }
        }
        it.commitAllowingStateLoss()
    }
}

fun Fragment.HideSoftInputFromWindow(v: View) {
    (activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)?.hideSoftInputFromWindow(v.windowToken, 0); //强制隐藏键盘
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/FragmentActivity.kt
================================================
package com.wgllss.core.ex

import android.content.Context
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import androidx.activity.ComponentActivity
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.IdRes
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity


fun FragmentActivity.switchFragment(fragment: Fragment, mCurrentFragmentTAG: StringBuilder?, @IdRes idRes: Int) {
    if (mCurrentFragmentTAG == null || fragment.javaClass.simpleName !== mCurrentFragmentTAG.toString()) {
        supportFragmentManager.apply {
            val f = findFragmentByTag(mCurrentFragmentTAG.toString())
            beginTransaction()?.let {
                f?.let { f -> it.hide(f) }
                fragment?.apply {
                    if (!isAdded) {
                        userVisibleHint = true;
                        it.add(idRes, this, javaClass.simpleName).show(this)
                    } else {
                        it.show(this)
                    }
                }
                it.commitAllowingStateLoss()
            }
        }
    }
}

fun FragmentActivity.setFramgment(fragment: Fragment, layoutID: Int) {
    supportFragmentManager.beginTransaction()?.let {
        fragment?.apply {
            if (!isAdded) {
                userVisibleHint = true;
                it.add(layoutID, this, javaClass.simpleName).show(this)
            } else {
                it.show(this)
            }
        }
        it.commitAllowingStateLoss()
    }
}

fun FragmentActivity.hideSoftInputFromWindow(v: View) {
    (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)?.hideSoftInputFromWindow(v.windowToken, 0); //强制隐藏键盘
}

fun FragmentActivity.setFullScreen() {
    window.apply {
        addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
        decorView.systemUiVisibility = (
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                )
    }
}

fun ComponentActivity.registerForActivityResultPermissionsLaunch(permission: Array<String>, blockPerSuccess: () -> Unit, blockPerFail: () -> Unit = {}) {
    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { it ->
        var successCount = 0
        it.forEach { k, v ->
            if (k != null && v) {
                successCount++
            }
        }
        if (successCount == permission.size) {
            blockPerSuccess()
        } else {
            blockPerFail()
        }
    }.launch(permission)
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ImageView.kt
================================================
package com.wgllss.core.ex

import android.widget.ImageView
import com.bumptech.glide.Glide

fun ImageView.loadUrl(url: String) {
    Glide.with(context).load(url).into(this)
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/SwipeRefreshLayout.kt
================================================
package com.wgllss.core.ex

import androidx.swiperefreshlayout.widget.SwipeRefreshLayout

fun SwipeRefreshLayout.initColors() {
    setColorSchemeResources(
        android.R.color.holo_purple, android.R.color.holo_red_light,
        android.R.color.holo_orange_light, android.R.color.holo_green_light
    )
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ViewModel.kt
================================================
package com.wgllss.core.ex

import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.launch


fun <T> ViewModel.flowAsyncWorkOnLaunch(flowAsyncWork: suspend () -> Flow<T>) {
    viewModelScope.launch {
        flowAsyncWork.invoke().flowOnIOAndCatchAAndCollect()
    }
}





================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseFragment.kt
================================================
package com.wgllss.core.fragment

import androidx.annotation.LayoutRes
import androidx.fragment.app.Fragment
import com.wgllss.core.activity.BaseActivity
import com.wgllss.core.widget.CommonToast

open class BaseFragment(@LayoutRes private val contentLayoutId: Int) : Fragment(contentLayoutId) {

    fun onToast(toastContent: String?) {
        CommonToast.show(toastContent)
    }

    fun showloading() {
        showloading("请稍候...")
    }

    //是否loading
    protected fun isShowloading(): Boolean? {
        return if (activity != null && activity is BaseActivity)
            (activity as BaseActivity)?.isShowloading()
        else false
    }

    fun showloading(showText: String?) {
        if (activity != null && activity is BaseActivity) {
            (activity as BaseActivity?)?.showloading(showText)
        }
    }

    fun hideLoading() {
        if (activity != null && activity is BaseActivity) {
            (activity as BaseActivity?)?.hideLoading()
        }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BasePluginResFragment.kt
================================================
package com.wgllss.core.fragment

import android.content.Context
import android.content.res.Resources
import android.view.View
import com.wgllss.core.units.ResourceUtils

abstract class BasePluginResFragment(protected val packageName: String) : BaseFragment(0) {

    protected lateinit var resourcesPlugin: Resources

    override fun onAttach(context: Context) {
        super.onAttach(context)
        getPluginResources()?.let {
            resourcesPlugin = it
        }
    }

    override fun onStart() {
        super.onStart()
        onChangeSkin(getSkinResources())
    }

    abstract fun getPluginResources(): Resources?

    abstract fun getSkinResources(): Resources

    fun <T : View> findViewByID(contentView: View, IDResName: String): T = contentView.findViewById(ResourceUtils.getPluginID(resourcesPlugin, IDResName, packageName))

    protected fun getPluginID(resName: String) = ResourceUtils.getPluginID(resourcesPlugin, resName, packageName)

    protected fun getSkinPluginID(resName: String) = ResourceUtils.getPluginID(getSkinResources(), resName, packageName)

    protected fun getPluginID(resources: Resources, resName: String) = ResourceUtils.getPluginID(resources, resName, packageName)

    open fun onChangeSkin(skinRes: Resources) {

    }

    open fun callChangeSkin(skinRes: Resources) {
        onChangeSkin(skinRes)
        childFragmentManager.fragments.forEach {
            if (it.isAdded && it is BasePluginResFragment) {
                it.callChangeSkin(skinRes)
            }
        }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelClassFragment.kt
================================================
package com.wgllss.core.fragment

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.annotation.LayoutRes
import androidx.annotation.MainThread
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelLazy
import androidx.lifecycle.ViewModelProvider
import com.wgllss.core.viewmodel.BaseViewModel
import java.lang.reflect.ParameterizedType

open class BaseViewModelClassFragment<VM : BaseViewModel>(@LayoutRes private val contentLayoutId: Int) : BaseFragment(contentLayoutId) {
    protected lateinit var viewModel: VM

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        activity?.let {
            viewModel = lazyViewModels(it)
            initObserve()
        }
    }

    /**
     * activity 和 fragmnet 是否公用同一个viewModel
     */
    protected open fun activitySameViewModel() = false

    @MainThread
    private fun lazyViewModels(activity: ComponentActivity): VM {
        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>
        return if (activitySameViewModel()) {
            ViewModelProvider(activity.viewModelStore, activity.defaultViewModelProviderFactory).get(cls)
        } else {
            ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(cls)
        }
    }

    /**
     * 监听当前ViewModel中 showDialog和error的值
     */
    protected open fun initObserve() {
        if (!activitySameViewModel())
            viewModel?.run {
                showUIDialog.observe(viewLifecycleOwner, Observer { it ->
                    if (it.isShow) showloading(it.msg) else hideLoading()
                })
                errorMsgLiveData.observe(viewLifecycleOwner, Observer {
                    onToast(it)
                })
            }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelFragment.kt
================================================
package com.wgllss.core.fragment

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.annotation.LayoutRes
import androidx.annotation.MainThread
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelLazy
import com.wgllss.core.viewmodel.BaseViewModel
import java.lang.reflect.ParameterizedType

abstract class BaseViewModelFragment<VM : BaseViewModel>(packageName: String) : BasePluginResFragment(packageName) {
    protected lateinit var viewModel: VM

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        activity?.let {
            viewModel = lazyViewModels(it).value
            initObserve()
        }
    }

    /**
     * activity 和 fragmnet 是否公用同一个viewModel
     */
    protected open fun activitySameViewModel() = false

    @MainThread
    private fun lazyViewModels(activity: ComponentActivity): Lazy<VM> {
        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>
        return if (activitySameViewModel()) ViewModelLazy(cls.kotlin, { activity.viewModelStore }, { activity.defaultViewModelProviderFactory })
        else ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })
    }

    /**
     * 监听当前ViewModel中 showDialog和error的值
     */
    protected open fun initObserve() {
        if (!activitySameViewModel())
            viewModel?.run {
                showUIDialog.observe(viewLifecycleOwner, Observer { it ->
                    if (it.isShow) showloading(it.msg) else hideLoading()
                })
                errorMsgLiveData.observe(viewLifecycleOwner, Observer {
                    onToast(it)
                })
            }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelPluginFragment.kt
================================================
package com.wgllss.core.fragment

import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.activity.ComponentActivity
import androidx.annotation.MainThread
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelLazy
import com.wgllss.core.units.ResourceUtils
import com.wgllss.core.viewmodel.BaseViewModel
import java.lang.reflect.ParameterizedType

abstract class BaseViewModelPluginFragment<VM : BaseViewModel>(private val layoutName: String, packageName: String) : BasePluginResFragment(packageName) {
    protected lateinit var containerView: View
    protected lateinit var viewModel: VM

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        if (!this::containerView.isInitialized) {
            resourcesPlugin.run {
                val layoutID = getIdentifier(layoutName, "layout", packageName)
                val xmlResourceParser = getLayout(layoutID)
                containerView = LayoutInflater.from(inflater.context).inflate(xmlResourceParser, container, false)
                findView(inflater.context, containerView)
            }
        }
        return containerView
    }

    open fun findView(context: Context, containerView: View) {

    }

    fun <T : View> findViewByID(IDResName: String): T = containerView.findViewById(ResourceUtils.getPluginID(resourcesPlugin, IDResName, packageName))

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        activity?.let {
            viewModel = lazyViewModels(it).value
            initObserve()
        }
    }

    /**
     * activity 和 fragmnet 是否公用同一个viewModel
     */
    protected open fun activitySameViewModel() = false

    @MainThread
    private fun lazyViewModels(activity: ComponentActivity): Lazy<VM> {
        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>
        return if (activitySameViewModel()) ViewModelLazy(cls.kotlin, { activity.viewModelStore }, { activity.defaultViewModelProviderFactory })
        else ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })
    }

    /**
     * 监听当前ViewModel中 showDialog和error的值
     */
    protected open fun initObserve() {
        if (!activitySameViewModel())
            viewModel?.run {
                showUIDialog.observe(viewLifecycleOwner) {
                    if (it.isShow) showloading(it.msg) else hideLoading()
                }
                errorMsgLiveData.observe(viewLifecycleOwner) {
                    onToast(it)
                }
            }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpRequest.kt
================================================
package com.wgllss.core.http

import java.net.HttpURLConnection
import java.net.URL
import java.security.SecureRandom
import java.security.cert.CertificateException
import java.security.cert.X509Certificate
import javax.net.ssl.*

object HttpRequest {

    fun getHttpURLConnection(url: URL, connectTimeOut: Int): HttpURLConnection? {
        return try {
            if ("https" == url.protocol) {
                trustAllHosts()
                (url.openConnection() as HttpsURLConnection).apply {
                    HttpsURLConnection.setDefaultHostnameVerifier(hnv)
                    hostnameVerifier = hnv
                    HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)
                    sslSocketFactory = mSSLSocketFactory
                    connectTimeout = 3 * connectTimeOut
                    readTimeout = 3 * connectTimeOut
                }
            } else {
                (url.openConnection() as HttpURLConnection).apply {
                    connectTimeout = connectTimeOut
                    readTimeout = connectTimeOut
                }
            }
        } catch (e: Exception) {
            null
        }
    }

    /**
     * 信任所有host
     */
    var hnv = HostnameVerifier { hostname, session -> true }

    /**
     * 设置https
     *
     * @author :Atar
     * @createTime:2015-9-17下午4:57:39
     * @version:1.0.0
     * @modifyTime:
     * @modifyAuthor:
     * @description:
     */
    private fun trustAllHosts() {
        try {
            val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
                override fun getAcceptedIssuers(): Array<X509Certificate> {
                    return arrayOf()
                }

                @Throws(CertificateException::class)
                override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
                }

                @Throws(CertificateException::class)
                override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
                }
            })
            val sc = SSLContext.getInstance("TLS")
            sc.init(null, trustAllCerts, SecureRandom())
            if (mSSLSocketFactory == null) {
                mSSLSocketFactory = sc.socketFactory
            }
            HttpsURLConnection.setDefaultHostnameVerifier(hnv)
            HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    var mSSLSocketFactory: SSLSocketFactory? = null

    /**
     * 设置请求头
     *
     * @param httpConnection
     */
    fun setConHead(httpConnection: HttpURLConnection) {
        httpConnection.apply {
            setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
            setRequestProperty("Upgrade-Insecure-Requests", "1")
            setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36")
            setRequestProperty("Accept-Language", "en-us,en;q=0.7,zh-cn;q=0.3")
//            httpConnection.setRequestProperty("Accept-Encoding", "gzip, deflate, br")
            setRequestProperty("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7")
            setRequestProperty("Keep-Alive", "300")
            setRequestProperty("Connection", "keep-alive")
            setRequestProperty("Cache-Control", "max-age=0")
        }
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpUrlConnectionRequest.kt
================================================
package com.wgllss.core.http

import java.io.BufferedReader
import java.io.InputStreamReader
import java.lang.StringBuilder
import java.net.HttpURLConnection
import java.net.URL

object HttpUrlConnectionRequest {

    fun getServerJson(url: String): String {
        val result = StringBuilder()
        var httpConnection: HttpURLConnection? = null
        try {
            val url = URL(url)
            httpConnection = HttpRequest.getHttpURLConnection(url, 5000)
            HttpRequest.setConHead(httpConnection!!)
            httpConnection!!.connect()
            val responseCode = httpConnection!!.responseCode
            if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_PARTIAL) {
                val instream = httpConnection!!.inputStream
                if (instream != null) {
                    val inputreader = InputStreamReader(instream)
                    val buffreader = BufferedReader(inputreader)
                    var line: String?
                    // 分行读取
                    while (buffreader.readLine().also { line = it } != null) {
                        result.append(line)
                    }
                    inputreader.close()
                    instream.close()
                    buffreader.close()
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        } finally {
            httpConnection?.disconnect() // 关闭连接
        }
        return result.toString()
    }
}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/material/ThemeUtils.kt
================================================
package com.wgllss.core.material
//
//import android.content.Context
//import android.util.TypedValue
//
//object ThemeUtils {
//
//
//    @JvmStatic
//    fun getColorPrimary(context: Context): Int {
//        val typedValue = TypedValue()
//        context.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true)
//        return typedValue.data
//    }
//
//    @JvmStatic
//    fun getColorOnPrimary(context: Context): Int {
//        val typedValue = TypedValue()
//        context.theme.resolveAttribute(android.R.attr.textColorHighlight, typedValue, true)
//        return typedValue.data
//    }
//
//    @JvmStatic
//    fun getTextColorPrimary(context: Context): Int {
//        val typedValue = TypedValue()
//        context.theme.resolveAttribute(android.R.attr.textColorPrimary, typedValue, true)
//        return typedValue.data
//    }
//
//    @JvmStatic
//    fun getAndroidColorBackground(context: Context): Int {
//        val typedValue = TypedValue()
//        context.theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true)
//        return typedValue.data
//    }
//}

================================================
FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/DeviceIdUtilX.kt
================================================
package com.wgllss.core.units

import android.content.Context
import android.os.Build
import android.provider.Settings
import java.security.MessageDigest
import java.util.*

/**
 * 1847470F0A12C2F310F7311FA719DBFE50510192
 * 1847470F0A12C2F310F7311FA719DBFE50510192
 *
 * 2F6039397BA7EEC402E7036339963B23810CCBFD
 */
object DeviceIdUtilX {
    private const val isDeviceSelfSerial = false
    private const val WD = "B03E4AFB9ADC842C9B3BDB6C57346ACEF6CE7504"
    private const val CD = "2F6039397BA7EEC402E7036339963B23810CCBFD"
    private const val ELSED = "dxde_m_p"

    fun getDeviceId(context: Context, needDevice: Boolean = false): String {
        if (isDeviceSelfSerial) {
            //todo 模拟序列号
            return "2F6039397BA7EEC402E7036339963B23810CCBFD"
//            return getSerial(AppGlobals.sApplication)
        } else {
//            val context = AppGlobals.sApplication
            val sbDeviceId = StringBuilder()
//            val imei = getIMEI(context)
            val androidID = getAndroidId(context)
//            val serial = getSerial(context)
            val id = getDeviceUUID(context).replace("-", "")
            //追加imei
//            if (imei != null && imei.isNotEmpty()) {
//                sbDeviceId.append(imei)
//                sbDeviceId.append("|")
//            }
            //追加androidid
            if (androidID != null && androidID.isNotEmpty()) {
                sbDeviceId.append(androidID)
                sbDeviceId.append("|")
            }
            //追加serial
//            if (serial != null && serial.isNotEmpty()) {
//                sbDeviceId.append(serial)
//                sbDeviceId.append("|")
//            }
            //追加硬件uuid
            if (id != null && id.isNotEmpty()) {
                sbDeviceId.append(id)
            }
            if (sbDeviceId.toString()
Download .txt
gitextract_2old5cjg/

├── .gitignore
├── LICENSE
├── README.md
├── WX/
│   ├── WX-Code/
│   │   ├── WX-Host/
│   │   │   ├── app/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── build.gradle
│   │   │   │   ├── proguard-rules.pro
│   │   │   │   ├── sign/
│   │   │   │   │   └── WXSample.jks
│   │   │   │   └── src/
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           ├── assets/
│   │   │   │           │   └── loading_1000
│   │   │   │           ├── java/
│   │   │   │           │   └── com/
│   │   │   │           │       └── wgllss/
│   │   │   │           │           └── dynamic/
│   │   │   │           │               └── host/
│   │   │   │           │                   ├── FaceImpl.kt
│   │   │   │           │                   ├── SampleApplication.kt
│   │   │   │           │                   └── VersionImpl.kt
│   │   │   │           └── res/
│   │   │   │               ├── drawable/
│   │   │   │               │   └── ic_launcher_background.xml
│   │   │   │               ├── drawable-v24/
│   │   │   │               │   └── ic_launcher_foreground.xml
│   │   │   │               ├── mipmap-anydpi-v26/
│   │   │   │               │   └── ic_launcher.xml
│   │   │   │               └── xml/
│   │   │   │                   ├── backup_rules.xml
│   │   │   │                   ├── data_extraction_rules.xml
│   │   │   │                   └── network_security_config.xml
│   │   │   └── app-lib/
│   │   │       ├── wgllss-business-re-library/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── build.gradle
│   │   │       │   ├── proguard-rules.pro
│   │   │       │   └── src/
│   │   │       │       ├── main/
│   │   │       │       │   ├── AndroidManifest.xml
│   │   │       │       │   └── java/
│   │   │       │       │       └── com/
│   │   │       │       │           └── wgllss/
│   │   │       │       │               └── sample/
│   │   │       │       │                   └── feature_system/
│   │   │       │       │                       └── globle/
│   │   │       │       │                           └── Constants.kt
│   │   │       │       └── test/
│   │   │       │           └── java/
│   │   │       │               └── com/
│   │   │       │                   └── wgllss/
│   │   │       │                       └── sample/
│   │   │       │                           └── ExampleUnitTest.kt
│   │   │       ├── wgllss-common-re-library/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── build.gradle
│   │   │       │   ├── libs/
│   │   │       │   │   └── com_wang_avi_library-2.1.3.aar
│   │   │       │   ├── proguard-rules.pro
│   │   │       │   └── src/
│   │   │       │       └── main/
│   │   │       │           ├── AndroidManifest.xml
│   │   │       │           ├── java/
│   │   │       │           │   └── com/
│   │   │       │           │       └── wgllss/
│   │   │       │           │           └── core/
│   │   │       │           │               ├── dialog/
│   │   │       │           │               │   └── CommonLoadingView.kt
│   │   │       │           │               ├── ex/
│   │   │       │           │               │   ├── ContextEX.kt
│   │   │       │           │               │   ├── Flow.kt
│   │   │       │           │               │   └── NetWorkHelp.kt
│   │   │       │           │               ├── permissions/
│   │   │       │           │               │   ├── PermissionInterceptor.kt
│   │   │       │           │               │   └── PermissionNameConvert.kt
│   │   │       │           │               ├── units/
│   │   │       │           │               │   ├── AppGlobals.kt
│   │   │       │           │               │   ├── DeviceIdUtil.kt
│   │   │       │           │               │   └── LogTimer.kt
│   │   │       │           │               └── widget/
│   │   │       │           │                   └── CommonToast.kt
│   │   │       │           └── res/
│   │   │       │               ├── anim/
│   │   │       │               │   └── anim_alpha_121.xml
│   │   │       │               ├── drawable/
│   │   │       │               │   ├── button_bg_transparent_helf.xml
│   │   │       │               │   └── progressbar_shape.xml
│   │   │       │               ├── layout/
│   │   │       │               │   └── common_loading.xml
│   │   │       │               └── values/
│   │   │       │                   ├── colors.xml
│   │   │       │                   ├── strings.xml
│   │   │       │                   └── themes.xml
│   │   │       ├── wgllss-dynamic-host-library/
│   │   │       │   ├── .gitignore
│   │   │       │   ├── build.gradle
│   │   │       │   ├── consumer-rules.pro
│   │   │       │   ├── proguard-rules.pro
│   │   │       │   └── src/
│   │   │       │       ├── androidTest/
│   │   │       │       │   └── java/
│   │   │       │       │       └── com/
│   │   │       │       │           └── wgllss/
│   │   │       │       │               └── host/
│   │   │       │       │                   └── library/
│   │   │       │       │                       └── ExampleInstrumentedTest.kt
│   │   │       │       ├── main/
│   │   │       │       │   └── AndroidManifest.xml
│   │   │       │       └── test/
│   │   │       │           └── java/
│   │   │       │               └── com/
│   │   │       │                   └── wgllss/
│   │   │       │                       └── host/
│   │   │       │                           └── library/
│   │   │       │                               └── ExampleUnitTest.kt
│   │   │       └── wgllss-dynamic-host-skin-resource-lib/
│   │   │           ├── .gitignore
│   │   │           ├── build.gradle
│   │   │           ├── proguard-rules.pro
│   │   │           └── src/
│   │   │               └── main/
│   │   │                   ├── AndroidManifest.xml
│   │   │                   └── res/
│   │   │                       ├── drawable/
│   │   │                       │   ├── ic_baseline_pause_36.xml
│   │   │                       │   ├── ic_baseline_play_arrow_36.xml
│   │   │                       │   ├── ic_baseline_skip_next_36.xml
│   │   │                       │   ├── ic_baseline_skip_previous_36.xml
│   │   │                       │   ├── splash_preview.xml
│   │   │                       │   └── splash_preview_dark.xml
│   │   │                       ├── values/
│   │   │                       │   ├── colors.xml
│   │   │                       │   ├── dimens.xml
│   │   │                       │   ├── ids.xml
│   │   │                       │   ├── strings.xml
│   │   │                       │   └── themes.xml
│   │   │                       ├── values-night/
│   │   │                       │   ├── colors.xml
│   │   │                       │   └── themes.xml
│   │   │                       ├── values-v27/
│   │   │                       │   └── themes.xml
│   │   │                       └── values-v29/
│   │   │                           └── themes.xml
│   │   └── WX-Plugin/
│   │       ├── Wgllss-Dynamic-Plugin-Common-Library/
│   │       │   ├── .gitignore
│   │       │   ├── build.gradle
│   │       │   ├── proguard-rules.pro
│   │       │   └── src/
│   │       │       └── main/
│   │       │           ├── AndroidManifest.xml
│   │       │           └── java/
│   │       │               └── com/
│   │       │                   └── wgllss/
│   │       │                       └── core/
│   │       │                           ├── activity/
│   │       │                           │   ├── BaseActivity.kt
│   │       │                           │   ├── BaseMVVMActivity.kt
│   │       │                           │   ├── BaseViewModePluginActivity.kt
│   │       │                           │   ├── BaseViewModelActivity.kt
│   │       │                           │   ├── BaseViewModelClassActivity.kt
│   │       │                           │   ├── BaseViewPluginResActivity.kt
│   │       │                           │   ├── WActivityManager.kt
│   │       │                           │   └── compose/
│   │       │                           │       └── BaseComposeActivity.kt
│   │       │                           ├── adapter/
│   │       │                           │   ├── BasePagerAdapter.kt
│   │       │                           │   ├── BasePluginRecyclerAdapter.kt
│   │       │                           │   ├── BaseRecyclerAdapter.kt
│   │       │                           │   └── ViewPage2ChildFragmentAdapter.kt
│   │       │                           ├── data/
│   │       │                           │   └── DialogBean.kt
│   │       │                           ├── ex/
│   │       │                           │   ├── Context.kt
│   │       │                           │   ├── Fragment.kt
│   │       │                           │   ├── FragmentActivity.kt
│   │       │                           │   ├── ImageView.kt
│   │       │                           │   ├── SwipeRefreshLayout.kt
│   │       │                           │   └── ViewModel.kt
│   │       │                           ├── fragment/
│   │       │                           │   ├── BaseFragment.kt
│   │       │                           │   ├── BasePluginResFragment.kt
│   │       │                           │   ├── BaseViewModelClassFragment.kt
│   │       │                           │   ├── BaseViewModelFragment.kt
│   │       │                           │   └── BaseViewModelPluginFragment.kt
│   │       │                           ├── http/
│   │       │                           │   ├── HttpRequest.kt
│   │       │                           │   └── HttpUrlConnectionRequest.kt
│   │       │                           ├── material/
│   │       │                           │   └── ThemeUtils.kt
│   │       │                           ├── units/
│   │       │                           │   ├── DeviceIdUtilX.kt
│   │       │                           │   ├── ImageUtils.kt
│   │       │                           │   ├── ResourceUtils.kt
│   │       │                           │   ├── ScreenManager.kt
│   │       │                           │   ├── SdkIntUtils.kt
│   │       │                           │   ├── ServiceUtil.kt
│   │       │                           │   ├── StatusBarUtil.kt
│   │       │                           │   └── WLog.kt
│   │       │                           ├── viewmodel/
│   │       │                           │   └── BaseViewModel.kt
│   │       │                           └── widget/
│   │       │                               ├── ButtomNavigationViewEx.kt
│   │       │                               ├── DividerGridItemDecoration.kt
│   │       │                               ├── DrawerBack.kt
│   │       │                               ├── MusicVisualizerView.kt
│   │       │                               └── OnRecyclerViewItemClickListener.kt
│   │       ├── Wgllss-Dynamic-Plugin-Generate/
│   │       │   ├── wgllss-sample-create-all-app/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── version/
│   │       │   │                               └── json/
│   │       │   │                                   └── Test.kt
│   │       │   ├── wgllss-sample-create-version-config-annotations/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── annotations/
│   │       │   │                           └── CreateVersionConfig.kt
│   │       │   ├── wgllss-sample-create-version-config-app/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── version/
│   │       │   │                               └── json/
│   │       │   │                                   └── Test.kt
│   │       │   └── wgllss-sample-create-version-config-compiler/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── libs/
│   │       │       │   ├── Wgllss-Dynamic-Host-Protobuf-lib.jar
│   │       │       │   └── classes.jar
│   │       │       └── src/
│   │       │           └── main/
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           └── compiler/
│   │       │                               └── AptCreateConfigProcessor.kt
│   │       ├── Wgllss-Dynamic-Plugin-Manager/
│   │       │   ├── Wgllss-Dynamic-Plugin-DownloadFace-Impl/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── plugin/
│   │       │   │                               └── download_face/
│   │       │   │                                   └── DownLoadFaceImpl.kt
│   │       │   ├── Wgllss-Dynamic-Plugin-Loader-Impl/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           └── plugin/
│   │       │   │                               └── loader/
│   │       │   │                                   └── LoaderManagerImpl.kt
│   │       │   └── Wgllss-Dynamic-Plugin-Manager/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── proguard-rules.pro
│   │       │       └── src/
│   │       │           └── main/
│   │       │               ├── AndroidManifest.xml
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           └── dynamic/
│   │       │                               └── plugin/
│   │       │                                   └── manager/
│   │       │                                       ├── PluginManager.kt
│   │       │                                       └── PluginResource.kt
│   │       ├── Wgllss-Dynamic-Plugin-SDK/
│   │       │   ├── Wgllss-Dynamic-Plugin-Library/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── consumer-rules.pro
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       ├── main/
│   │       │   │       │   ├── AndroidManifest.xml
│   │       │   │       │   └── java/
│   │       │   │       │       └── com/
│   │       │   │       │           └── wgllss/
│   │       │   │       │               └── dynamic/
│   │       │   │       │                   └── runtime/
│   │       │   │       │                       └── library/
│   │       │   │       │                           ├── WXDynamicAidlInterface.java
│   │       │   │       │                           ├── WXHostActivityDelegate.java
│   │       │   │       │                           └── WXHostServiceDelegate.java
│   │       │   │       └── test/
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── plugin/
│   │       │   │                           └── library/
│   │       │   │                               └── ExampleUnitTest.kt
│   │       │   └── Wgllss-Dynamic-Plugin-RunTime-Apk/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── consumer-rules.pro
│   │       │       ├── proguard-rules.pro
│   │       │       └── src/
│   │       │           ├── main/
│   │       │           │   ├── AndroidManifest.xml
│   │       │           │   └── java/
│   │       │           │       └── com/
│   │       │           │           └── wgllss/
│   │       │           │               └── dynamic/
│   │       │           │                   └── plugin/
│   │       │           │                       └── runtime/
│   │       │           │                           ├── HostComposePluginActivity.java
│   │       │           │                           ├── HostPluginActivity.java
│   │       │           │                           ├── HostPluginService.java
│   │       │           │                           ├── PluginClassLoader.java
│   │       │           │                           ├── PluginProcessStartNotStickyService.java
│   │       │           │                           ├── PluginProcessStartRedeliverIntentService.java
│   │       │           │                           ├── PluginProcessStartStickyCompatibilityService.java
│   │       │           │                           ├── PluginProcessStartStickyService.java
│   │       │           │                           ├── PluginSingleInstanceActivity.java
│   │       │           │                           ├── PluginSingleInstanceComposeActivity.java
│   │       │           │                           ├── PluginSingleTaskActivity.java
│   │       │           │                           ├── PluginSingleTaskComposeActivity.java
│   │       │           │                           ├── PluginSingleTopActivity.java
│   │       │           │                           ├── PluginSingleTopComposeActivity.java
│   │       │           │                           ├── PluginStandardActivity.java
│   │       │           │                           ├── PluginStandardComposeActivity.java
│   │       │           │                           ├── PluginStartNotStickyService.java
│   │       │           │                           ├── PluginStartRedeliverIntentService.java
│   │       │           │                           ├── PluginStartStickyCompatibilityService.java
│   │       │           │                           └── PluginStartStickyService.java
│   │       │           └── test/
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           └── dynamic/
│   │       │                               └── runtime/
│   │       │                                   └── ExampleUnitTest.kt
│   │       ├── Wgllss-Dynamic-Plugin-Sample/
│   │       │   ├── wgllss-sample-assets-source-apk/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── assets/
│   │       │   │               ├── css/
│   │       │   │               │   └── main.8f39d45c.css
│   │       │   │               └── js/
│   │       │   │                   ├── jquery.js
│   │       │   │                   └── jquery.lazyload.js
│   │       │   ├── wgllss-sample-business-library/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── sample/
│   │       │   │                           ├── data/
│   │       │   │                           │   ├── ImgExtraData.kt
│   │       │   │                           │   ├── NewsBean.kt
│   │       │   │                           │   └── SampleItemBean.kt
│   │       │   │                           ├── datasource/
│   │       │   │                           │   ├── net/
│   │       │   │                           │   │   ├── HeaderInterceptor.kt
│   │       │   │                           │   │   ├── MyApi.kt
│   │       │   │                           │   │   └── RetrofitUtils.kt
│   │       │   │                           │   └── repository/
│   │       │   │                           │       └── NewsRepository.kt
│   │       │   │                           ├── feature_system/
│   │       │   │                           │   ├── music/
│   │       │   │                           │   │   ├── exoplayerimpl/
│   │       │   │                           │   │   │   ├── ExoPlayerUtils.kt
│   │       │   │                           │   │   │   └── MusicServiceConnection.kt
│   │       │   │                           │   │   ├── extensions/
│   │       │   │                           │   │   │   ├── MediaExtensions.kt
│   │       │   │                           │   │   │   ├── MediaMetadataCompatExt.kt
│   │       │   │                           │   │   │   └── PlaybackStateCompatExt.kt
│   │       │   │                           │   │   └── notification/
│   │       │   │                           │   │       ├── WXNotificationListener.kt
│   │       │   │                           │   │       └── WXPlayerNotificationManager.kt
│   │       │   │                           │   ├── room/
│   │       │   │                           │   │   ├── CollectDataBase.kt
│   │       │   │                           │   │   ├── dao/
│   │       │   │                           │   │   │   └── CollectDao.kt
│   │       │   │                           │   │   ├── help/
│   │       │   │                           │   │   │   ├── RoomDBHelper.kt
│   │       │   │                           │   │   │   └── RoomDBMigration.kt
│   │       │   │                           │   │   └── table/
│   │       │   │                           │   │       └── CollectTableBean.kt
│   │       │   │                           │   ├── savestatus/
│   │       │   │                           │   │   └── MMKVHelp.kt
│   │       │   │                           │   ├── services/
│   │       │   │                           │   │   └── MusicService.kt
│   │       │   │                           │   └── untils/
│   │       │   │                           │       └── UUIDHelp.kt
│   │       │   │                           └── features_ui/
│   │       │   │                               └── playing/
│   │       │   │                                   └── activity/
│   │       │   │                                       └── NotificationTargetActivity.kt
│   │       │   ├── wgllss-sample-loader-version/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── loader/
│   │       │   │                           └── version/
│   │       │   │                               └── LoaderVersionImpl.kt
│   │       │   ├── wgllss-sample-skin-resource-apk/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── res/
│   │       │   │               ├── drawable/
│   │       │   │               │   ├── bottom_navigation_color_selector.xml
│   │       │   │               │   ├── circle_gray_border.xml
│   │       │   │               │   ├── ic_baseline_arrow_back_24.xml
│   │       │   │               │   ├── ic_baseline_grade_24.xml
│   │       │   │               │   ├── ic_baseline_pause_36.xml
│   │       │   │               │   ├── ic_baseline_play_arrow_36.xml
│   │       │   │               │   ├── ic_baseline_search_24.xml
│   │       │   │               │   ├── ic_baseline_skip_next_36.xml
│   │       │   │               │   ├── ic_baseline_skip_previous_36.xml
│   │       │   │               │   ├── ic_dashboard_black_24dp.xml
│   │       │   │               │   ├── ic_home_black_24dp.xml
│   │       │   │               │   ├── ic_notifications_black_24dp.xml
│   │       │   │               │   ├── ic_round_queue_music_24.xml
│   │       │   │               │   ├── play_btn_play_pause_selector.xml
│   │       │   │               │   ├── play_load_drawable.xml
│   │       │   │               │   ├── play_mode_level_list.xml
│   │       │   │               │   ├── seek_bar_progress_style.xml
│   │       │   │               │   ├── seekbar_circle_red_border.xml
│   │       │   │               │   ├── seekbar_thumb.xml
│   │       │   │               │   ├── switch_thumb_selector.xml
│   │       │   │               │   └── switch_track_selector.xml
│   │       │   │               ├── values/
│   │       │   │               │   ├── colors.xml
│   │       │   │               │   ├── dimens.xml
│   │       │   │               │   ├── ids.xml
│   │       │   │               │   ├── strings.xml
│   │       │   │               │   └── themes.xml
│   │       │   │               ├── values-night/
│   │       │   │               │   ├── colors.xml
│   │       │   │               │   └── themes.xml
│   │       │   │               ├── values-v27/
│   │       │   │               │   └── themes.xml
│   │       │   │               └── values-v29/
│   │       │   │                   └── themes.xml
│   │       │   ├── wgllss-sample-ui-home/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           ├── impl/
│   │       │   │                           │   └── ILoadHomeImpl.kt
│   │       │   │                           ├── initializer/
│   │       │   │                           │   └── InitHomeFirstInitialize.kt
│   │       │   │                           ├── provider/
│   │       │   │                           │   └── TestContentProvider.kt
│   │       │   │                           ├── sample/
│   │       │   │                           │   ├── feature_home/
│   │       │   │                           │   │   ├── adapter/
│   │       │   │                           │   │   │   └── HomeNewsAdapter.kt
│   │       │   │                           │   │   ├── fragment/
│   │       │   │                           │   │   │   ├── HomeFragment.kt
│   │       │   │                           │   │   │   └── HomeTabFragment.kt
│   │       │   │                           │   │   ├── pkg/
│   │       │   │                           │   │   │   └── ResourceContains.kt
│   │       │   │                           │   │   └── viewmodels/
│   │       │   │                           │   │       ├── HomeTabViewModel.kt
│   │       │   │                           │   │       ├── HomeViewModel.kt
│   │       │   │                           │   │       └── SettingViewModel.kt
│   │       │   │                           │   └── feature_startup/
│   │       │   │                           │       └── startup/
│   │       │   │                           │           ├── GenerateHomeLayout.kt
│   │       │   │                           │           ├── HomeContains.kt
│   │       │   │                           │           ├── InitHomeFirstInitializeHelp.kt
│   │       │   │                           │           └── LaunchInflateKey.kt
│   │       │   │                           └── ui/
│   │       │   │                               └── HomeActivity.kt
│   │       │   ├── wgllss-sample-ui-loading/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── java/
│   │       │   │               └── com/
│   │       │   │                   └── wgllss/
│   │       │   │                       └── dynamic/
│   │       │   │                           ├── initializer/
│   │       │   │                           │   └── InitHomeFirstInitialize.kt
│   │       │   │                           ├── system/
│   │       │   │                           │   └── broadcast/
│   │       │   │                           │       ├── BroadCastAction.kt
│   │       │   │                           │       └── DownLoadCompleteBroadCast.kt
│   │       │   │                           └── ui/
│   │       │   │                               └── HomeActivity.kt
│   │       │   ├── wgllss-sample-ui-other/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── res/
│   │       │   │               └── layout/
│   │       │   │                   ├── adapter_collection_item.xml
│   │       │   │                   ├── adapter_sample_item.xml
│   │       │   │                   ├── fragment_collection.xml
│   │       │   │                   ├── fragment_sample.xml
│   │       │   │                   └── fragment_setting.xml
│   │       │   ├── wgllss-sample-ui-other-lib/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           ├── java/
│   │       │   │           │   └── com/
│   │       │   │           │       └── wgllss/
│   │       │   │           │           └── sample/
│   │       │   │           │               ├── datasource/
│   │       │   │           │               │   ├── SettingRepository.kt
│   │       │   │           │               │   └── SkinPluginBean.kt
│   │       │   │           │               └── features_ui/
│   │       │   │           │                   └── page/
│   │       │   │           │                       ├── base/
│   │       │   │           │                       │   ├── BasePluginActivity.kt
│   │       │   │           │                       │   ├── BasePluginFragment.kt
│   │       │   │           │                       │   └── SkinContains.kt
│   │       │   │           │                       └── home/
│   │       │   │           │                           ├── adapter/
│   │       │   │           │                           │   ├── CollectionAdapter.kt
│   │       │   │           │                           │   ├── SampleAdapter.kt
│   │       │   │           │                           │   └── SkinAdapter.kt
│   │       │   │           │                           ├── fragment/
│   │       │   │           │                           │   ├── CollectFragment.kt
│   │       │   │           │                           │   ├── SampleFragment.kt
│   │       │   │           │                           │   └── SettingFragment.kt
│   │       │   │           │                           └── viewmodels/
│   │       │   │           │                               ├── CollectViewModel.kt
│   │       │   │           │                               ├── SampleViewModel.kt
│   │       │   │           │                               └── SettingViewModel.kt
│   │       │   │           └── res/
│   │       │   │               └── layout/
│   │       │   │                   ├── activity_locker.xml
│   │       │   │                   ├── activity_play.xml
│   │       │   │                   ├── adapter_home_item_music.xml
│   │       │   │                   ├── adapter_item_music.xml
│   │       │   │                   ├── adapter_music_playlist_item.xml
│   │       │   │                   ├── fragment_history.xml
│   │       │   │                   ├── fragment_locker.xml
│   │       │   │                   ├── fragment_play.xml
│   │       │   │                   ├── fragment_search.xml
│   │       │   │                   ├── fragment_setting.xml
│   │       │   │                   └── music_cd_layout.xml
│   │       │   ├── wgllss-sample-ui-other2/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── build.gradle
│   │       │   │   ├── proguard-rules.pro
│   │       │   │   └── src/
│   │       │   │       └── main/
│   │       │   │           ├── AndroidManifest.xml
│   │       │   │           └── res/
│   │       │   │               └── layout/
│   │       │   │                   ├── activity_locker.xml
│   │       │   │                   ├── activity_other2.xml
│   │       │   │                   ├── activity_other3.xml
│   │       │   │                   ├── activity_play.xml
│   │       │   │                   ├── activity_video.xml
│   │       │   │                   ├── activity_webview.xml
│   │       │   │                   ├── dialog_sample.xml
│   │       │   │                   ├── fragment_activity_sample.xml
│   │       │   │                   ├── fragment_broadcast_sample.xml
│   │       │   │                   ├── fragment_dialog_sample.xml
│   │       │   │                   ├── fragment_locker.xml
│   │       │   │                   ├── fragment_notification_sample.xml
│   │       │   │                   ├── fragment_play.xml
│   │       │   │                   ├── fragment_provider_sample.xml
│   │       │   │                   ├── fragment_service_sample.xml
│   │       │   │                   ├── fragment_so_sample.xml
│   │       │   │                   └── music_cd_layout.xml
│   │       │   └── wgllss-sample-ui-other2-lib2/
│   │       │       ├── .gitignore
│   │       │       ├── build.gradle
│   │       │       ├── proguard-rules.pro
│   │       │       └── src/
│   │       │           └── main/
│   │       │               ├── AndroidManifest.xml
│   │       │               └── java/
│   │       │                   └── com/
│   │       │                       └── wgllss/
│   │       │                           ├── nativex/
│   │       │                           │   ├── MainActivity.kt
│   │       │                           │   └── NativeCallBack.kt
│   │       │                           ├── sample/
│   │       │                           │   └── features_ui/
│   │       │                           │       └── page/
│   │       │                           │           ├── base/
│   │       │                           │           │   ├── BasePluginActivity.kt
│   │       │                           │           │   ├── BasePluginComposeActivity.kt
│   │       │                           │           │   ├── BasePluginFragment.kt
│   │       │                           │           │   └── SkinContains.kt
│   │       │                           │           └── other2/
│   │       │                           │               ├── activity/
│   │       │                           │               │   ├── AudioActivity.kt
│   │       │                           │               │   ├── ComposeDemoActivity.kt
│   │       │                           │               │   ├── Other2Activity.kt
│   │       │                           │               │   ├── Other3Activity.kt
│   │       │                           │               │   ├── VideoActivity.kt
│   │       │                           │               │   └── WebViewActivity.kt
│   │       │                           │               ├── broadcast/
│   │       │                           │               │   └── TestBroadCast.kt
│   │       │                           │               ├── dialog/
│   │       │                           │               │   └── MyDialog.kt
│   │       │                           │               ├── fragment/
│   │       │                           │               │   ├── SampleActivityFragment.kt
│   │       │                           │               │   ├── SampleBroadCastFragment.kt
│   │       │                           │               │   ├── SampleContentProviderFragment.kt
│   │       │                           │               │   ├── SampleDialogFragment.kt
│   │       │                           │               │   ├── SampleMusicFragment.kt
│   │       │                           │               │   ├── SampleNotificationFragment.kt
│   │       │                           │               │   ├── SampleServiceFragment.kt
│   │       │                           │               │   └── SampleSoFragment.kt
│   │       │                           │               ├── service/
│   │       │                           │               │   ├── MyProcessService.kt
│   │       │                           │               │   ├── MyService.kt
│   │       │                           │               │   ├── MyService2.kt
│   │       │                           │               │   └── MyService3.kt
│   │       │                           │               ├── viewmodel/
│   │       │                           │               │   ├── ComposeDemoViewModel.kt
│   │       │                           │               │   ├── Other2ViewModel.kt
│   │       │                           │               │   ├── PlayModel.kt
│   │       │                           │               │   ├── SampleActivityViewModel.kt
│   │       │                           │               │   └── WebViewModel.kt
│   │       │                           │               └── web/
│   │       │                           │                   └── ImplWebViewClient.kt
│   │       │                           └── theme/
│   │       │                               ├── Color.kt
│   │       │                               ├── Theme.kt
│   │       │                               └── Type.kt
│   │       └── Wgllss-Dynamic-Plugin_Skin/
│   │           ├── blue-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── brown-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── dark-blue-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── dark-green-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── dark-red-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── green-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── light-green-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── orange-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           ├── pink-resource/
│   │           │   ├── .gitignore
│   │           │   ├── build.gradle
│   │           │   ├── proguard-rules.pro
│   │           │   └── src/
│   │           │       └── main/
│   │           │           ├── AndroidManifest.xml
│   │           │           └── res/
│   │           │               ├── drawable/
│   │           │               │   ├── bottom_navigation_color_selector.xml
│   │           │               │   ├── circle_gray_border.xml
│   │           │               │   ├── ic_baseline_arrow_back_24.xml
│   │           │               │   ├── ic_baseline_grade_24.xml
│   │           │               │   ├── ic_baseline_pause_36.xml
│   │           │               │   ├── ic_baseline_play_arrow_36.xml
│   │           │               │   ├── ic_baseline_search_24.xml
│   │           │               │   ├── ic_baseline_skip_next_36.xml
│   │           │               │   ├── ic_baseline_skip_previous_36.xml
│   │           │               │   ├── ic_dashboard_black_24dp.xml
│   │           │               │   ├── ic_home_black_24dp.xml
│   │           │               │   ├── ic_notifications_black_24dp.xml
│   │           │               │   ├── ic_round_queue_music_24.xml
│   │           │               │   ├── play_btn_play_pause_selector.xml
│   │           │               │   ├── play_load_drawable.xml
│   │           │               │   ├── play_mode_level_list.xml
│   │           │               │   ├── seek_bar_progress_style.xml
│   │           │               │   ├── seekbar_circle_red_border.xml
│   │           │               │   ├── seekbar_thumb.xml
│   │           │               │   ├── switch_thumb_selector.xml
│   │           │               │   └── switch_track_selector.xml
│   │           │               ├── values/
│   │           │               │   ├── colors.xml
│   │           │               │   ├── dimens.xml
│   │           │               │   ├── ids.xml
│   │           │               │   ├── strings.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-night/
│   │           │               │   ├── colors.xml
│   │           │               │   └── themes.xml
│   │           │               ├── values-v27/
│   │           │               │   └── themes.xml
│   │           │               └── values-v29/
│   │           │                   └── themes.xml
│   │           └── red-resource/
│   │               ├── .gitignore
│   │               ├── build.gradle
│   │               ├── proguard-rules.pro
│   │               └── src/
│   │                   └── main/
│   │                       ├── AndroidManifest.xml
│   │                       └── res/
│   │                           ├── drawable/
│   │                           │   ├── bottom_navigation_color_selector.xml
│   │                           │   ├── circle_gray_border.xml
│   │                           │   ├── ic_baseline_arrow_back_24.xml
│   │                           │   ├── ic_baseline_grade_24.xml
│   │                           │   ├── ic_baseline_pause_36.xml
│   │                           │   ├── ic_baseline_play_arrow_36.xml
│   │                           │   ├── ic_baseline_search_24.xml
│   │                           │   ├── ic_baseline_skip_next_36.xml
│   │                           │   ├── ic_baseline_skip_previous_36.xml
│   │                           │   ├── ic_dashboard_black_24dp.xml
│   │                           │   ├── ic_home_black_24dp.xml
│   │                           │   ├── ic_notifications_black_24dp.xml
│   │                           │   ├── ic_round_queue_music_24.xml
│   │                           │   ├── play_btn_play_pause_selector.xml
│   │                           │   ├── play_load_drawable.xml
│   │                           │   ├── play_mode_level_list.xml
│   │                           │   ├── seek_bar_progress_style.xml
│   │                           │   ├── seekbar_circle_red_border.xml
│   │                           │   ├── seekbar_thumb.xml
│   │                           │   ├── switch_thumb_selector.xml
│   │                           │   └── switch_track_selector.xml
│   │                           ├── values/
│   │                           │   ├── colors.xml
│   │                           │   ├── dimens.xml
│   │                           │   ├── ids.xml
│   │                           │   ├── strings.xml
│   │                           │   └── themes.xml
│   │                           ├── values-night/
│   │                           │   ├── colors.xml
│   │                           │   └── themes.xml
│   │                           ├── values-v27/
│   │                           │   └── themes.xml
│   │                           └── values-v29/
│   │                               └── themes.xml
│   ├── WX-Dynamic-Host-SDK-Lib/
│   │   ├── Wgllss-Dynamic-Host-Lib/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── proguard-rules.pro
│   │   │   └── src/
│   │   │       ├── androidTest/
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── wgllss/
│   │   │       │               └── dynamic/
│   │   │       │                   └── host/
│   │   │       │                       └── wxdynamicpluginsdk/
│   │   │       │                           └── ExampleInstrumentedTest.kt
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   └── java/
│   │   │       │       └── com/
│   │   │       │           └── wgllss/
│   │   │       │               └── dynamic/
│   │   │       │                   └── host/
│   │   │       │                       └── lib/
│   │   │       │                           ├── classloader/
│   │   │       │                           │   ├── PluginKey.java
│   │   │       │                           │   └── WXClassLoader.java
│   │   │       │                           ├── download/
│   │   │       │                           │   ├── DownLoadResult.kt
│   │   │       │                           │   ├── DynamicDownloadPlugin.kt
│   │   │       │                           │   └── IDynamicDownLoadFace.kt
│   │   │       │                           ├── home/
│   │   │       │                           │   └── ILoadHome.kt
│   │   │       │                           ├── impl/
│   │   │       │                           │   ├── WXDynamicLoader.kt
│   │   │       │                           │   └── WXLoaderManagerImpl.kt
│   │   │       │                           ├── loader/
│   │   │       │                           │   └── ILoaderManager.kt
│   │   │       │                           ├── loader_base/
│   │   │       │                           │   ├── BaseLoaderManagerImpl.kt
│   │   │       │                           │   └── DynamicManageUtils.kt
│   │   │       │                           ├── provider/
│   │   │       │                           │   ├── ProviderAuthority.kt
│   │   │       │                           │   ├── WXHostContentProviderDelegate.kt
│   │   │       │                           │   ├── WXPluginContentProvider.kt
│   │   │       │                           │   └── WXProviderManager.kt
│   │   │       │                           └── runtime/
│   │   │       │                               ├── ContainerClassLoader.kt
│   │   │       │                               └── MultiDynamicRuntime.kt
│   │   │       └── test/
│   │   │           └── java/
│   │   │               └── com/
│   │   │                   └── wgllss/
│   │   │                       └── dynamic/
│   │   │                           └── host/
│   │   │                               └── wxdynamicpluginsdk/
│   │   │                                   └── ExampleUnitTest.kt
│   │   └── Wgllss-Dynamic-Host-Version-Lib/
│   │       ├── .gitignore
│   │       ├── build.gradle
│   │       ├── consumer-rules.pro
│   │       ├── proguard-rules.pro
│   │       └── src/
│   │           └── main/
│   │               └── java/
│   │                   └── com/
│   │                       └── wgllss/
│   │                           └── dynamic/
│   │                               └── host/
│   │                                   └── lib/
│   │                                       ├── constant/
│   │                                       │   └── DynamicPluginConstant.kt
│   │                                       └── version/
│   │                                           └── ILoaderVersion.kt
│   └── WX-Maven/
│       ├── WX-Host/
│       │   ├── sample/
│       │   │   ├── .gitignore
│       │   │   ├── build.gradle
│       │   │   ├── proguard-rules.pro
│       │   │   ├── sign/
│       │   │   │   └── WXSample.jks
│       │   │   └── src/
│       │   │       └── main/
│       │   │           ├── AndroidManifest.xml
│       │   │           ├── assets/
│       │   │           │   └── loading_1000
│       │   │           ├── java/
│       │   │           │   └── com/
│       │   │           │       └── wgllss/
│       │   │           │           └── dynamic/
│       │   │           │               └── host/
│       │   │           │                   ├── FaceImpl.kt
│       │   │           │                   ├── SampleApplication.kt
│       │   │           │                   └── VersionImpl.kt
│       │   │           └── res/
│       │   │               ├── drawable/
│       │   │               │   └── ic_launcher_background.xml
│       │   │               ├── drawable-v24/
│       │   │               │   └── ic_launcher_foreground.xml
│       │   │               ├── mipmap-anydpi-v26/
│       │   │               │   └── ic_launcher.xml
│       │   │               ├── values/
│       │   │               │   ├── colors.xml
│       │   │               │   ├── strings.xml
│       │   │               │   └── themes.xml
│       │   │               ├── values-night/
│       │   │               │   └── themes.xml
│       │   │               └── xml/
│       │   │                   ├── backup_rules.xml
│       │   │                   ├── data_extraction_rules.xml
│       │   │                   └── network_security_config.xml
│       │   └── sample-lib/
│       │       ├── maven-wgllss-business-re-library/
│       │       │   ├── .gitignore
│       │       │   ├── build.gradle
│       │       │   ├── proguard-rules.pro
│       │       │   └── src/
│       │       │       ├── main/
│       │       │       │   ├── AndroidManifest.xml
│       │       │       │   └── java/
│       │       │       │       └── com/
│       │       │       │           └── wgllss/
│       │       │       │               └── sample/
│       │       │       │                   └── feature_system/
│       │       │       │                       └── globle/
│       │       │       │                           └── Constants.kt
│       │       │       └── test/
│       │       │           └── java/
│       │       │               └── com/
│       │       │                   └── wgllss/
│       │       │                       └── sample/
│       │       │                           └── ExampleUnitTest.kt
│       │       ├── maven-wgllss-common-re-library/
│       │       │   ├── .gitignore
│       │       │   ├── build.gradle
│       │       │   ├── libs/
│       │       │   │   └── com_wang_avi_library-2.1.3.aar
│       │       │   ├── proguard-rules.pro
│       │       │   └── src/
│       │       │       └── main/
│       │       │           ├── AndroidManifest.xml
│       │       │           ├── java/
│       │       │           │   └── com/
│       │       │           │       └── wgllss/
│       │       │           │           └── core/
│       │       │           │               ├── dialog/
│       │       │           │               │   └── CommonLoadingView.kt
│       │       │           │               ├── ex/
│       │       │           │               │   ├── ContextEX.kt
│       │       │           │               │   ├── Flow.kt
│       │       │           │               │   └── NetWorkHelp.kt
│       │       │           │               ├── permissions/
│       │       │           │               │   ├── PermissionInterceptor.kt
│       │       │           │               │   └── PermissionNameConvert.kt
│       │       │           │               ├── units/
│       │       │           │               │   ├── AppGlobals.kt
│       │       │           │               │   ├── DeviceIdUtil.kt
│       │       │           │               │   └── LogTimer.kt
│       │       │           │               └── widget/
│       │       │           │                   └── CommonToast.kt
│       │       │           └── res/
│       │       │               ├── anim/
│       │       │               │   └── anim_alpha_121.xml
│       │       │               ├── drawable/
│       │       │               │   ├── button_bg_transparent_helf.xml
│       │       │               │   └── progressbar_shape.xml
│       │       │               ├── layout/
│       │       │               │   └── common_loading.xml
│       │       │               └── values/
│       │       │                   ├── colors.xml
│       │       │                   ├── strings.xml
│       │       │                   └── themes.xml
│       │       ├── maven-wgllss-dynamic-host-library/
│       │       │   ├── .gitignore
│       │       │   ├── build.gradle
│       │       │   ├── consumer-rules.pro
│       │       │   ├── proguard-rules.pro
│       │       │   └── src/
│       │       │       ├── androidTest/
│       │       │       │   └── java/
│       │       │       │       └── com/
│       │       │       │           └── wgllss/
│       │       │       │               └── host/
│       │       │       │                   └── library/
│       │       │       │                       └── ExampleInstrumentedTest.kt
│       │       │       ├── main/
│       │       │       │   └── AndroidManifest.xml
│       │       │       └── test/
│       │       │           └── java/
│       │       │               └── com/
│       │       │                   └── wgllss/
│       │       │                       └── host/
│       │       │                           └── library/
│       │       │                               └── ExampleUnitTest.kt
│       │       └── maven-wgllss-dynamic-host-skin-resource-lib/
│       │           ├── .gitignore
│       │           ├── build.gradle
│       │           ├── proguard-rules.pro
│       │           └── src/
│       │               └── main/
│       │                   ├── AndroidManifest.xml
│       │                   └── res/
│       │                       ├── drawable/
│       │                       │   ├── ic_baseline_pause_36.xml
│       │                       │   ├── ic_baseline_play_arrow_36.xml
│       │                       │   ├── ic_baseline_skip_next_36.xml
│       │                       │   ├── ic_baseline_skip_previous_36.xml
│       │                       │   ├── splash_preview.xml
│       │                       │   └── splash_preview_dark.xml
│       │                       ├── values/
│       │                       │   ├── colors.xml
│       │                       │   ├── dimens.xml
│       │                       │   ├── ids.xml
│       │                       │   ├── strings.xml
│       │                       │   └── themes.xml
│       │                       ├── values-night/
│       │                       │   ├── colors.xml
│       │                       │   └── themes.xml
│       │                       ├── values-v27/
│       │                       │   └── themes.xml
│       │                       └── values-v29/
│       │                           └── themes.xml
│       └── WX-Plugin/
│           ├── Maven-Wgllss-Dynamic-Plugin-Common-Library/
│           │   ├── .gitignore
│           │   ├── build.gradle
│           │   ├── proguard-rules.pro
│           │   └── src/
│           │       └── main/
│           │           ├── AndroidManifest.xml
│           │           └── java/
│           │               └── com/
│           │                   └── wgllss/
│           │                       └── core/
│           │                           ├── activity/
│           │                           │   ├── BaseActivity.kt
│           │                           │   ├── BaseMVVMActivity.kt
│           │                           │   ├── BaseViewModePluginActivity.kt
│           │                           │   ├── BaseViewModelActivity.kt
│           │                           │   ├── BaseViewModelClassActivity.kt
│           │                           │   ├── BaseViewPluginResActivity.kt
│           │                           │   ├── WActivityManager.kt
│           │                           │   └── compose/
│           │                           │       └── BaseComposeActivity.kt
│           │                           ├── adapter/
│           │                           │   ├── BasePagerAdapter.kt
│           │                           │   ├── BasePluginRecyclerAdapter.kt
│           │                           │   ├── BaseRecyclerAdapter.kt
│           │                           │   └── ViewPage2ChildFragmentAdapter.kt
│           │                           ├── data/
│           │                           │   └── DialogBean.kt
│           │                           ├── ex/
│           │                           │   ├── Context.kt
│           │                           │   ├── Fragment.kt
│           │                           │   ├── FragmentActivity.kt
│           │                           │   ├── ImageView.kt
│           │                           │   ├── SwipeRefreshLayout.kt
│           │                           │   └── ViewModel.kt
│           │                           ├── fragment/
│           │                           │   ├── BaseFragment.kt
│           │                           │   ├── BasePluginResFragment.kt
│           │                           │   ├── BaseViewModelClassFragment.kt
│           │                           │   ├── BaseViewModelFragment.kt
│           │                           │   └── BaseViewModelPluginFragment.kt
│           │                           ├── http/
│           │                           │   ├── HttpRequest.kt
│           │                           │   └── HttpUrlConnectionRequest.kt
│           │                           ├── material/
│           │                           │   └── ThemeUtils.kt
│           │                           ├── units/
│           │                           │   ├── DeviceIdUtilX.kt
│           │                           │   ├── ImageUtils.kt
│           │                           │   ├── ResourceUtils.kt
│           │                           │   ├── ScreenManager.kt
│           │                           │   ├── SdkIntUtils.kt
│           │                           │   ├── ServiceUtil.kt
│           │                           │   ├── StatusBarUtil.kt
│           │                           │   └── WLog.kt
│           │                           ├── viewmodel/
│           │                           │   └── BaseViewModel.kt
│           │                           └── widget/
│           │                               ├── ButtomNavigationViewEx.kt
│           │                               ├── DividerGridItemDecoration.kt
│           │                               ├── DrawerBack.kt
│           │                               ├── MusicVisualizerView.kt
│           │                               └── OnRecyclerViewItemClickListener.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-Generate/
│           │   ├── maven-wgllss-sample-create-all-app/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── version/
│           │   │                               └── json/
│           │   │                                   └── Test.kt
│           │   ├── maven-wgllss-sample-create-version-config-annotations/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   └── src/
│           │   │       └── main/
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── annotations/
│           │   │                           └── CreateVersionConfig.kt
│           │   ├── maven-wgllss-sample-create-version-config-app/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── version/
│           │   │                               └── json/
│           │   │                                   └── Test.kt
│           │   └── maven-wgllss-sample-create-version-config-compiler/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── libs/
│           │       │   ├── Wgllss-Dynamic-Host-Protobuf-lib.jar
│           │       │   └── classes.jar
│           │       └── src/
│           │           └── main/
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           └── compiler/
│           │                               └── AptCreateConfigProcessor.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-Manager/
│           │   ├── Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── plugin/
│           │   │                               └── download_face/
│           │   │                                   └── DownLoadFaceImpl.kt
│           │   ├── Maven-Wgllss-Dynamic-Plugin-Loader-Impl/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           └── plugin/
│           │   │                               └── loader/
│           │   │                                   └── LoaderManagerImpl.kt
│           │   └── Maven-Wgllss-Dynamic-Plugin-Manager/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           └── main/
│           │               ├── AndroidManifest.xml
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           └── dynamic/
│           │                               └── plugin/
│           │                                   └── manager/
│           │                                       ├── PluginManager.kt
│           │                                       └── PluginResource.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-SDK/
│           │   ├── Maven-Wgllss-Dynamic-Plugin-Library/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── consumer-rules.pro
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       ├── main/
│           │   │       │   ├── AndroidManifest.xml
│           │   │       │   └── java/
│           │   │       │       └── com/
│           │   │       │           └── wgllss/
│           │   │       │               └── dynamic/
│           │   │       │                   └── runtime/
│           │   │       │                       └── library/
│           │   │       │                           ├── WXDynamicAidlInterface.java
│           │   │       │                           ├── WXHostActivityDelegate.java
│           │   │       │                           └── WXHostServiceDelegate.java
│           │   │       └── test/
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── plugin/
│           │   │                           └── library/
│           │   │                               └── ExampleUnitTest.kt
│           │   └── Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── consumer-rules.pro
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           ├── main/
│           │           │   ├── AndroidManifest.xml
│           │           │   └── java/
│           │           │       └── com/
│           │           │           └── wgllss/
│           │           │               └── dynamic/
│           │           │                   └── plugin/
│           │           │                       └── runtime/
│           │           │                           ├── HostComposePluginActivity.java
│           │           │                           ├── HostPluginActivity.java
│           │           │                           ├── HostPluginService.java
│           │           │                           ├── PluginClassLoader.java
│           │           │                           ├── PluginProcessStartNotStickyService.java
│           │           │                           ├── PluginProcessStartRedeliverIntentService.java
│           │           │                           ├── PluginProcessStartStickyCompatibilityService.java
│           │           │                           ├── PluginProcessStartStickyService.java
│           │           │                           ├── PluginSingleInstanceActivity.java
│           │           │                           ├── PluginSingleInstanceComposeActivity.java
│           │           │                           ├── PluginSingleTaskActivity.java
│           │           │                           ├── PluginSingleTaskComposeActivity.java
│           │           │                           ├── PluginSingleTopActivity.java
│           │           │                           ├── PluginSingleTopComposeActivity.java
│           │           │                           ├── PluginStandardActivity.java
│           │           │                           ├── PluginStandardComposeActivity.java
│           │           │                           ├── PluginStartNotStickyService.java
│           │           │                           ├── PluginStartRedeliverIntentService.java
│           │           │                           ├── PluginStartStickyCompatibilityService.java
│           │           │                           └── PluginStartStickyService.java
│           │           └── test/
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           └── dynamic/
│           │                               └── runtime/
│           │                                   └── ExampleUnitTest.kt
│           ├── Maven-Wgllss-Dynamic-Plugin-Sample/
│           │   ├── README.md
│           │   ├── maven-wgllss-sample-assets-source-apk/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── assets/
│           │   │               ├── css/
│           │   │               │   └── main.8f39d45c.css
│           │   │               └── js/
│           │   │                   ├── jquery.js
│           │   │                   └── jquery.lazyload.js
│           │   ├── maven-wgllss-sample-business-library/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── sample/
│           │   │                           ├── data/
│           │   │                           │   ├── ImgExtraData.kt
│           │   │                           │   ├── NewsBean.kt
│           │   │                           │   └── SampleItemBean.kt
│           │   │                           ├── datasource/
│           │   │                           │   ├── net/
│           │   │                           │   │   ├── HeaderInterceptor.kt
│           │   │                           │   │   ├── MyApi.kt
│           │   │                           │   │   └── RetrofitUtils.kt
│           │   │                           │   └── repository/
│           │   │                           │       └── NewsRepository.kt
│           │   │                           ├── feature_system/
│           │   │                           │   ├── music/
│           │   │                           │   │   ├── exoplayerimpl/
│           │   │                           │   │   │   ├── ExoPlayerUtils.kt
│           │   │                           │   │   │   └── MusicServiceConnection.kt
│           │   │                           │   │   ├── extensions/
│           │   │                           │   │   │   ├── MediaExtensions.kt
│           │   │                           │   │   │   ├── MediaMetadataCompatExt.kt
│           │   │                           │   │   │   └── PlaybackStateCompatExt.kt
│           │   │                           │   │   └── notification/
│           │   │                           │   │       ├── WXNotificationListener.kt
│           │   │                           │   │       └── WXPlayerNotificationManager.kt
│           │   │                           │   ├── room/
│           │   │                           │   │   ├── CollectDataBase.kt
│           │   │                           │   │   ├── dao/
│           │   │                           │   │   │   └── CollectDao.kt
│           │   │                           │   │   ├── help/
│           │   │                           │   │   │   ├── RoomDBHelper.kt
│           │   │                           │   │   │   └── RoomDBMigration.kt
│           │   │                           │   │   └── table/
│           │   │                           │   │       └── CollectTableBean.kt
│           │   │                           │   ├── savestatus/
│           │   │                           │   │   └── MMKVHelp.kt
│           │   │                           │   ├── services/
│           │   │                           │   │   └── MusicService.kt
│           │   │                           │   └── untils/
│           │   │                           │       └── UUIDHelp.kt
│           │   │                           └── features_ui/
│           │   │                               └── playing/
│           │   │                                   └── activity/
│           │   │                                       └── NotificationTargetActivity.kt
│           │   ├── maven-wgllss-sample-loader-version/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── loader/
│           │   │                           └── version/
│           │   │                               └── LoaderVersionImpl.kt
│           │   ├── maven-wgllss-sample-skin-resource-apk/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-wgllss-sample-ui-home/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           ├── impl/
│           │   │                           │   └── ILoadHomeImpl.kt
│           │   │                           ├── initializer/
│           │   │                           │   └── InitHomeFirstInitialize.kt
│           │   │                           ├── provider/
│           │   │                           │   └── TestContentProvider.kt
│           │   │                           ├── sample/
│           │   │                           │   ├── feature_home/
│           │   │                           │   │   ├── adapter/
│           │   │                           │   │   │   └── HomeNewsAdapter.kt
│           │   │                           │   │   ├── fragment/
│           │   │                           │   │   │   ├── HomeFragment.kt
│           │   │                           │   │   │   └── HomeTabFragment.kt
│           │   │                           │   │   ├── pkg/
│           │   │                           │   │   │   └── ResourceContains.kt
│           │   │                           │   │   └── viewmodels/
│           │   │                           │   │       ├── HomeTabViewModel.kt
│           │   │                           │   │       ├── HomeViewModel.kt
│           │   │                           │   │       └── SettingViewModel.kt
│           │   │                           │   └── feature_startup/
│           │   │                           │       └── startup/
│           │   │                           │           ├── GenerateHomeLayout.kt
│           │   │                           │           ├── HomeContains.kt
│           │   │                           │           ├── InitHomeFirstInitializeHelp.kt
│           │   │                           │           └── LaunchInflateKey.kt
│           │   │                           └── ui/
│           │   │                               └── HomeActivity.kt
│           │   ├── maven-wgllss-sample-ui-loading/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── java/
│           │   │               └── com/
│           │   │                   └── wgllss/
│           │   │                       └── dynamic/
│           │   │                           ├── initializer/
│           │   │                           │   └── InitHomeFirstInitialize.kt
│           │   │                           ├── system/
│           │   │                           │   └── broadcast/
│           │   │                           │       ├── BroadCastAction.kt
│           │   │                           │       └── DownLoadCompleteBroadCast.kt
│           │   │                           └── ui/
│           │   │                               └── HomeActivity.kt
│           │   ├── maven-wgllss-sample-ui-other/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               └── layout/
│           │   │                   ├── adapter_collection_item.xml
│           │   │                   ├── adapter_sample_item.xml
│           │   │                   ├── fragment_collection.xml
│           │   │                   ├── fragment_sample.xml
│           │   │                   └── fragment_setting.xml
│           │   ├── maven-wgllss-sample-ui-other-lib/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           ├── java/
│           │   │           │   └── com/
│           │   │           │       └── wgllss/
│           │   │           │           └── sample/
│           │   │           │               ├── datasource/
│           │   │           │               │   ├── SettingRepository.kt
│           │   │           │               │   └── SkinPluginBean.kt
│           │   │           │               └── features_ui/
│           │   │           │                   └── page/
│           │   │           │                       ├── base/
│           │   │           │                       │   ├── BasePluginActivity.kt
│           │   │           │                       │   ├── BasePluginFragment.kt
│           │   │           │                       │   └── SkinContains.kt
│           │   │           │                       └── home/
│           │   │           │                           ├── adapter/
│           │   │           │                           │   ├── CollectionAdapter.kt
│           │   │           │                           │   ├── SampleAdapter.kt
│           │   │           │                           │   └── SkinAdapter.kt
│           │   │           │                           ├── fragment/
│           │   │           │                           │   ├── CollectFragment.kt
│           │   │           │                           │   ├── SampleFragment.kt
│           │   │           │                           │   └── SettingFragment.kt
│           │   │           │                           └── viewmodels/
│           │   │           │                               ├── CollectViewModel.kt
│           │   │           │                               ├── SampleViewModel.kt
│           │   │           │                               └── SettingViewModel.kt
│           │   │           └── res/
│           │   │               └── layout/
│           │   │                   ├── activity_locker.xml
│           │   │                   ├── activity_play.xml
│           │   │                   ├── adapter_home_item_music.xml
│           │   │                   ├── adapter_item_music.xml
│           │   │                   ├── adapter_music_playlist_item.xml
│           │   │                   ├── fragment_history.xml
│           │   │                   ├── fragment_locker.xml
│           │   │                   ├── fragment_play.xml
│           │   │                   ├── fragment_search.xml
│           │   │                   ├── fragment_setting.xml
│           │   │                   └── music_cd_layout.xml
│           │   ├── maven-wgllss-sample-ui-other2/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               └── layout/
│           │   │                   ├── activity_locker.xml
│           │   │                   ├── activity_other2.xml
│           │   │                   ├── activity_other3.xml
│           │   │                   ├── activity_play.xml
│           │   │                   ├── activity_video.xml
│           │   │                   ├── activity_webview.xml
│           │   │                   ├── dialog_sample.xml
│           │   │                   ├── fragment_activity_sample.xml
│           │   │                   ├── fragment_broadcast_sample.xml
│           │   │                   ├── fragment_dialog_sample.xml
│           │   │                   ├── fragment_locker.xml
│           │   │                   ├── fragment_notification_sample.xml
│           │   │                   ├── fragment_play.xml
│           │   │                   ├── fragment_provider_sample.xml
│           │   │                   ├── fragment_service_sample.xml
│           │   │                   ├── fragment_so_sample.xml
│           │   │                   └── music_cd_layout.xml
│           │   └── maven-wgllss-sample-ui-other2-lib2/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           └── main/
│           │               ├── AndroidManifest.xml
│           │               └── java/
│           │                   └── com/
│           │                       └── wgllss/
│           │                           ├── nativex/
│           │                           │   ├── MainActivity.kt
│           │                           │   └── NativeCallBack.kt
│           │                           ├── sample/
│           │                           │   └── features_ui/
│           │                           │       └── page/
│           │                           │           ├── base/
│           │                           │           │   ├── BasePluginActivity.kt
│           │                           │           │   ├── BasePluginComposeActivity.kt
│           │                           │           │   ├── BasePluginFragment.kt
│           │                           │           │   └── SkinContains.kt
│           │                           │           └── other2/
│           │                           │               ├── activity/
│           │                           │               │   ├── AudioActivity.kt
│           │                           │               │   ├── ComposeDemoActivity.kt
│           │                           │               │   ├── Other2Activity.kt
│           │                           │               │   ├── Other3Activity.kt
│           │                           │               │   ├── VideoActivity.kt
│           │                           │               │   └── WebViewActivity.kt
│           │                           │               ├── broadcast/
│           │                           │               │   └── TestBroadCast.kt
│           │                           │               ├── dialog/
│           │                           │               │   └── MyDialog.kt
│           │                           │               ├── fragment/
│           │                           │               │   ├── SampleActivityFragment.kt
│           │                           │               │   ├── SampleBroadCastFragment.kt
│           │                           │               │   ├── SampleContentProviderFragment.kt
│           │                           │               │   ├── SampleDialogFragment.kt
│           │                           │               │   ├── SampleMusicFragment.kt
│           │                           │               │   ├── SampleNotificationFragment.kt
│           │                           │               │   ├── SampleServiceFragment.kt
│           │                           │               │   └── SampleSoFragment.kt
│           │                           │               ├── service/
│           │                           │               │   ├── MyProcessService.kt
│           │                           │               │   ├── MyService.kt
│           │                           │               │   ├── MyService2.kt
│           │                           │               │   └── MyService3.kt
│           │                           │               ├── viewmodel/
│           │                           │               │   ├── ComposeDemoViewModel.kt
│           │                           │               │   ├── Other2ViewModel.kt
│           │                           │               │   ├── PlayModel.kt
│           │                           │               │   ├── SampleActivityViewModel.kt
│           │                           │               │   └── WebViewModel.kt
│           │                           │               └── web/
│           │                           │                   └── ImplWebViewClient.kt
│           │                           └── theme/
│           │                               ├── Color.kt
│           │                               ├── Theme.kt
│           │                               └── Type.kt
│           ├── Maven-Wgllss-Dynamic-Plugin_Skin/
│           │   ├── maven-blue-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-brown-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-dark-blue-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-dark-green-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-dark-red-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-green-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-light-green-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-orange-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   ├── maven-pink-resource/
│           │   │   ├── .gitignore
│           │   │   ├── build.gradle
│           │   │   ├── proguard-rules.pro
│           │   │   └── src/
│           │   │       └── main/
│           │   │           ├── AndroidManifest.xml
│           │   │           └── res/
│           │   │               ├── drawable/
│           │   │               │   ├── bottom_navigation_color_selector.xml
│           │   │               │   ├── circle_gray_border.xml
│           │   │               │   ├── ic_baseline_arrow_back_24.xml
│           │   │               │   ├── ic_baseline_grade_24.xml
│           │   │               │   ├── ic_baseline_pause_36.xml
│           │   │               │   ├── ic_baseline_play_arrow_36.xml
│           │   │               │   ├── ic_baseline_search_24.xml
│           │   │               │   ├── ic_baseline_skip_next_36.xml
│           │   │               │   ├── ic_baseline_skip_previous_36.xml
│           │   │               │   ├── ic_dashboard_black_24dp.xml
│           │   │               │   ├── ic_home_black_24dp.xml
│           │   │               │   ├── ic_notifications_black_24dp.xml
│           │   │               │   ├── ic_round_queue_music_24.xml
│           │   │               │   ├── play_btn_play_pause_selector.xml
│           │   │               │   ├── play_load_drawable.xml
│           │   │               │   ├── play_mode_level_list.xml
│           │   │               │   ├── seek_bar_progress_style.xml
│           │   │               │   ├── seekbar_circle_red_border.xml
│           │   │               │   ├── seekbar_thumb.xml
│           │   │               │   ├── switch_thumb_selector.xml
│           │   │               │   └── switch_track_selector.xml
│           │   │               ├── values/
│           │   │               │   ├── colors.xml
│           │   │               │   ├── dimens.xml
│           │   │               │   ├── ids.xml
│           │   │               │   ├── strings.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-night/
│           │   │               │   ├── colors.xml
│           │   │               │   └── themes.xml
│           │   │               ├── values-v27/
│           │   │               │   └── themes.xml
│           │   │               └── values-v29/
│           │   │                   └── themes.xml
│           │   └── maven-red-resource/
│           │       ├── .gitignore
│           │       ├── build.gradle
│           │       ├── proguard-rules.pro
│           │       └── src/
│           │           └── main/
│           │               ├── AndroidManifest.xml
│           │               └── res/
│           │                   ├── drawable/
│           │                   │   ├── bottom_navigation_color_selector.xml
│           │                   │   ├── circle_gray_border.xml
│           │                   │   ├── ic_baseline_arrow_back_24.xml
│           │                   │   ├── ic_baseline_grade_24.xml
│           │                   │   ├── ic_baseline_pause_36.xml
│           │                   │   ├── ic_baseline_play_arrow_36.xml
│           │                   │   ├── ic_baseline_search_24.xml
│           │                   │   ├── ic_baseline_skip_next_36.xml
│           │                   │   ├── ic_baseline_skip_previous_36.xml
│           │                   │   ├── ic_dashboard_black_24dp.xml
│           │                   │   ├── ic_home_black_24dp.xml
│           │                   │   ├── ic_notifications_black_24dp.xml
│           │                   │   ├── ic_round_queue_music_24.xml
│           │                   │   ├── play_btn_play_pause_selector.xml
│           │                   │   ├── play_load_drawable.xml
│           │                   │   ├── play_mode_level_list.xml
│           │                   │   ├── seek_bar_progress_style.xml
│           │                   │   ├── seekbar_circle_red_border.xml
│           │                   │   ├── seekbar_thumb.xml
│           │                   │   ├── switch_thumb_selector.xml
│           │                   │   └── switch_track_selector.xml
│           │                   ├── values/
│           │                   │   ├── colors.xml
│           │                   │   ├── dimens.xml
│           │                   │   ├── ids.xml
│           │                   │   ├── strings.xml
│           │                   │   └── themes.xml
│           │                   ├── values-night/
│           │                   │   ├── colors.xml
│           │                   │   └── themes.xml
│           │                   ├── values-v27/
│           │                   │   └── themes.xml
│           │                   └── values-v29/
│           │                       └── themes.xml
│           └── README.md
├── WX-Resource/
│   ├── B05F9543937A5BA61901FC14F2540C62DA3E86C2/
│   │   └── 10000/
│   │       ├── classes_business_lib_dex
│   │       ├── classes_business_web_res
│   │       ├── classes_common_lib_dex
│   │       ├── classes_common_skin_res
│   │       ├── classes_home_dex
│   │       ├── classes_loading_dex
│   │       ├── classes_manager_dex
│   │       ├── classes_other2_dex
│   │       ├── classes_other2_res
│   │       ├── classes_other_dex
│   │       ├── classes_other_res
│   │       ├── classes_version_dex
│   │       ├── classes_wgllss_dynamic_plugin_runtime
│   │       └── vc
│   ├── dxde_m_p/
│   │   └── 10000/
│   │       ├── classes_business_lib_dex
│   │       ├── classes_business_web_res
│   │       ├── classes_common_lib_dex
│   │       ├── classes_common_skin_res
│   │       ├── classes_home_dex
│   │       ├── classes_loading_dex
│   │       ├── classes_manager_dex
│   │       ├── classes_other2_dex
│   │       ├── classes_other2_res
│   │       ├── classes_other_dex
│   │       ├── classes_other_res
│   │       ├── classes_version_dex
│   │       ├── classes_wgllss_dynamic_plugin_runtime
│   │       └── vc
│   └── skins/
│       ├── blue.apk
│       ├── brown.apk
│       ├── dark_blue.apk
│       ├── dark_red.apk
│       ├── light_green.apk
│       ├── orange.apk
│       ├── pink.apk
│       ├── red_green.apk
│       ├── skin_dark_green.apk
│       ├── skin_green.apk
│       └── skins.txt
├── build.gradle
├── gradle/
│   ├── libs.versions.toml
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
Download .txt
SYMBOL INDEX (353 symbols across 52 files)

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXDynamicAidlInterface.java
  type WXDynamicAidlInterface (line 3) | public interface WXDynamicAidlInterface extends android.os.IInterface {
    class Default (line 5) | class Default implements com.wgllss.dynamic.runtime.library.WXDynamicA...
      method onBind (line 6) | @Override
      method onUnbind (line 10) | @Override
      method onAidlCallBack (line 14) | @Override
      method asBinder (line 19) | @Override
    class Stub (line 25) | abstract class Stub extends android.os.Binder implements com.wgllss.dy...
      method Stub (line 28) | public Stub() {
      method asInterface (line 32) | public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterf...
      method asBinder (line 43) | @Override
      method onTransact (line 48) | @Override
      class Proxy (line 93) | private static class Proxy implements com.wgllss.dynamic.runtime.lib...
        method Proxy (line 96) | Proxy(android.os.IBinder remote) {
        method asBinder (line 100) | @Override
        method getInterfaceDescriptor (line 105) | public java.lang.String getInterfaceDescriptor() {
        method onBind (line 109) | @Override
        method onUnbind (line 130) | @Override
        method onAidlCallBack (line 149) | @Override
      method setDefaultImpl (line 178) | public static boolean setDefaultImpl(com.wgllss.dynamic.runtime.libr...
      method getDefaultImpl (line 189) | public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterf...
    method onBind (line 194) | void onBind(java.lang.String serviceName, java.lang.String packageName...
    method onUnbind (line 196) | void onUnbind(java.lang.String serviceName) throws android.os.RemoteEx...
    method onAidlCallBack (line 198) | java.lang.String onAidlCallBack(java.lang.String serviceName, int meth...

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostActivityDelegate.java
  type WXHostActivityDelegate (line 11) | public interface WXHostActivityDelegate {
    method attachContext (line 13) | void attachContext(FragmentActivity context, Resources resources);
    method attachContext (line 15) | void attachContext(ComponentActivity context, Resources resources);
    method onCreate (line 17) | void onCreate(Bundle savedInstanceState);
    method onRestart (line 19) | void onRestart();
    method onStart (line 21) | void onStart();
    method onResume (line 23) | void onResume();
    method onPause (line 25) | void onPause();
    method onStop (line 27) | void onStop();
    method onDestroy (line 29) | void onDestroy();
    method lazyInitValue (line 31) | void lazyInitValue();
    method onSaveInstanceState (line 33) | void onSaveInstanceState(Bundle outState);
    method onConfigurationChanged (line 35) | void onConfigurationChanged(Configuration newConfig);

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostServiceDelegate.java
  type WXHostServiceDelegate (line 7) | public interface WXHostServiceDelegate {
    method attachBaseContext (line 9) | void attachBaseContext(Context newBase);
    method onBind (line 11) | IBinder onBind(Intent intent);
    method onCreate (line 13) | void onCreate();
    method onStart (line 15) | void onStart(Intent intent, int startId);
    method onStartCommand (line 17) | int onStartCommand(Intent intent, int flags, int startId);
    method onUnbind (line 19) | boolean onUnbind(Intent intent);
    method onDestroy (line 21) | void onDestroy();
    method callMethodByID (line 23) | String callMethodByID(int methodID);

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostComposePluginActivity.java
  class HostComposePluginActivity (line 24) | public class HostComposePluginActivity extends BaseComposeActivity {
    method onSaveInstanceState (line 35) | @Override
    method onCreate (line 44) | @Override
    method onRestart (line 90) | @Override
    method onStart (line 96) | @Override
    method onResume (line 102) | @Override
    method onPause (line 108) | @Override
    method onStop (line 114) | @Override
    method onDestroy (line 120) | @Override
    method onWindowFocusChanged (line 126) | @Override
    method onConfigurationChanged (line 137) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginActivity.java
  class HostPluginActivity (line 27) | public class HostPluginActivity extends BaseActivity {
    method onSaveInstanceState (line 38) | @Override
    method onCreate (line 47) | @Override
    method onRestart (line 92) | @Override
    method onStart (line 98) | @Override
    method onResume (line 104) | @Override
    method onPause (line 110) | @Override
    method onStop (line 116) | @Override
    method onDestroy (line 122) | @Override
    method onWindowFocusChanged (line 128) | @Override
    method onPointerCaptureChanged (line 140) | @Override
    method onConfigurationChanged (line 145) | @Override
    method initControl (line 151) | @Override
    method bindEvent (line 156) | @Override
    method initValue (line 161) | @Override
    method addMenuProvider (line 166) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginService.java
  class HostPluginService (line 19) | public abstract class HostPluginService extends Service {
    method onBind (line 24) | @Nullable
    method onCreate (line 51) | @Override
    method onStart (line 56) | @Override
    method onStartCommand (line 66) | @Override
    method onStartCommand (line 77) | public abstract int onStartCommand();
    method onUnbind (line 79) | @Override
    method onDestroy (line 91) | @Override
    method initPluginService (line 101) | private void initPluginService(Intent intent, boolean isOnBind) {

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginClassLoader.java
  class PluginClassLoader (line 6) | public class PluginClassLoader extends WXClassLoader {
    method PluginClassLoader (line 9) | public PluginClassLoader(String privatePackage, String dexPath, String...
    method loadClass (line 14) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartNotStickyService.java
  class PluginProcessStartNotStickyService (line 3) | public class PluginProcessStartNotStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartRedeliverIntentService.java
  class PluginProcessStartRedeliverIntentService (line 3) | public class PluginProcessStartRedeliverIntentService extends HostPlugin...
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyCompatibilityService.java
  class PluginProcessStartStickyCompatibilityService (line 3) | public class PluginProcessStartStickyCompatibilityService extends HostPl...
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyService.java
  class PluginProcessStartStickyService (line 3) | public class PluginProcessStartStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceActivity.java
  class PluginSingleInstanceActivity (line 3) | public class PluginSingleInstanceActivity extends HostPluginActivity{

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceComposeActivity.java
  class PluginSingleInstanceComposeActivity (line 3) | public class PluginSingleInstanceComposeActivity extends HostComposePlug...

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskActivity.java
  class PluginSingleTaskActivity (line 3) | public class PluginSingleTaskActivity extends HostPluginActivity{

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskComposeActivity.java
  class PluginSingleTaskComposeActivity (line 3) | public class PluginSingleTaskComposeActivity extends HostComposePluginAc...

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopActivity.java
  class PluginSingleTopActivity (line 3) | public class PluginSingleTopActivity extends HostPluginActivity{

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopComposeActivity.java
  class PluginSingleTopComposeActivity (line 3) | public class PluginSingleTopComposeActivity extends HostComposePluginAct...

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardActivity.java
  class PluginStandardActivity (line 3) | public class PluginStandardActivity extends HostPluginActivity{

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardComposeActivity.java
  class PluginStandardComposeActivity (line 3) | public class PluginStandardComposeActivity extends HostComposePluginActi...

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartNotStickyService.java
  class PluginStartNotStickyService (line 3) | public class PluginStartNotStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartRedeliverIntentService.java
  class PluginStartRedeliverIntentService (line 3) | public class PluginStartRedeliverIntentService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyCompatibilityService.java
  class PluginStartStickyCompatibilityService (line 3) | public class PluginStartStickyCompatibilityService extends HostPluginSer...
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyService.java
  class PluginStartStickyService (line 3) | public class PluginStartStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/js/jquery.js
  function M (line 4) | function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.n...
  function at (line 4) | function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)...
  function st (line 4) | function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLeng...
  function lt (line 4) | function lt(e){return e[b]=!0,e}
  function ut (line 4) | function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){re...
  function ct (line 4) | function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[...
  function pt (line 4) | function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sou...
  function ft (line 4) | function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"...
  function dt (line 4) | function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(...
  function ht (line 4) | function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,...
  function gt (line 4) | function gt(){}
  function mt (line 4) | function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0)...
  function yt (line 4) | function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}
  function vt (line 4) | function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.firs...
  function bt (line 4) | function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i-...
  function xt (line 4) | function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)...
  function wt (line 4) | function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)...
  function Tt (line 4) | function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relat...
  function Ct (line 4) | function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d)...
  function Nt (line 4) | function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}
  function kt (line 4) | function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0...
  function F (line 4) | function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t...
  function R (line 5) | function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType...
  function W (line 5) | function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e...
  function $ (line 5) | function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-...
  function I (line 5) | function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&...
  function it (line 5) | function it(){return!0}
  function ot (line 5) | function ot(){return!1}
  function at (line 5) | function at(){try{return a.activeElement}catch(e){}}
  function pt (line 5) | function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
  function ft (line 5) | function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){retu...
  function dt (line 5) | function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.cre...
  function Lt (line 5) | function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType...
  function Ht (line 5) | function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}
  function qt (line 5) | function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttrib...
  function _t (line 5) | function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval...
  function Mt (line 5) | function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e)...
  function Ot (line 5) | function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCas...
  function Ft (line 5) | function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getEl...
  function Bt (line 5) | function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}
  function tn (line 6) | function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.sl...
  function nn (line 6) | function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(...
  function rn (line 6) | function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.sty...
  function on (line 6) | function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[...
  function an (line 6) | function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:...
  function sn (line 6) | function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o...
  function ln (line 6) | function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(...
  function un (line 6) | function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[...
  function gn (line 6) | function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn....
  function Hn (line 6) | function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var ...
  function qn (line 6) | function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!...
  function _n (line 6) | function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i...
  function k (line 6) | function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t...
  function Mn (line 6) | function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[...
  function On (line 6) | function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])fo...
  function In (line 6) | function In(){try{return new e.XMLHttpRequest}catch(t){}}
  function zn (line 6) | function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function Kn (line 6) | function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}
  function Zn (line 6) | function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;fo...
  function er (line 6) | function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(functio...
  function tr (line 6) | function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e...
  function nr (line 6) | function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&n...
  function rr (line 6) | function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}
  function ir (line 6) | function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r...
  function or (line 6) | function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.pa...

FILE: WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/js/jquery.lazyload.js
  function update (line 21) | function update() {

FILE: WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/classloader/PluginKey.java
  class PluginKey (line 3) | public class PluginKey {

FILE: WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/classloader/WXClassLoader.java
  class WXClassLoader (line 5) | public class WXClassLoader extends DexClassLoader {
    method WXClassLoader (line 8) | public WXClassLoader(String dexPath, String optimizedDirectory, ClassL...
    method WXClassLoader (line 13) | public WXClassLoader(String dexPath, String optimizedDirectory, String...
    method getInterface (line 18) | public <T> T getInterface(Class<T> clazz, String className) {

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXDynamicAidlInterface.java
  type WXDynamicAidlInterface (line 3) | public interface WXDynamicAidlInterface extends android.os.IInterface {
    class Default (line 5) | class Default implements com.wgllss.dynamic.runtime.library.WXDynamicA...
      method onBind (line 6) | @Override
      method onUnbind (line 10) | @Override
      method onAidlCallBack (line 14) | @Override
      method asBinder (line 19) | @Override
    class Stub (line 25) | abstract class Stub extends android.os.Binder implements com.wgllss.dy...
      method Stub (line 28) | public Stub() {
      method asInterface (line 32) | public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterf...
      method asBinder (line 43) | @Override
      method onTransact (line 48) | @Override
      class Proxy (line 93) | private static class Proxy implements com.wgllss.dynamic.runtime.lib...
        method Proxy (line 96) | Proxy(android.os.IBinder remote) {
        method asBinder (line 100) | @Override
        method getInterfaceDescriptor (line 105) | public java.lang.String getInterfaceDescriptor() {
        method onBind (line 109) | @Override
        method onUnbind (line 130) | @Override
        method onAidlCallBack (line 149) | @Override
      method setDefaultImpl (line 178) | public static boolean setDefaultImpl(com.wgllss.dynamic.runtime.libr...
      method getDefaultImpl (line 189) | public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterf...
    method onBind (line 194) | void onBind(java.lang.String serviceName, java.lang.String packageName...
    method onUnbind (line 196) | void onUnbind(java.lang.String serviceName) throws android.os.RemoteEx...
    method onAidlCallBack (line 198) | java.lang.String onAidlCallBack(java.lang.String serviceName, int meth...

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostActivityDelegate.java
  type WXHostActivityDelegate (line 11) | public interface WXHostActivityDelegate {
    method attachContext (line 13) | void attachContext(FragmentActivity context, Resources resources);
    method attachContext (line 15) | void attachContext(ComponentActivity context, Resources resources);
    method onCreate (line 17) | void onCreate(Bundle savedInstanceState);
    method onRestart (line 19) | void onRestart();
    method onStart (line 21) | void onStart();
    method onResume (line 23) | void onResume();
    method onPause (line 25) | void onPause();
    method onStop (line 27) | void onStop();
    method onDestroy (line 29) | void onDestroy();
    method lazyInitValue (line 31) | void lazyInitValue();
    method onSaveInstanceState (line 33) | void onSaveInstanceState(Bundle outState);
    method onConfigurationChanged (line 35) | void onConfigurationChanged(Configuration newConfig);

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostServiceDelegate.java
  type WXHostServiceDelegate (line 7) | public interface WXHostServiceDelegate {
    method attachBaseContext (line 9) | void attachBaseContext(Context newBase);
    method onBind (line 11) | IBinder onBind(Intent intent);
    method onCreate (line 13) | void onCreate();
    method onStart (line 15) | void onStart(Intent intent, int startId);
    method onStartCommand (line 17) | int onStartCommand(Intent intent, int flags, int startId);
    method onUnbind (line 19) | boolean onUnbind(Intent intent);
    method onDestroy (line 21) | void onDestroy();
    method callMethodByID (line 23) | String callMethodByID(int methodID);

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostComposePluginActivity.java
  class HostComposePluginActivity (line 24) | public class HostComposePluginActivity extends BaseComposeActivity {
    method onSaveInstanceState (line 35) | @Override
    method onCreate (line 44) | @Override
    method onRestart (line 90) | @Override
    method onStart (line 96) | @Override
    method onResume (line 102) | @Override
    method onPause (line 108) | @Override
    method onStop (line 114) | @Override
    method onDestroy (line 120) | @Override
    method onWindowFocusChanged (line 126) | @Override
    method onConfigurationChanged (line 137) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginActivity.java
  class HostPluginActivity (line 27) | public class HostPluginActivity extends BaseActivity {
    method onSaveInstanceState (line 38) | @Override
    method onCreate (line 47) | @Override
    method onRestart (line 92) | @Override
    method onStart (line 98) | @Override
    method onResume (line 104) | @Override
    method onPause (line 110) | @Override
    method onStop (line 116) | @Override
    method onDestroy (line 122) | @Override
    method onWindowFocusChanged (line 128) | @Override
    method onPointerCaptureChanged (line 140) | @Override
    method onConfigurationChanged (line 145) | @Override
    method initControl (line 151) | @Override
    method bindEvent (line 156) | @Override
    method initValue (line 161) | @Override
    method addMenuProvider (line 166) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginService.java
  class HostPluginService (line 19) | public abstract class HostPluginService extends Service {
    method onBind (line 24) | @Nullable
    method onCreate (line 51) | @Override
    method onStart (line 56) | @Override
    method onStartCommand (line 66) | @Override
    method onStartCommand (line 77) | public abstract int onStartCommand();
    method onUnbind (line 79) | @Override
    method onDestroy (line 91) | @Override
    method initPluginService (line 101) | private void initPluginService(Intent intent, boolean isOnBind) {

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginClassLoader.java
  class PluginClassLoader (line 6) | public class PluginClassLoader extends WXClassLoader {
    method PluginClassLoader (line 9) | public PluginClassLoader(String privatePackage, String dexPath, String...
    method loadClass (line 14) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartNotStickyService.java
  class PluginProcessStartNotStickyService (line 3) | public class PluginProcessStartNotStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartRedeliverIntentService.java
  class PluginProcessStartRedeliverIntentService (line 3) | public class PluginProcessStartRedeliverIntentService extends HostPlugin...
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyCompatibilityService.java
  class PluginProcessStartStickyCompatibilityService (line 3) | public class PluginProcessStartStickyCompatibilityService extends HostPl...
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyService.java
  class PluginProcessStartStickyService (line 3) | public class PluginProcessStartStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceActivity.java
  class PluginSingleInstanceActivity (line 3) | public class PluginSingleInstanceActivity extends HostPluginActivity{

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceComposeActivity.java
  class PluginSingleInstanceComposeActivity (line 3) | public class PluginSingleInstanceComposeActivity extends HostComposePlug...

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskActivity.java
  class PluginSingleTaskActivity (line 3) | public class PluginSingleTaskActivity extends HostPluginActivity{

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskComposeActivity.java
  class PluginSingleTaskComposeActivity (line 3) | public class PluginSingleTaskComposeActivity extends HostComposePluginAc...

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopActivity.java
  class PluginSingleTopActivity (line 3) | public class PluginSingleTopActivity extends HostPluginActivity{

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopComposeActivity.java
  class PluginSingleTopComposeActivity (line 3) | public class PluginSingleTopComposeActivity extends HostComposePluginAct...

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardActivity.java
  class PluginStandardActivity (line 3) | public class PluginStandardActivity extends HostPluginActivity{

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardComposeActivity.java
  class PluginStandardComposeActivity (line 3) | public class PluginStandardComposeActivity extends HostComposePluginActi...

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartNotStickyService.java
  class PluginStartNotStickyService (line 3) | public class PluginStartNotStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartRedeliverIntentService.java
  class PluginStartRedeliverIntentService (line 3) | public class PluginStartRedeliverIntentService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyCompatibilityService.java
  class PluginStartStickyCompatibilityService (line 3) | public class PluginStartStickyCompatibilityService extends HostPluginSer...
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyService.java
  class PluginStartStickyService (line 3) | public class PluginStartStickyService extends HostPluginService {
    method onStartCommand (line 5) | @Override

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/src/main/assets/js/jquery.js
  function M (line 4) | function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.n...
  function at (line 4) | function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)...
  function st (line 4) | function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLeng...
  function lt (line 4) | function lt(e){return e[b]=!0,e}
  function ut (line 4) | function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){re...
  function ct (line 4) | function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[...
  function pt (line 4) | function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sou...
  function ft (line 4) | function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"...
  function dt (line 4) | function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(...
  function ht (line 4) | function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,...
  function gt (line 4) | function gt(){}
  function mt (line 4) | function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0)...
  function yt (line 4) | function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}
  function vt (line 4) | function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.firs...
  function bt (line 4) | function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i-...
  function xt (line 4) | function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)...
  function wt (line 4) | function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)...
  function Tt (line 4) | function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relat...
  function Ct (line 4) | function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d)...
  function Nt (line 4) | function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}
  function kt (line 4) | function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0...
  function F (line 4) | function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t...
  function R (line 5) | function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType...
  function W (line 5) | function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e...
  function $ (line 5) | function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-...
  function I (line 5) | function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&...
  function it (line 5) | function it(){return!0}
  function ot (line 5) | function ot(){return!1}
  function at (line 5) | function at(){try{return a.activeElement}catch(e){}}
  function pt (line 5) | function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}
  function ft (line 5) | function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){retu...
  function dt (line 5) | function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.cre...
  function Lt (line 5) | function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType...
  function Ht (line 5) | function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}
  function qt (line 5) | function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttrib...
  function _t (line 5) | function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval...
  function Mt (line 5) | function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e)...
  function Ot (line 5) | function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCas...
  function Ft (line 5) | function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getEl...
  function Bt (line 5) | function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}
  function tn (line 6) | function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.sl...
  function nn (line 6) | function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(...
  function rn (line 6) | function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.sty...
  function on (line 6) | function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[...
  function an (line 6) | function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:...
  function sn (line 6) | function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o...
  function ln (line 6) | function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(...
  function un (line 6) | function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[...
  function gn (line 6) | function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn....
  function Hn (line 6) | function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var ...
  function qn (line 6) | function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!...
  function _n (line 6) | function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i...
  function k (line 6) | function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t...
  function Mn (line 6) | function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while("*"===u[...
  function On (line 6) | function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])fo...
  function In (line 6) | function In(){try{return new e.XMLHttpRequest}catch(t){}}
  function zn (line 6) | function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(...
  function Kn (line 6) | function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}
  function Zn (line 6) | function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn["*"]),o=0,a=i.length;fo...
  function er (line 6) | function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(functio...
  function tr (line 6) | function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e...
  function nr (line 6) | function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&n...
  function rr (line 6) | function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}
  function ir (line 6) | function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r...
  function or (line 6) | function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.pa...

FILE: WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/src/main/assets/js/jquery.lazyload.js
  function update (line 21) | function update() {
Condensed preview — 1527 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,851K chars).
[
  {
    "path": ".gitignore",
    "chars": 232,
    "preview": "*.iml\n.gradle\n/local.properties\n/.idea/caches\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n/.idea/navEditor."
  },
  {
    "path": "LICENSE",
    "chars": 11557,
    "preview": "                                 Apache License\r\n                           Version 2.0, wgllss 2004\r\n                  "
  },
  {
    "path": "README.md",
    "chars": 16197,
    "preview": "# WXDynamicPlugin\n\n## 介绍\n\n#### 最新接入研究配置参考文章介绍  [Compose的全动态插件化框架支持了,已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.c"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/build.gradle",
    "chars": 4156,
    "preview": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    "
  },
  {
    "path": "WX/WX-Code/WX-Host/app/proguard-rules.pro",
    "chars": 4884,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/AndroidManifest.xml",
    "chars": 761,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/FaceImpl.kt",
    "chars": 2958,
    "preview": "package com.wgllss.dynamic.host\n\nimport android.text.TextUtils\nimport com.wgllss.core.units.DeviceIdUtil\nimport com.wgll"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/SampleApplication.kt",
    "chars": 521,
    "preview": "package com.wgllss.dynamic.host\n\nimport android.app.Application\nimport android.content.Context\nimport com.wgllss.core.un"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/VersionImpl.kt",
    "chars": 1370,
    "preview": "package com.wgllss.dynamic.host\n\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant\nimport com.wgllss.dyn"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/drawable/ic_launcher_background.xml",
    "chars": 4867,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector\n    android:height=\"108dp\"\n    android:width=\"108dp\"\n    android:viewport"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "chars": 1702,
    "preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    "
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
    "chars": 268,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <b"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/xml/backup_rules.xml",
    "chars": 478,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See htt"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/xml/data_extraction_rules.xml",
    "chars": 551,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n "
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/xml/network_security_config.xml",
    "chars": 291,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config xmlns:tools=\"http://schemas.android.com/tools\">\n    <!--"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/.gitignore",
    "chars": 15,
    "preview": "/build\n/.gradle"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/build.gradle",
    "chars": 1709,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugin"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/main/AndroidManifest.xml",
    "chars": 2870,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/main/java/com/wgllss/sample/feature_system/globle/Constants.kt",
    "chars": 896,
    "preview": "package com.wgllss.sample.feature_system.globle\n\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.bump"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/test/java/com/wgllss/sample/ExampleUnitTest.kt",
    "chars": 341,
    "preview": "package com.wgllss.sample\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will "
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/build.gradle",
    "chars": 2406,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    comp"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/AndroidManifest.xml",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/dialog/CommonLoadingView.kt",
    "chars": 922,
    "preview": "package com.wgllss.core.dialog\n\nimport android.content.Context\nimport android.view.Gravity\nimport android.view.View\nimpo"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/ContextEX.kt",
    "chars": 450,
    "preview": "package com.wgllss.core.ex\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimp"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/Flow.kt",
    "chars": 4139,
    "preview": "package com.wgllss.core.ex\n\nimport androidx.lifecycle.MutableLiveData\nimport com.google.gson.JsonSyntaxException\nimport "
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/NetWorkHelp.kt",
    "chars": 1203,
    "preview": "package com.wgllss.core.ex\nimport android.app.Application\nimport android.content.Context\nimport android.net.Connectivity"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionInterceptor.kt",
    "chars": 4164,
    "preview": "package com.wgllss.core.permissions\n\nimport android.app.Activity\nimport android.app.AlertDialog\nimport android.content.D"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionNameConvert.kt",
    "chars": 12138,
    "preview": "package com.wgllss.core.permissions\n\nimport android.content.Context\nimport android.os.Build\nimport com.hjq.permissions.P"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/AppGlobals.kt",
    "chars": 674,
    "preview": "package com.wgllss.core.units\n\nimport android.app.Application\n\nobject AppGlobals {\n    lateinit var sApplication: Applic"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/DeviceIdUtil.kt",
    "chars": 3267,
    "preview": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.os.Build\nimport android.provider.Settings\ni"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/LogTimer.kt",
    "chars": 469,
    "preview": "package com.wgllss.core.units\n\nimport android.util.Log\nimport com.wgllss.core.re.BuildConfig\n\n\nobject LogTimer {\n    var"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/widget/CommonToast.kt",
    "chars": 10815,
    "preview": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.dra"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/anim/anim_alpha_121.xml",
    "chars": 346,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n    <alpha\n   "
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/drawable/button_bg_transparent_helf.xml",
    "chars": 338,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid and"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/drawable/progressbar_shape.xml",
    "chars": 214,
    "preview": "<?xml version =\"1.0\" encoding =\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n   "
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/layout/common_loading.xml",
    "chars": 2014,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmln"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/colors.xml",
    "chars": 147,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FF"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/strings.xml",
    "chars": 3792,
    "preview": "<resources>\n    <!--    <string name=\"app_name\">WgllssCode</string>-->\n\n    <!-- 异常错误提示  by Atar start -->\n    <string n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/themes.xml",
    "chars": 859,
    "preview": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n\n    <style name=\"Loadin"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/build.gradle",
    "chars": 1011,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    comp"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/consumer-rules.pro",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/androidTest/java/com/wgllss/host/library/ExampleInstrumentedTest.kt",
    "chars": 668,
    "preview": "package com.wgllss.host.library\n\nimport android.support.test.InstrumentationRegistry\nimport android.support.test.runner."
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/main/AndroidManifest.xml",
    "chars": 3942,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/test/java/com/wgllss/host/library/ExampleUnitTest.kt",
    "chars": 347,
    "preview": "package com.wgllss.host.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/build.gradle",
    "chars": 857,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/AndroidManifest.xml",
    "chars": 146,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_pause_36.xml",
    "chars": 319,
    "preview": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "chars": 294,
    "preview": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "chars": 316,
    "preview": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "chars": 314,
    "preview": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    andr"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview.xml",
    "chars": 306,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <ite"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview_dark.xml",
    "chars": 306,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <ite"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/colors.xml",
    "chars": 399,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FF"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/dimens.xml",
    "chars": 24,
    "preview": "<resources>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/ids.xml",
    "chars": 63,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/strings.xml",
    "chars": 182,
    "preview": "<resources>\n    <string name=\"app_name\">WXDynamicPlugin</string>\n\n\n    <string name=\"duration_unknown\">--:--</string>\n  "
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/themes.xml",
    "chars": 4309,
    "preview": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Base.Th"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/colors.xml",
    "chars": 395,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FF"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/themes.xml",
    "chars": 4310,
    "preview": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Base.Th"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v27/themes.xml",
    "chars": 621,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\""
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v29/themes.xml",
    "chars": 457,
    "preview": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.W"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/build.gradle",
    "chars": 3967,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugin"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/AndroidManifest.xml",
    "chars": 230,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseActivity.kt",
    "chars": 2553,
    "preview": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.activity.compose.setContent\nimport androidx.a"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseMVVMActivity.kt",
    "chars": 2357,
    "preview": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.LayoutRes\nimport androidx.annotati"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModePluginActivity.kt",
    "chars": 2088,
    "preview": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.MainThread\nimport androidx.lifecyc"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelActivity.kt",
    "chars": 1836,
    "preview": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.MainThread\nimport androidx.lifecyc"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelClassActivity.kt",
    "chars": 1570,
    "preview": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle."
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewPluginResActivity.kt",
    "chars": 2427,
    "preview": "package com.wgllss.core.activity\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.gra"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/WActivityManager.kt",
    "chars": 1727,
    "preview": "package com.wgllss.core.activity\n\nimport android.app.Activity\nimport android.os.Process\nimport com.wgllss.core.ex.finish"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/compose/BaseComposeActivity.kt",
    "chars": 145,
    "preview": "package com.wgllss.core.activity.compose\n\nimport androidx.activity.ComponentActivity\n\n\nopen class BaseComposeActivity : "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePagerAdapter.kt",
    "chars": 657,
    "preview": "package com.wgllss.core.adapter\n\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.viewpager.widget"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePluginRecyclerAdapter.kt",
    "chars": 3208,
    "preview": "package com.wgllss.core.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.view"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BaseRecyclerAdapter.kt",
    "chars": 1571,
    "preview": "package com.wgllss.core.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android.view.V"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/ViewPage2ChildFragmentAdapter.kt",
    "chars": 758,
    "preview": "package com.wgllss.core.adapter\n\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.FragmentManager\nimpo"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/data/DialogBean.kt",
    "chars": 90,
    "preview": "package com.wgllss.core.data\n\ndata class DialogBean(var msg:String, var isShow:Boolean){\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Context.kt",
    "chars": 3885,
    "preview": "package com.wgllss.core.ex\n\nimport android.app.Activity\nimport android.app.ActivityManager\nimport android.content.Contex"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Fragment.kt",
    "chars": 1576,
    "preview": "package com.wgllss.core.ex\n\nimport android.content.Context\nimport android.view.View\nimport android.view.inputmethod.Inpu"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/FragmentActivity.kt",
    "chars": 3044,
    "preview": "package com.wgllss.core.ex\n\nimport android.content.Context\nimport android.view.View\nimport android.view.WindowManager\nim"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ImageView.kt",
    "chars": 176,
    "preview": "package com.wgllss.core.ex\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\n\nfun ImageView.loadUrl(url: "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/SwipeRefreshLayout.kt",
    "chars": 309,
    "preview": "package com.wgllss.core.ex\n\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\n\nfun SwipeRefreshLayout.initCol"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ViewModel.kt",
    "chars": 356,
    "preview": "package com.wgllss.core.ex\n\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport kotlinx."
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseFragment.kt",
    "chars": 991,
    "preview": "package com.wgllss.core.fragment\n\nimport androidx.annotation.LayoutRes\nimport androidx.fragment.app.Fragment\nimport com."
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BasePluginResFragment.kt",
    "chars": 1540,
    "preview": "package com.wgllss.core.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.vie"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelClassFragment.kt",
    "chars": 1845,
    "preview": "package com.wgllss.core.fragment\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.an"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelFragment.kt",
    "chars": 1767,
    "preview": "package com.wgllss.core.fragment\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.an"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelPluginFragment.kt",
    "chars": 2750,
    "preview": "package com.wgllss.core.fragment\n\nimport android.content.Context\nimport android.os.Bundle\nimport android.view.LayoutInfl"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpRequest.kt",
    "chars": 3517,
    "preview": "package com.wgllss.core.http\n\nimport java.net.HttpURLConnection\nimport java.net.URL\nimport java.security.SecureRandom\nim"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpUrlConnectionRequest.kt",
    "chars": 1506,
    "preview": "package com.wgllss.core.http\n\nimport java.io.BufferedReader\nimport java.io.InputStreamReader\nimport java.lang.StringBuil"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/material/ThemeUtils.kt",
    "chars": 1122,
    "preview": "package com.wgllss.core.material\n//\n//import android.content.Context\n//import android.util.TypedValue\n//\n//object ThemeU"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/DeviceIdUtilX.kt",
    "chars": 5717,
    "preview": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.os.Build\nimport android.provider.Settings\ni"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ImageUtils.kt",
    "chars": 508,
    "preview": "package com.wgllss.core.units\n\nimport android.graphics.Bitmap\nimport android.graphics.Canvas\nimport android.graphics.dra"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ResourceUtils.kt",
    "chars": 5232,
    "preview": "package com.wgllss.core.units\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.res.Col"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ScreenManager.kt",
    "chars": 940,
    "preview": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.util.DisplayMetrics\nimport android.view.Vie"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/SdkIntUtils.kt",
    "chars": 562,
    "preview": "package com.wgllss.core.units\n\nimport android.os.Build\n\nobject SdkIntUtils {\n    fun isOreo(): Boolean = Build.VERSION.S"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ServiceUtil.kt",
    "chars": 2055,
    "preview": "package com.wgllss.core.units\n//\n//import android.app.ActivityManager\n//import android.content.Context\n//import android."
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/StatusBarUtil.kt",
    "chars": 6012,
    "preview": "package com.wgllss.core.units\n\nimport android.app.Activity\nimport android.app.ActivityOptions\nimport android.content.Con"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/WLog.kt",
    "chars": 225,
    "preview": "package com.wgllss.core.units\n\nimport com.wgllss.core.BuildConfig\n\nobject WLog {\n\n    fun e(any: Any, message: String) {"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/viewmodel/BaseViewModel.kt",
    "chars": 1923,
    "preview": "package com.wgllss.core.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.ViewModel\nimport "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/ButtomNavigationViewEx.kt",
    "chars": 543,
    "preview": "package com.wgllss.core.widget\n\nimport android.view.View\nimport android.view.ViewGroup\nimport com.google.android.materia"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/DividerGridItemDecoration.kt",
    "chars": 7904,
    "preview": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Co"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/DrawerBack.kt",
    "chars": 15488,
    "preview": "package com.wgllss.core.widget\n\nimport android.R\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimpo"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/MusicVisualizerView.kt",
    "chars": 2193,
    "preview": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Pa"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/OnRecyclerViewItemClickListener.kt",
    "chars": 2007,
    "preview": "package com.wgllss.core.widget\n\nimport android.view.GestureDetector\nimport android.view.MotionEvent\nimport android.view."
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/build.gradle",
    "chars": 3943,
    "preview": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.pl"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/src/main/AndroidManifest.xml",
    "chars": 168,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/src/main/java/com/wgllss/dynamic/version/json/Test.kt",
    "chars": 127,
    "preview": "package com.wgllss.dynamic.version.json\n\nimport com.wgllss.annotations.CreateVersionConfig\n\n@CreateVersionConfig\nclass T"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations/build.gradle",
    "chars": 248,
    "preview": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n}\n\njava {\n    sourceCompatibility = J"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations/src/main/java/com/wgllss/annotations/CreateVersionConfig.kt",
    "chars": 185,
    "preview": "package com.wgllss.annotations\n\n\n@Suppress(\"SupportAnnotationUsage\")\n@Target(AnnotationTarget.CLASS)\n@Retention(Annotati"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/build.gradle",
    "chars": 3028,
    "preview": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.pl"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/src/main/AndroidManifest.xml",
    "chars": 168,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/src/main/java/com/wgllss/dynamic/version/json/Test.kt",
    "chars": 127,
    "preview": "package com.wgllss.dynamic.version.json\n\nimport com.wgllss.annotations.CreateVersionConfig\n\n@CreateVersionConfig\nclass T"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler/build.gradle",
    "chars": 1119,
    "preview": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n    alias(libs.plugins.java)\n    alia"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler/src/main/java/com/wgllss/compiler/AptCreateConfigProcessor.kt",
    "chars": 5722,
    "preview": "package com.wgllss.compiler\n\nimport com.google.auto.service.AutoService\nimport com.wgllss.annotations.CreateVersionConfi"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/build.gradle",
    "chars": 3403,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    comp"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/src/main/AndroidManifest.xml",
    "chars": 181,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/src/main/java/com/wgllss/dynamic/plugin/download_face/DownLoadFaceImpl.kt",
    "chars": 2817,
    "preview": "package com.wgllss.dynamic.plugin.download_face\n\nimport android.text.TextUtils\nimport com.wgllss.core.units.DeviceIdUtil"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/build.gradle",
    "chars": 3385,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    comp"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/src/main/AndroidManifest.xml",
    "chars": 174,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/src/main/java/com/wgllss/dynamic/plugin/loader/LoaderManagerImpl.kt",
    "chars": 1482,
    "preview": "package com.wgllss.dynamic.plugin.loader\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.download.IDy"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/build.gradle",
    "chars": 3892,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    comp"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/src/main/AndroidManifest.xml",
    "chars": 170,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/src/main/java/com/wgllss/dynamic/plugin/manager/PluginManager.kt",
    "chars": 28093,
    "preview": "package com.wgllss.dynamic.plugin.manager\n\nimport android.content.ComponentName\nimport android.content.Context\nimport an"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/src/main/java/com/wgllss/dynamic/plugin/manager/PluginResource.kt",
    "chars": 862,
    "preview": "package com.wgllss.dynamic.plugin.manager\n\nimport android.content.res.Resources\nimport com.wgllss.core.units.WLog\nimport"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/build.gradle",
    "chars": 750,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/consumer-rules.pro",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/AndroidManifest.xml",
    "chars": 169,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXDynamicAidlInterface.java",
    "chars": 8485,
    "preview": "package com.wgllss.dynamic.runtime.library;\n\npublic interface WXDynamicAidlInterface extends android.os.IInterface {\n\n  "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostActivityDelegate.java",
    "chars": 780,
    "preview": "package com.wgllss.dynamic.runtime.library;\n\nimport android.content.res.Configuration;\nimport android.content.res.Resour"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostServiceDelegate.java",
    "chars": 498,
    "preview": "package com.wgllss.dynamic.runtime.library;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport andro"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/test/java/com/wgllss/plugin/library/ExampleUnitTest.kt",
    "chars": 349,
    "preview": "package com.wgllss.plugin.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, whi"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/build.gradle",
    "chars": 2437,
    "preview": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.plugin.runtime'\n   "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/consumer-rules.pro",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/AndroidManifest.xml",
    "chars": 169,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostComposePluginActivity.java",
    "chars": 5658,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\ni"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginActivity.java",
    "chars": 6220,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\ni"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginService.java",
    "chars": 5078,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.app.Service;\nimport android.content.Context;\nimport android.c"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginClassLoader.java",
    "chars": 1168,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\n\nimport com.wgllss.dynamic.host.lib.classloader.WXClassLoader;\n\npublic class"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartNotStickyService.java",
    "chars": 210,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartNotStickyService extends HostPluginService {\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartRedeliverIntentService.java",
    "chars": 222,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartRedeliverIntentService extends HostPluginServ"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyCompatibilityService.java",
    "chars": 230,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartStickyCompatibilityService extends HostPlugin"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyService.java",
    "chars": 203,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartStickyService extends HostPluginService {\n\n  "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceActivity.java",
    "chars": 116,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleInstanceActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceComposeActivity.java",
    "chars": 130,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleInstanceComposeActivity extends HostComposePluginAc"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskActivity.java",
    "chars": 112,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTaskActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskComposeActivity.java",
    "chars": 126,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTaskComposeActivity extends HostComposePluginActivi"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopActivity.java",
    "chars": 111,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTopActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopComposeActivity.java",
    "chars": 126,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTopComposeActivity extends HostComposePluginActivit"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardActivity.java",
    "chars": 110,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStandardActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardComposeActivity.java",
    "chars": 124,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStandardComposeActivity extends HostComposePluginActivity"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartNotStickyService.java",
    "chars": 203,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartNotStickyService extends HostPluginService {\n\n    @O"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartRedeliverIntentService.java",
    "chars": 215,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartRedeliverIntentService extends HostPluginService {\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyCompatibilityService.java",
    "chars": 223,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartStickyCompatibilityService extends HostPluginService"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyService.java",
    "chars": 196,
    "preview": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartStickyService extends HostPluginService {\n\n    @Over"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/test/java/com/wgllss/dynamic/runtime/ExampleUnitTest.kt",
    "chars": 350,
    "preview": "package com.wgllss.dynamic.runtime\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, wh"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/.gitignore",
    "chars": 6,
    "preview": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/build.gradle",
    "chars": 2226,
    "preview": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.web.assets.source'\n "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/AndroidManifest.xml",
    "chars": 161,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/css/main.8f39d45c.css",
    "chars": 77911,
    "preview": "@charset \"UTF-8\";*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}:after,:before{text-decoration:inh"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/js/jquery.js",
    "chars": 93100,
    "preview": "/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery.min.map\n*/\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/js/jquery.lazyload.js",
    "chars": 8765,
    "preview": "\n(function($, window, document, undefined) {\n    var $window = $(window);\n\n    $.fn.lazyload = function(options) {\n     "
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/.gitignore",
    "chars": 15,
    "preview": "/build\n/.gradle"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/build.gradle",
    "chars": 4168,
    "preview": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugin"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/proguard-rules.pro",
    "chars": 750,
    "preview": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguar"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/AndroidManifest.xml",
    "chars": 239,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package="
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/ImgExtraData.kt",
    "chars": 76,
    "preview": "package com.wgllss.sample.data\n\ndata class ImgExtraData(val imgsrc: String)\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/NewsBean.kt",
    "chars": 457,
    "preview": "package com.wgllss.sample.data\n\nimport com.wgllss.sample.feature_system.untils.UUIDHelp\n\ndata class NewsBean(\n    val so"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/SampleItemBean.kt",
    "chars": 92,
    "preview": "package com.wgllss.sample.data\n\ndata class SampleItemBean(val id: Int, val itemName: String)"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/HeaderInterceptor.kt",
    "chars": 846,
    "preview": "package com.wgllss.sample.datasource.net\n\nimport okhttp3.Interceptor\nimport okhttp3.Request\nimport okhttp3.Response\nimpo"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/MyApi.kt",
    "chars": 1562,
    "preview": "package com.wgllss.sample.datasource.net\n\nimport retrofit2.http.*\n\n/**\n * http://3g.163.com/touch/reconstruct/article/li"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/RetrofitUtils.kt",
    "chars": 2009,
    "preview": "package com.wgllss.sample.datasource.net\n\nimport android.content.Context\nimport okhttp3.Cache\nimport okhttp3.OkHttpClien"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/repository/NewsRepository.kt",
    "chars": 4727,
    "preview": "package com.wgllss.sample.datasource.repository\n\nimport android.content.Context\nimport com.google.gson.Gson\nimport com.g"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/exoplayerimpl/ExoPlayerUtils.kt",
    "chars": 574,
    "preview": "package com.wgllss.sample.feature_system.music.exoplayerimpl\n\nimport android.content.Context\nimport com.wgllss.host.skin"
  }
]

// ... and 1327 more files (download for full content)

About this extraction

This page contains the full source code of the wgllss/WXDynamicPlugin GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1527 files (2.4 MB), approximately 739.0k tokens, and a symbol index with 353 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!