├── .github ├── ISSUE_TEMPLATE │ ├── bug-报告.md │ └── 功能请求.md ├── dependabot.yml ├── pull_request_template.md └── workflows │ ├── codeql.yml │ ├── crowdin.yml │ └── push_ci.yml ├── .gitignore ├── .idea ├── gradle.xml ├── kotlinc.xml ├── misc.xml └── vcs.xml ├── DataListShared.md ├── LICENSE ├── QQVerToolBanner.png ├── README.md ├── ReadmeAssets ├── Get-it-on-JiuQi-NotifCenter-WeChatMiniProgram.md ├── Get-it-on-Obtainium.md ├── GitHub-Badge.png ├── JiuQi-NotifCenter-Badge-Dark-zh-Hans.png └── Obtainium-Badge.png ├── SECURITY.md ├── UserAgreement.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── xiaoniu │ │ └── qqversionlist │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore.png │ ├── ic_launcher_special-playstore.png │ ├── java │ │ └── com │ │ │ └── xiaoniu │ │ │ └── qqversionlist │ │ │ ├── QverbowApplication.kt │ │ │ ├── data │ │ │ ├── LocalAppStackResult.kt │ │ │ ├── LocalAppStackRule.kt │ │ │ ├── QQVersionBean.kt │ │ │ ├── QverbowRelease.kt │ │ │ ├── QverbowReleaseAssets.kt │ │ │ ├── TIMVersionBean.kt │ │ │ └── WeixinVersionBean.kt │ │ │ ├── service │ │ │ └── FirebaseMessagingService.kt │ │ │ ├── ui │ │ │ ├── ExpUrlListAdapter.kt │ │ │ ├── LocalAppDetailsActivity.kt │ │ │ ├── LocalAppDetailsActivityViewModel.kt │ │ │ ├── LocalQQAdapter.kt │ │ │ ├── LocalTIMAdapter.kt │ │ │ ├── LocalWeixinAdapter.kt │ │ │ ├── MainActivity.kt │ │ │ ├── MainActivityViewModel.kt │ │ │ ├── OSSLicensesActivity.kt │ │ │ ├── OSSLicensesMenuActivity.kt │ │ │ ├── QQVersionAdapter.kt │ │ │ ├── QQVersionListFragment.kt │ │ │ ├── ShiplyAdvancedConfigFragment.kt │ │ │ ├── TIMVersionAdapter.kt │ │ │ ├── TIMVersionListFragment.kt │ │ │ ├── VersionListPagerAdapter.kt │ │ │ ├── WeixinVersionAdapter.kt │ │ │ ├── WeixinVersionListFragment.kt │ │ │ ├── components │ │ │ │ └── cell │ │ │ │ │ ├── CellBottomClick.kt │ │ │ │ │ ├── CellBottomSwitch.kt │ │ │ │ │ ├── CellMiddleClick.kt │ │ │ │ │ ├── CellMiddleSwitch.kt │ │ │ │ │ ├── CellSingleClick.kt │ │ │ │ │ ├── CellSingleSwitch.kt │ │ │ │ │ ├── CellTopClick.kt │ │ │ │ │ └── CellTopSwitch.kt │ │ │ └── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Theme.kt │ │ │ │ └── Type.kt │ │ │ └── util │ │ │ ├── ClipboardUtil.kt │ │ │ ├── DataStoreUtil.kt │ │ │ ├── DexResolver.kt │ │ │ ├── EnumDexContainer.kt │ │ │ ├── Extensions.kt │ │ │ ├── FileUtil.kt │ │ │ ├── GitHubRestApiUtil.kt │ │ │ ├── InfoUtil.kt │ │ │ ├── KeyStoreUtil.kt │ │ │ ├── LogUtil.kt │ │ │ ├── OSSLicensesObject.kt │ │ │ ├── ShiplyUtil.kt │ │ │ ├── StringUtil.kt │ │ │ ├── VersionUtil.kt │ │ │ ├── ZhipuSDKUtil.kt │ │ │ └── boundo_LICENSE │ ├── res │ │ ├── drawable │ │ │ ├── accessibility_new_20px.xml │ │ │ ├── accessibility_new_24px.xml │ │ │ ├── ai_generate_2.xml │ │ │ ├── alert_line.xml │ │ │ ├── apps_line.xml │ │ │ ├── arrow_down_s_line.xml │ │ │ ├── arrow_left_line.xml │ │ │ ├── arrow_right_s_line.xml │ │ │ ├── arrow_up_s_line.xml │ │ │ ├── beacon_official.xml │ │ │ ├── bottom_sheet_drag_handle.xml │ │ │ ├── braces_line.xml │ │ │ ├── bubble_chart_line.xml │ │ │ ├── bugly_official.xml │ │ │ ├── built_with_material_licensed_under_agpl_v3.xml │ │ │ ├── check_circle.xml │ │ │ ├── clipboard_line.xml │ │ │ ├── compose.xml │ │ │ ├── download_line.xml │ │ │ ├── error_warning_fill.xml │ │ │ ├── file_copy_line.xml │ │ │ ├── file_text_line.xml │ │ │ ├── flashlight_line.xml │ │ │ ├── flask_line.xml │ │ │ ├── flutter_line.xml │ │ │ ├── git_commit_line.xml │ │ │ ├── git_repository_line.xml │ │ │ ├── github_line.xml │ │ │ ├── gitlab_line.xml │ │ │ ├── hippy_official.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── ic_launcher_foreground.xml │ │ │ ├── ic_launcher_foreground_splash.xml │ │ │ ├── ic_launcher_special_foreground.xml │ │ │ ├── info_card_line.xml │ │ │ ├── information_line.xml │ │ │ ├── key_line.xml │ │ │ ├── kuikly_official.xml │ │ │ ├── lightbulb_fill.xml │ │ │ ├── link.xml │ │ │ ├── mini_program_line.xml │ │ │ ├── open_source_line.xml │ │ │ ├── oteam_official.xml │ │ │ ├── palette_line.xml │ │ │ ├── phone_find_line.xml │ │ │ ├── qqnt_logo_unofficial.xml │ │ │ ├── qqnt_logo_unofficial_fix.xml │ │ │ ├── question_line.xml │ │ │ ├── qv_logo_notification.xml │ │ │ ├── reactjs_line.xml │ │ │ ├── refresh_line.xml │ │ │ ├── rightly_official.xml │ │ │ ├── save_line.xml │ │ │ ├── scan_line.xml │ │ │ ├── scan_shortcut_icon_foreground.xml │ │ │ ├── search_line.xml │ │ │ ├── settings_line.xml │ │ │ ├── shape_cell_bottom.xml │ │ │ ├── shape_cell_middle.xml │ │ │ ├── shape_cell_single.xml │ │ │ ├── shape_cell_top.xml │ │ │ ├── share_line.xml │ │ │ ├── shield_keyhole_line.xml │ │ │ ├── shiply_official.xml │ │ │ ├── skip_forward_line.xml │ │ │ ├── sparkling_line.xml │ │ │ ├── stack_line.xml │ │ │ ├── stop_fill.xml │ │ │ ├── stop_line.xml │ │ │ ├── tencent_logo.xml │ │ │ ├── tools_line.xml │ │ │ └── ue_icon_2023_black.xml │ │ ├── font │ │ │ ├── tcloud_number_bold.ttf │ │ │ ├── tcloud_number_light.ttf │ │ │ ├── tcloud_number_regular.ttf │ │ │ └── tcloud_number_vf.ttf │ │ ├── layout-v26 │ │ │ ├── dialog_changes_llm_inference.xml │ │ │ └── update_qvt_button.xml │ │ ├── layout │ │ │ ├── activity_local_app_details.xml │ │ │ ├── activity_main.xml │ │ │ ├── applications_config_back_button.xml │ │ │ ├── bottomsheet_shiply_advanced_config.xml │ │ │ ├── cell_bottom_click.xml │ │ │ ├── cell_bottom_switch.xml │ │ │ ├── cell_middle_click.xml │ │ │ ├── cell_middle_switch.xml │ │ │ ├── cell_single_click.xml │ │ │ ├── cell_single_switch.xml │ │ │ ├── cell_top_click.xml │ │ │ ├── cell_top_switch.xml │ │ │ ├── dialog_about.xml │ │ │ ├── dialog_changes_llm_inference.xml │ │ │ ├── dialog_exp_back.xml │ │ │ ├── dialog_experimental_features.xml │ │ │ ├── dialog_firebase_first_info.xml │ │ │ ├── dialog_format_define.xml │ │ │ ├── dialog_guess.xml │ │ │ ├── dialog_hash.xml │ │ │ ├── dialog_loading.xml │ │ │ ├── dialog_local_qq_tim_info.xml │ │ │ ├── dialog_personalization.xml │ │ │ ├── dialog_private_token_setting.xml │ │ │ ├── dialog_setting.xml │ │ │ ├── dialog_shiply.xml │ │ │ ├── dialog_tencent_app_store.xml │ │ │ ├── exp_link_next_button.xml │ │ │ ├── item_exp_back_url_card.xml │ │ │ ├── item_qq_version.xml │ │ │ ├── item_qq_version_detail.xml │ │ │ ├── item_tim_version.xml │ │ │ ├── item_tim_version_detail.xml │ │ │ ├── item_weixin_version.xml │ │ │ ├── item_weixin_version_detail.xml │ │ │ ├── local_qq.xml │ │ │ ├── local_tim.xml │ │ │ ├── local_weixin.xml │ │ │ ├── recycle_qq_version.xml │ │ │ ├── recycle_tim_version.xml │ │ │ ├── success_button.xml │ │ │ ├── update_qvt_button.xml │ │ │ └── user_agreement.xml │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ ├── ic_launcher_round.xml │ │ │ ├── scan_shortcut_icon.xml │ │ │ └── scan_shortcut_icon_round.xml │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_background.webp │ │ │ ├── ic_launcher_round.webp │ │ │ ├── scan_shortcut_icon.webp │ │ │ └── scan_shortcut_icon_round.webp │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_background.webp │ │ │ ├── ic_launcher_round.webp │ │ │ ├── scan_shortcut_icon.webp │ │ │ └── scan_shortcut_icon_round.webp │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_background.webp │ │ │ ├── ic_launcher_round.webp │ │ │ ├── scan_shortcut_icon.webp │ │ │ └── scan_shortcut_icon_round.webp │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_background.webp │ │ │ ├── ic_launcher_round.webp │ │ │ ├── scan_shortcut_icon.webp │ │ │ └── scan_shortcut_icon_round.webp │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.webp │ │ │ ├── ic_launcher_background.webp │ │ │ ├── ic_launcher_round.webp │ │ │ ├── scan_shortcut_icon.webp │ │ │ └── scan_shortcut_icon_round.webp │ │ ├── values-ar-rSA │ │ │ └── strings.xml │ │ ├── values-en-rUS │ │ │ └── strings.xml │ │ ├── values-es-rES │ │ │ └── strings.xml │ │ ├── values-fr-rFR │ │ │ └── strings.xml │ │ ├── values-ja-rJP │ │ │ └── strings.xml │ │ ├── values-ko-rKR │ │ │ └── strings.xml │ │ ├── values-night │ │ │ └── themes.xml │ │ ├── values-ru-rRU │ │ │ └── strings.xml │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ ├── values-zh-rHK │ │ │ └── strings.xml │ │ ├── values │ │ │ ├── arrays.xml │ │ │ ├── attrs.xml │ │ │ ├── colors.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── scan_shortcut_icon_background.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ ├── xml-v25 │ │ │ └── shortcuts.xml │ │ └── xml │ │ │ ├── backup_rules.xml │ │ │ └── data_extraction_rules.xml │ └── scan_shortcut_icon-playstore.png │ └── test │ └── java │ └── com │ └── xiaoniu │ └── qqversionlist │ └── ExampleUnitTest.kt ├── build.gradle.kts ├── crowdin.yml ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle.kts /.github/ISSUE_TEMPLATE/bug-报告.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug 报告 3 | about: 创建报告以帮助我们改进 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **描述错误** 11 | 对错误的清晰而简洁的描述。 12 | 13 | **重现步骤** 14 | 重现行为的步骤: 15 | 1. 转到“……” 16 | 2. 点击“……” 17 | 3. 向下滚动到“……” 18 | 4. 看到错误 19 | 20 | **期望行为** 21 | 对您期望发生的事情的清晰而简洁的描述。 22 | 23 | **截图** 24 | 如果适用,请添加截图以帮助解释您的问题。 25 | 26 | **QQ 版本列表实用工具(请填写以下信息):** 27 | - 版本:(例如 v1.2.2-Release) 28 | 29 | **智能手机(请填写以下信息):** 30 | - 设备:(例如 Google Pixel 8 Pro) 31 | - 操作系统:(例如 Android 14) 32 | 33 | **其他上下文** 34 | 在这里添加有关问题的任何其他上下文。 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/功能请求.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 功能请求 3 | about: 为此项目提出建议 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **您的功能请求是否与问题有关?请描述。** 11 | 对问题的清晰而简洁的描述。例如:我总是感到沮丧,当…… 12 | 13 | **描述您希望发生的解决方案** 14 | 对您希望发生的事情的清晰而简洁的描述。 15 | 16 | **描述您考虑过的替代方案** 17 | 对您考虑过的任何替代解决方案或功能的清晰而简洁的描述。 18 | 19 | **其他上下文** 20 | 在这里添加有关功能请求的任何其他上下文或截图。 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: gradle 9 | directory: / 10 | schedule: 11 | interval: monthly 12 | ignore: 13 | # 智谱 AI 开放平台 Java SDK 版本号不是语义版本号 SemVer,会被 Maven 或 GitHub Dependabot 误判,因此需要手动忽略。 14 | - dependency-name: cn.bigmodel.openapi:oapi-java-sdk 15 | - dependency-name: androidx.core:core-splashscreen 16 | groups: 17 | maven-dependencies: 18 | patterns: 19 | - "*" 20 | 21 | - package-ecosystem: github-actions 22 | directory: / 23 | schedule: 24 | interval: daily 25 | groups: 26 | action-dependencies: 27 | patterns: 28 | - "*" 29 | 30 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## 这个 PR 解决了什么问题? 2 | 3 | > 请补充以下信息 4 | 5 | ### 需求背景 6 | 7 | …… 8 | 9 | ### 更新日志 10 | 11 | #### 修复 12 | 13 | - …… 14 | 15 | #### 新增 16 | 17 | - …… 18 | 19 | #### 优化 20 | 21 | - …… 22 | 23 | #### 其它更改 24 | 25 | - …… 26 | 27 | #### 上游更改 28 | 29 | - …… 30 | 31 | ## 自检清单 32 | 33 | > 请确认下列所有选项并打勾 34 | 35 | - [ ] 此 PR 已实现我的所有预期更改,可以被合并。 36 | - [ ] 我确认此 PR 全部代码仅由本人(或联合作者)编写,代码所有权归本人(或联合作者)所有。 37 | - [ ] 此 PR 更新日志已提供(或无须提供)。 38 | - [ ] Readme 文档无须补充(或已补充)。 39 | 40 | > 请确认下列选项并打勾。如不认可选项内容或存在需备注内容,请在选项旁随附补充说明。 41 | 42 | - [ ] 我认可并确认我贡献的代码将以 [GNU Affero General Public License Version 3](https://github.com/klxiaoniu/QQVersionList/blob/master/LICENSE) 开源许可进行发行。 43 | - (单项选择)若后续项目决定更改开源许可: 44 | - [ ] 请通知我并等待我的决定 45 | - [ ] 无需通知,我授权项目所有者自行决定我的贡献的开源许可变更。 46 | - [ ] 其他,请补充说明:_______ 47 | -------------------------------------------------------------------------------- /.github/workflows/crowdin.yml: -------------------------------------------------------------------------------- 1 | name: Crowdin Action 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | schedule: 7 | - cron: '0 0 * * *' 8 | 9 | jobs: 10 | synchronize-with-crowdin: 11 | runs-on: ubuntu-latest 12 | 13 | if: github.repository == 'klxiaoniu/QQVersionList' 14 | steps: 15 | - name: Checkout 16 | uses: actions/checkout@v4 17 | 18 | - name: crowdin action 19 | uses: crowdin/github-action@v2 20 | with: 21 | upload_sources: true 22 | upload_translations: true 23 | download_translations: true 24 | localization_branch_name: i18n_crowdin_translations 25 | create_pull_request: true 26 | pull_request_title: 'New Crowdin Translations' 27 | pull_request_body: 'New Crowdin translations by [Crowdin GitHub Action](https://github.com/crowdin/github-action)' 28 | pull_request_labels: '本地化(I18n)' 29 | pull_request_assignees: 'crowdin-bot' 30 | pull_request_base_branch_name: 'master' 31 | auto_approve_imported: true 32 | env: 33 | # A classic GitHub Personal Access Token with the 'repo' scope selected (the user should have write access to the repository). 34 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 35 | 36 | # A numeric ID, found at https://crowdin.com/project//tools/api 37 | CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} 38 | 39 | # Visit https://crowdin.com/settings#api-key to create this token 40 | CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} 41 | -------------------------------------------------------------------------------- /.github/workflows/push_ci.yml: -------------------------------------------------------------------------------- 1 | name: Android CI 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | paths-ignore: 7 | - '**.md' 8 | - '**.txt' 9 | - '.github/**' 10 | - '.idea/**' 11 | - '!.github/workflows/**' 12 | 13 | jobs: 14 | build: 15 | 16 | runs-on: ubuntu-latest 17 | 18 | if: ${{ !startsWith(github.event.head_commit.message, '[skip ci]') && success() && github.repository == 'klxiaoniu/QQVersionList' }} 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v4 22 | with: 23 | fetch-depth: 0 24 | 25 | - name: Setup local.properties 26 | run: echo "" > local.properties 27 | 28 | # 向 app 目录插入 google-services.json,文件内容来自 Secret 29 | - name: Insert google-services.json 30 | run: | 31 | cat < app/google-services.json 32 | ${{ secrets.GOOGLE_SERVICES }} 33 | EOF 34 | shell: bash 35 | 36 | - name: set up JDK 21 37 | uses: actions/setup-java@v4 38 | with: 39 | java-version: '21' 40 | distribution: 'temurin' 41 | cache: gradle 42 | 43 | - name: Grant execute permission for gradlew 44 | run: chmod +x gradlew 45 | - name: Build with Gradle 46 | run: | 47 | echo ${{ secrets.SIGN_KEYSTORE_BASE64 }} | base64 -d > keystore.jks 48 | ./gradlew build 49 | env: 50 | KEYSTORE_PATH: "../keystore.jks" 51 | KEYSTORE_PASSWORD: ${{ secrets.SIGN_KEYSTORE_PASSWORD }} 52 | KEY_ALIAS: ${{ secrets.SIGN_ALIAS }} 53 | KEY_PASSWORD: ${{ secrets.SIGN_KEY_PASSWORD }} 54 | 55 | - name: Upload release 56 | uses: actions/upload-artifact@v4.6.2 57 | with: 58 | path: ${{github.workspace}}/app/build/outputs/apk/release/*.apk 59 | name: QQVersionList-release-${{ github.event.head_commit.id }} 60 | retention-days: 90 61 | 62 | - name: Upload mappings 63 | uses: actions/upload-artifact@v4.6.2 64 | with: 65 | path: ${{github.workspace}}/app/build/outputs/mapping/release/mapping.txt 66 | name: QQVersionList-release-${{ github.event.head_commit.id }}-mapping 67 | retention-days: 90 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | .DS_Store 5 | /build 6 | /captures 7 | .externalNativeBuild 8 | .cxx 9 | local.properties 10 | /app/release 11 | /.idea 12 | /app/debug 13 | app/google-services.json 14 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /DataListShared.md: -------------------------------------------------------------------------------- 1 | # QQ 版本列表实用工具个人信息第三方共享清单 2 | 3 | 1. 本清单仅反映您在全部功能模式下,我们对您的信息与第三方共享的情况。 4 | 2. 为了完成相应的功能,我们会接入来自第三方的应用开发工具包(SDK)来获得技术支持,比如实现云端消息推送和帮助我们统计了解产品用户分布和数据分析,我们可能会向此类合作伙伴提供以下个人信息。我们在不同时期可能会选择使用其中部分合作方或变更合作方,故清单内的合作伙伴可能会进行调整。 5 | 6 | ## OkHttp3 7 | 8 | - **第三方主体名称**:Square 9 | - **使用场景描述**:网络请求 10 | - **共享的个人信息类型**:无 11 | - **使用的系统权限**:网络权限 12 | - **第三方隐私政策或用户协议或官网链接**:https://square.github.io/okhttp/ 13 | 14 | ## Google Analytics 15 | 16 | - **第三方主体名称**:Google LLC 17 | - **使用场景描述**:统计分析,被 Firebase Cloud Messaging 所绑定 18 | - **共享的个人信息类型**:移动设备标识符、基于网络地址的地理位置信息、Firebase 安装 ID 19 | - **使用的系统权限**:网络权限 20 | - **第三方隐私政策或用户协议或官网链接**:https://www.google.com/analytics/terms/ 21 | 22 | ## Firebase Cloud Messaging 23 | 24 | - **第三方主体名称**:Google LLC 25 | - **使用场景描述**:推送消息通知 26 | - **共享的个人信息类型**:Firebase 安装 ID 27 | - **使用的系统权限**:通知权限、网络权限 28 | - **第三方隐私政策或用户协议或官网链接**:https://firebase.google.com/support/privacy 29 | 30 | ## Java API for GitHub 31 | 32 | - **第三方主体名称**:Kohsuke Kawaguchi 33 | - **使用场景描述**:请求 GitHub REST API 34 | - **共享的个人信息类型**:GitHub 个人访问令牌 35 | - **使用的系统权限**:网络权限 36 | - **第三方隐私政策或用户协议或官网链接**:https://github.com/hub4j/github-api 37 | 38 | ## 智谱 AI 开放平台大模型接口 Java SDK 39 | 40 | - **第三方主体名称**:北京智谱华章科技有限公司 41 | - **使用场景描述**:智谱 AI 开放平台大模型接口调用 42 | - **共享的个人信息类型**:智谱 AI 开放平台 Token 43 | - **使用的系统权限**:网络权限 44 | - **第三方隐私政策或用户协议或官网链接**:https://bigmodel.cn/dev/howuse/privacypolicy 45 | -------------------------------------------------------------------------------- /QQVerToolBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/QQVerToolBanner.png -------------------------------------------------------------------------------- /ReadmeAssets/Get-it-on-JiuQi-NotifCenter-WeChatMiniProgram.md: -------------------------------------------------------------------------------- 1 | > [!warning] 2 | > 2024 年 10 月 17 日,九七公司「通知中心」微信小程序改名为「通知侠」重新上线,但因内容安全为由去掉了 GitHub Releases 更新订阅。故此页面内容不再可用。 3 | 4 | --- 5 | 6 | > [!important] 7 | > 2024 年 8 月 2 日,[九七公司「通知中心」微信小程序被微信公众平台以“无实质服务内容引导跳转”暂停服务](https://mp.weixin.qq.com/s/ITU6H_UjA804srGeE2-FOA)。此页面内容可能在一段时间内不可用。 8 | 9 | # 获取更新——基于九七公司「通知中心」微信小程序方案 10 | 11 | 您可以使用广州九七网络科技有限公司「通知中心」微信小程序来接收 QQ 版本列表实用工具的未来更新。「通知中心」微信小程序可以让您在微信平台上一站式收到三方软件发布新版本的通知。 12 | 13 | 「通知中心」微信小程序含有微信广告平台提供的广告。 14 | 15 | ## 快速订阅 16 | 17 | 复制下方链接,在微信任意会话窗口(如文件传输助手)中发送后点击打开: 18 | 19 | ``` 20 | #小程序://通知中心/ZVsvPVMyrGbTwkf 21 | ``` 22 | 23 | 之后点击订阅,并按照提示完成后续步骤即可。 24 | 25 | ## 手动订阅 26 | 27 | 1. 微信搜一搜「通知中心」,在搜索结果中找到小程序认证主体为广州九七网络科技有限公司的「通知中心」小程序,点击进入。 28 | 2. 在小程序首页找到 软件开发-GitHub Release,输入: 29 | ``` 30 | https://github.com/klxiaoniu/QQVersionList/ 31 | ``` 32 | 3. 点击添加按钮,并按照提示完成后续步骤即可。 33 | -------------------------------------------------------------------------------- /ReadmeAssets/Get-it-on-Obtainium.md: -------------------------------------------------------------------------------- 1 | # 获取更新——基于 [Obtainium](https://github.com/ImranR98/Obtainium) 方案 2 | 3 | 您可以使用开源软件 [Obtainium](https://github.com/ImranR98/Obtainium) 来接收 QQ 版本列表实用工具的未来更新。Obtainium 可以让您从一个 APP 内直接从其他 APP 的发布源获取安装包和更新应用程序,并在发布新版本时收到通知。 4 | 5 | ## 一键导入 6 | 7 | 若您的 Android 设备已安装 Obtainium,点击下方图片即可快速导入 QQ 版本列表实用工具的 Obtainium 配置。 8 | 9 | Obtanium 10 | 11 | ## 手动导入 12 | 13 | 下载安装并打开 Obtainium,点击底部导航栏“添加应用”,在“来源 URL”中输入: 14 | 15 | ``` 16 | https://github.com/klxiaoniu/QQVersionList/ 17 | ``` 18 | 19 | 然后在下方“提取版本号的正则表达式”内填入: 20 | 21 | ``` 22 | (?<=v)(.*) 23 | ``` 24 | 25 | “从上述匹配结果中引用的捕获组”填入: 26 | 27 | ``` 28 | $0-Release 29 | ``` 30 | 31 | 填入完成后,点击“添加”按钮即可。 -------------------------------------------------------------------------------- /ReadmeAssets/GitHub-Badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/ReadmeAssets/GitHub-Badge.png -------------------------------------------------------------------------------- /ReadmeAssets/JiuQi-NotifCenter-Badge-Dark-zh-Hans.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/ReadmeAssets/JiuQi-NotifCenter-Badge-Dark-zh-Hans.png -------------------------------------------------------------------------------- /ReadmeAssets/Obtainium-Badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/ReadmeAssets/Obtainium-Badge.png -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | ## 上报漏洞 Reporting a Vulnerability 2 | 3 | 如果您发现了关于此项目的任何漏洞,请不要公开,请在[此处](https://github.com/klxiaoniu/QQVersionList/security)向我们私下报告漏洞。 4 | 5 | If you discover any vulnerabilities regarding this project, please do not make them public and report them to us privately at [here](https://github.com/klxiaoniu/QQVersionList/security). -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Qverbow Util 2 | # Copyright (C) 2023 klxiaoniu 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU Affero General Public License as 6 | # published by the Free Software Foundation, either version 3 of the 7 | # License, or (at your option) any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU Affero General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU Affero General Public License 15 | # along with this program. If not, see . 16 | 17 | -keep class com.xiaoniu.qqversionlist.data.** { *; } 18 | -keep class com.tencent.kona.crypto.provider.* { *; } 19 | -keep class com.fasterxml.jackson.core.type.TypeReference { *; } 20 | -keep class com.zhipu.oapi.service.v4.api.* { *; } 21 | -keep class com.zhipu.oapi.service.v4.model.* { *; } 22 | -keep class io.reactivex.Single { *; } 23 | -keep class org.kohsuke.github.* { *; } 24 | 25 | -dontwarn com.sun.tools.javac.processing.JavacFiler 26 | -dontwarn com.sun.tools.javac.processing.JavacProcessingEnvironment 27 | -dontwarn com.sun.tools.javac.util.Context 28 | -dontwarn com.sun.tools.javac.util.Options 29 | -dontwarn java.beans.ConstructorProperties 30 | -dontwarn java.beans.Transient 31 | -dontwarn javax.lang.model.SourceVersion 32 | -dontwarn javax.lang.model.element.AnnotationMirror 33 | -dontwarn javax.lang.model.element.Element 34 | -dontwarn javax.lang.model.element.ExecutableElement 35 | -dontwarn javax.tools.Diagnostic$Kind 36 | -dontwarn javax.tools.JavaFileManager$Location 37 | -dontwarn javax.tools.JavaFileManager 38 | -dontwarn javax.tools.StandardLocation 39 | -dontwarn lombok.** 40 | -dontwarn org.apache.tools.ant.BuildException 41 | -dontwarn org.apache.tools.ant.Location 42 | -dontwarn org.apache.tools.ant.Project 43 | -dontwarn org.apache.tools.ant.Task 44 | -dontwarn org.apache.tools.ant.types.FileSet 45 | -dontwarn org.apache.tools.ant.types.Path 46 | -dontwarn org.apache.tools.ant.types.Reference 47 | -dontwarn org.apache.tools.ant.types.ResourceCollection 48 | -dontwarn org.eclipse.** 49 | -dontwarn org.osgi.framework.Bundle 50 | -dontwarn org.osgi.framework.BundleContext 51 | -dontwarn com.infradna.tool.bridge_method_injector.BridgeMethodsAdded 52 | -dontwarn com.infradna.tool.bridge_method_injector.WithBridgeMethods 53 | -dontwarn edu.umd.cs.findbugs.annotations.NonNull 54 | -dontwarn edu.umd.cs.findbugs.annotations.SuppressFBWarnings 55 | -dontwarn okhttp3.internal.annotations.EverythingIsNonNull 56 | -dontwarn edu.umd.cs.findbugs.annotations.CheckForNull -------------------------------------------------------------------------------- /app/src/androidTest/java/com/xiaoniu/qqversionlist/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.xiaoniu.qqversionlist 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert.* 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * See [testing documentation](http://d.android.com/tools/testing). 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | assertEquals("com.xiaoniu.qqversionlist", appContext.packageName) 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher_special-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/ic_launcher_special-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/QverbowApplication.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist 22 | 23 | import android.app.Application 24 | import com.google.android.material.color.DynamicColors 25 | import com.tencent.kona.crypto.KonaCryptoProvider 26 | import java.security.Security 27 | 28 | class QverbowApplication : Application() { 29 | companion object { 30 | lateinit var instance: QverbowApplication 31 | 32 | const val SHIPLY_DEFAULT_APPID = "537230561" 33 | const val SHIPLY_DEFAULT_SDK_VERSION = "1.3.36-RC03" 34 | const val SHIPLY_APPID_QQ = "4cd6974be1" 35 | const val SHIPLY_APPID_TIM = "ad6b501b0e" 36 | const val SHIPLY_SIGN_ID_QQ = "0ccc46ca-154c-4c6b-8b0b-4d8537ffcbcc" 37 | const val SHIPLY_SIGN_ID_TIM = "33641818-aee7-445a-82d4-b7d0bce3a85a" 38 | 39 | const val ANDROID_QQ_PACKAGE_NAME = "com.tencent.mobileqq" 40 | const val ANDROID_TIM_PACKAGE_NAME = "com.tencent.tim" 41 | const val ANDROID_WECHAT_PACKAGE_NAME = "com.tencent.mm" 42 | const val ANDROID_WECOM_PACKAGE_NAME = "com.tencent.wework" 43 | const val ANDROID_WETYPE_PACKAGE_NAME = "com.tencent.wetype" 44 | const val ANDROID_QIDIAN_PACKAGE_NAME = "com.tencent.qidian" 45 | 46 | const val EARLIEST_ACCESSIBILITY_QQ_VERSION = false 47 | const val EARLIEST_ACCESSIBILITY_TIM_VERSION = false 48 | const val EARLIEST_QQNT_FRAMEWORK_QQ_VERSION_STABLE = "8.9.63" 49 | const val EARLIEST_QQNT_FRAMEWORK_TIM_VERSION_STABLE = "4.0.0" 50 | const val EARLIEST_UNREAL_ENGINE_QQ_VERSION_STABLE = "8.8.55" 51 | const val EARLIEST_KUIKLY_FRAMEWORK_QQ_VERSION_STABLE = "8.9.50" 52 | const val EARLIEST_KUIKLY_FRAMEWORK_TIM_VERSION_STABLE = "4.0.0" 53 | 54 | const val ZHIPU_TOKEN = "ZhipuAIMaaSPlatformToken" 55 | const val GITHUB_TOKEN = "GitHubPersonalAccessToken" 56 | } 57 | 58 | override fun onCreate() { 59 | // Android 12+ 动态颜色 60 | DynamicColors.applyToActivitiesIfAvailable(this) 61 | instance = this 62 | super.onCreate() 63 | Security.addProvider(KonaCryptoProvider()) // 腾讯 Kona 国密套件需要在应用启动时添加 Provider 64 | } 65 | } -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/LocalAppStackResult.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | data class LocalAppStackResult( 24 | val id: String, 25 | val dex: String 26 | ) 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/LocalAppStackRule.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | data class LocalAppStackRule( 24 | val id: String, 25 | val dex: Array, 26 | val type: String, 27 | val url: String? = null, 28 | val desc: String? = null 29 | ) { 30 | override fun equals(other: Any?): Boolean { 31 | if (this === other) return true 32 | if (javaClass != other?.javaClass) return false 33 | 34 | other as LocalAppStackRule 35 | 36 | if (id != other.id) return false 37 | if (!dex.contentEquals(other.dex)) return false 38 | if (type != other.type) return false 39 | if (url != other.url) return false 40 | if (desc != other.desc) return false 41 | 42 | return true 43 | } 44 | 45 | override fun hashCode(): Int { 46 | var result = id.hashCode() 47 | result = 31 * result + dex.contentHashCode() 48 | result = 31 * result + type.hashCode() 49 | result = 31 * result + (url?.hashCode() ?: 0) 50 | result = 31 * result + (desc?.hashCode() ?: 0) 51 | return result 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/QQVersionBean.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | import kotlinx.serialization.Serializable 24 | 25 | /** 26 | * @param versions QQ 版本代码 27 | * @param versionNumber QQ 版本号 28 | * @param size QQ 版本额定大小 29 | * @param featureTitle QQ 版本特性标题 30 | * @param imgs QQ 应用宣传图片列表 31 | * @param summary QQ 版本特性描述列表 32 | * @param jsonString 该 QQ 版本 JSON 字符串详情 33 | * @param displayType 卡片展示类型,0 为收起态,1 为展开态 34 | * @param displayInstall 展示是否安装到本机的标签 35 | * @param isQQNTFramework 该版本是否基于 QQNT 技术架构 36 | * @param isUnrealEngine 该版本是否存在 Unreal Engine Lib 37 | * @param isKuiklyInside 该版本是否存在 TDS 腾讯端服务 Kukily 开发框架 38 | */ 39 | @Serializable 40 | data class QQVersionBean( 41 | val versions: String, 42 | val versionNumber: String, 43 | val size: String, 44 | val featureTitle: String, 45 | val imgs: List, 46 | val summary: List, 47 | 48 | var jsonString: String = "", 49 | var displayType: Int = 0, // 0为收起 50 | var displayInstall: Boolean = false, // false 为不展示 51 | var isAccessibility: Boolean = false, 52 | var isQQNTFramework: Boolean = false, 53 | var isUnrealEngine: Boolean = false, 54 | var isKuiklyInside: Boolean = false 55 | ) 56 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/QverbowRelease.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | import java.util.Date 24 | 25 | data class QverbowRelease( 26 | val tagName: String, 27 | val name: String?, 28 | val body: String?, 29 | val createdAt: Date, 30 | val htmlUrl: String, 31 | val zipballUrl: String?, 32 | val tarballUrl: String?, 33 | val isDraft: Boolean, 34 | val isPrerelease: Boolean, 35 | val assets: List? 36 | ) 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/QverbowReleaseAssets.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | class QverbowReleaseAssets( 24 | val name: String, val browserDownloadUrl: String, val contentType: String, val size: Long 25 | ) 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/TIMVersionBean.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | import kotlinx.serialization.Serializable 24 | 25 | /** 26 | * @param version TIM 版本号 27 | * @param datetime TIM 版本发布日期 28 | * @param fix TIM 版本优化描述 29 | * @param feature TIM 版本新功能描述 30 | * @param link TIM 最新官网正式版下载链接 31 | * @param jsonString 该 TIM 版本 JSON 字符串详情 32 | * @param displayType 卡片展示类型,0 为收起态,1 为展开态 33 | * @param displayInstall 展示是否安装到本机的标签 34 | * @param isQQNTFramework 该版本是否基于 QQNT 技术架构 35 | * @param isKuiklyInside 该版本是否存在 TDS 腾讯端服务 Kukily 开发框架 36 | */ 37 | @Serializable 38 | data class TIMVersionBean( 39 | val version: String, 40 | val datetime: String, 41 | val fix: List, 42 | val feature: List, 43 | 44 | var link: String = "", 45 | var jsonString: String = "", 46 | var displayType: Int = 0, // 0为收起 47 | var displayInstall: Boolean = false, // false 为不展示 48 | var isAccessibility: Boolean = false, 49 | var isQQNTFramework: Boolean = false, 50 | var isKuiklyInside: Boolean = false 51 | ) 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/data/WeixinVersionBean.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.data 22 | 23 | data class WeixinVersionBean( 24 | val version: String, 25 | val datetime: String, 26 | 27 | val isAlpha: Boolean = false, 28 | var displayInstall: Boolean = false, // false 为不展示 29 | var displayType: Int = 0, // 0为收起 30 | var link: String = "", 31 | ) 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/service/FirebaseMessagingService.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.service 22 | 23 | import android.app.NotificationManager 24 | import androidx.core.app.NotificationCompat 25 | import com.google.firebase.messaging.FirebaseMessagingService 26 | import com.google.firebase.messaging.RemoteMessage 27 | import com.xiaoniu.qqversionlist.R 28 | 29 | class FirebaseMessagingService : FirebaseMessagingService() { 30 | override fun onNewToken(token: String) { 31 | super.onNewToken(token) 32 | } 33 | 34 | override fun onMessageReceived(remoteMessage: RemoteMessage) { 35 | if (!remoteMessage.data.isNotEmpty()) { 36 | // 创建 Notification 37 | val notificationBuilder = NotificationCompat.Builder( 38 | this, getString(R.string.rainbow_notification_channel_id) 39 | ).setSmallIcon(R.drawable.qv_logo_notification) 40 | .setContentTitle(remoteMessage.notification!!.title) 41 | .setContentText(remoteMessage.notification!!.body) 42 | .setPriority(NotificationCompat.PRIORITY_DEFAULT) 43 | .setContentIntent(null) 44 | .setAutoCancel(true) 45 | 46 | // 获取 NotificationManager 并发送通知 47 | val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager 48 | notificationManager.notify(1, notificationBuilder.build()) 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/ui/VersionListPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.ui 22 | 23 | import android.content.Context 24 | import androidx.fragment.app.Fragment 25 | import androidx.fragment.app.FragmentActivity 26 | import androidx.viewpager2.adapter.FragmentStateAdapter 27 | 28 | class VersionListPagerAdapter(context: Context) : 29 | FragmentStateAdapter(context as FragmentActivity) { 30 | 31 | override fun getItemCount(): Int = 3 32 | 33 | override fun createFragment(position: Int): Fragment { 34 | return when (position) { 35 | 0 -> QQVersionListFragment() 36 | 1 -> TIMVersionListFragment() 37 | 2 -> WeixinVersionListFragment() 38 | else -> throw IllegalArgumentException(position.toString()) 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/ui/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package com.xiaoniu.qqversionlist.ui.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val Purple80 = Color(0xFFD0BCFF) 6 | val PurpleGrey80 = Color(0xFFCCC2DC) 7 | val Pink80 = Color(0xFFEFB8C8) 8 | 9 | val Purple40 = Color(0xFF6650a4) 10 | val PurpleGrey40 = Color(0xFF625b71) 11 | val Pink40 = Color(0xFF7D5260) -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/ui/theme/Theme.kt: -------------------------------------------------------------------------------- 1 | package com.xiaoniu.qqversionlist.ui.theme 2 | 3 | import android.os.Build 4 | import androidx.compose.foundation.isSystemInDarkTheme 5 | import androidx.compose.material3.MaterialTheme 6 | import androidx.compose.material3.darkColorScheme 7 | import androidx.compose.material3.dynamicDarkColorScheme 8 | import androidx.compose.material3.dynamicLightColorScheme 9 | import androidx.compose.material3.lightColorScheme 10 | import androidx.compose.runtime.Composable 11 | import androidx.compose.ui.platform.LocalContext 12 | 13 | private val DarkColorScheme = darkColorScheme( 14 | primary = Purple80, 15 | secondary = PurpleGrey80, 16 | tertiary = Pink80 17 | ) 18 | 19 | private val LightColorScheme = lightColorScheme( 20 | primary = Purple40, 21 | secondary = PurpleGrey40, 22 | tertiary = Pink40 23 | 24 | /* Other default colors to override 25 | background = Color(0xFFFFFBFE), 26 | surface = Color(0xFFFFFBFE), 27 | onPrimary = Color.White, 28 | onSecondary = Color.White, 29 | onTertiary = Color.White, 30 | onBackground = Color(0xFF1C1B1F), 31 | onSurface = Color(0xFF1C1B1F), 32 | */ 33 | ) 34 | 35 | @Composable 36 | fun QQVersionListTheme( 37 | darkTheme: Boolean = isSystemInDarkTheme(), 38 | // Dynamic color is available on Android 12+ 39 | dynamicColor: Boolean = true, 40 | content: @Composable () -> Unit 41 | ) { 42 | val colorScheme = when { 43 | dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { 44 | val context = LocalContext.current 45 | if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) 46 | } 47 | 48 | darkTheme -> DarkColorScheme 49 | else -> LightColorScheme 50 | } 51 | 52 | MaterialTheme( 53 | colorScheme = colorScheme, 54 | typography = Typography, 55 | content = content 56 | ) 57 | } -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/ui/theme/Type.kt: -------------------------------------------------------------------------------- 1 | package com.xiaoniu.qqversionlist.ui.theme 2 | 3 | import androidx.compose.material3.Typography 4 | import androidx.compose.ui.text.TextStyle 5 | import androidx.compose.ui.text.font.FontFamily 6 | import androidx.compose.ui.text.font.FontWeight 7 | import androidx.compose.ui.unit.sp 8 | 9 | // Set of Material typography styles to start with 10 | val Typography = Typography( 11 | bodyLarge = TextStyle( 12 | fontFamily = FontFamily.Default, 13 | fontWeight = FontWeight.Normal, 14 | fontSize = 16.sp, 15 | lineHeight = 24.sp, 16 | letterSpacing = 0.5.sp 17 | ) 18 | /* Other default text styles to override 19 | titleLarge = TextStyle( 20 | fontFamily = FontFamily.Default, 21 | fontWeight = FontWeight.Normal, 22 | fontSize = 22.sp, 23 | lineHeight = 28.sp, 24 | letterSpacing = 0.sp 25 | ), 26 | labelSmall = TextStyle( 27 | fontFamily = FontFamily.Default, 28 | fontWeight = FontWeight.Medium, 29 | fontSize = 11.sp, 30 | lineHeight = 16.sp, 31 | letterSpacing = 0.5.sp 32 | ) 33 | */ 34 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/util/ClipboardUtil.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.util 22 | 23 | import android.content.ClipData 24 | import android.content.ClipboardManager 25 | import android.content.Context 26 | import com.xiaoniu.qqversionlist.R 27 | import com.xiaoniu.qqversionlist.util.InfoUtil.showToast 28 | 29 | object ClipboardUtil { 30 | fun Context.copyText(text: String) { 31 | val clipboardManager = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager 32 | clipboardManager.setPrimaryClip(ClipData.newPlainText("", text)) 33 | showToast("${getString(R.string.copied)}$text") 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/util/Extensions.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.util 22 | 23 | import android.content.res.Resources 24 | 25 | object Extensions { 26 | val Number.dpToPx get() = (toFloat() * Resources.getSystem().displayMetrics.density).toInt() 27 | val Number.pxToDp get() = (toFloat() / Resources.getSystem().displayMetrics.density).toInt() 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/util/LogUtil.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.util 22 | 23 | import android.util.Log 24 | 25 | object LogUtil { 26 | /** 27 | * 打印对象的日志信息 28 | * 29 | * @return 返回调用此函数的对象实例,以便支持链式调用 30 | */ 31 | fun Any.log(): Any { 32 | Log.i("QQVersionList", this.toString()) 33 | return this 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/util/OSSLicensesObject.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.util 22 | 23 | import com.mikepenz.aboutlibraries.Libs 24 | 25 | object OSSLicensesObject { 26 | @Volatile 27 | private var _libs: Libs? = null 28 | 29 | var libs: Libs? 30 | get() = _libs 31 | set(value) { 32 | _libs = value 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/xiaoniu/qqversionlist/util/ZhipuSDKUtil.kt: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-or-later 2 | 3 | /* 4 | Qverbow Util 5 | Copyright (C) 2023 klxiaoniu 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU Affero General Public License as 9 | published by the Free Software Foundation, either version 3 of the 10 | License, or (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU Affero General Public License for more details. 16 | 17 | You should have received a copy of the GNU Affero General Public License 18 | along with this program. If not, see . 19 | */ 20 | 21 | package com.xiaoniu.qqversionlist.util 22 | 23 | import com.fasterxml.jackson.databind.ObjectMapper 24 | import com.zhipu.oapi.ClientV4 25 | import com.zhipu.oapi.Constants 26 | import com.zhipu.oapi.service.v4.model.ChatCompletionRequest 27 | import com.zhipu.oapi.service.v4.model.ChatMessage 28 | import com.zhipu.oapi.service.v4.model.ChatMessageRole 29 | import okhttp3.ConnectionPool 30 | import java.util.concurrent.TimeUnit 31 | 32 | object ZhipuSDKUtil { 33 | const val REQUEST_ID_TEMPLATE = "request_id_%s" 34 | const val TEMPERATURE = "temperature" 35 | const val MAX_TOKENS = "max_tokens" 36 | 37 | /** 38 | * 使用指定的系统提示和问题,通过 Zhipu API 获取回答 39 | * 40 | * @param systemPrompt 系统提示文本,用于设置对话的背景或规则 41 | * @param question 用户提出的问题文本 42 | * @param token 访问 Zhipu API 所需的认证令牌 43 | * @return Zhipu API 返回的回答内容的字符串表示,如果请求失败则可能返回 null 44 | */ 45 | fun getZhipuWrite(systemPrompt: String, question: String, token: String): String? { 46 | val client = ClientV4.Builder(token).networkConfig(300, 100, 100, 100, TimeUnit.SECONDS) 47 | .connectionPool(ConnectionPool(8, 1, TimeUnit.SECONDS)).build() 48 | 49 | val messages = ArrayList() 50 | val systemMessage = ChatMessage(ChatMessageRole.SYSTEM.value(), systemPrompt) 51 | val chatMessage = ChatMessage(ChatMessageRole.USER.value(), question) 52 | messages.add(systemMessage) 53 | messages.add(chatMessage) 54 | val requestId = String.format(REQUEST_ID_TEMPLATE, System.currentTimeMillis()) 55 | 56 | val extraJson = hashMapOf() 57 | extraJson[TEMPERATURE] = 0 58 | extraJson[MAX_TOKENS] = 1024 59 | 60 | val chatCompletionRequest = 61 | ChatCompletionRequest.builder().model(Constants.ModelChatGLM4Flash).stream(false) 62 | .invokeMethod(Constants.invokeMethod).messages(messages).requestId(requestId) 63 | .extraJson(extraJson).build() 64 | 65 | val invokeModelApiResp = client.invokeModelApi(chatCompletionRequest) 66 | return ObjectMapper().writeValueAsString(invokeModelApiResp) 67 | } 68 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/accessibility_new_20px.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/accessibility_new_24px.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ai_generate_2.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/alert_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/apps_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_down_s_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 22 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_left_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_right_s_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/arrow_up_s_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 22 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bottom_sheet_drag_handle.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/braces_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bubble_chart_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/check_circle.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/clipboard_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/compose.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/download_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/error_warning_fill.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_copy_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/file_text_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/flashlight_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/flask_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/flutter_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/git_commit_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/git_repository_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gitlab_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/hippy_official.xml: -------------------------------------------------------------------------------- 1 | 32 | 37 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 17 | 18 | 19 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground_splash.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 17 | 18 | 19 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/info_card_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/information_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/key_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/kuikly_official.xml: -------------------------------------------------------------------------------- 1 | 32 | 37 | 38 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/lightbulb_fill.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/link.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/mini_program_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/open_source_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/palette_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 22 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/phone_find_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qqnt_logo_unofficial.xml: -------------------------------------------------------------------------------- 1 | 32 | 37 | 38 | 39 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qqnt_logo_unofficial_fix.xml: -------------------------------------------------------------------------------- 1 | 32 | 37 | 42 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/question_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/qv_logo_notification.xml: -------------------------------------------------------------------------------- 1 | 7 | 14 | 15 | 16 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/refresh_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/save_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/scan_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/scan_shortcut_icon_foreground.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 25 | 29 | 33 | 37 | 41 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/settings_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_cell_bottom.xml: -------------------------------------------------------------------------------- 1 | 18 | 20 | 21 | 22 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_cell_middle.xml: -------------------------------------------------------------------------------- 1 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_cell_single.xml: -------------------------------------------------------------------------------- 1 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_cell_top.xml: -------------------------------------------------------------------------------- 1 | 18 | 20 | 21 | 22 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/share_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shield_keyhole_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shiply_official.xml: -------------------------------------------------------------------------------- 1 | 32 | 37 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/skip_forward_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sparkling_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stack_line.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stop_fill.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stop_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tencent_logo.xml: -------------------------------------------------------------------------------- 1 | 4 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tools_line.xml: -------------------------------------------------------------------------------- 1 | 16 | 21 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ue_icon_2023_black.xml: -------------------------------------------------------------------------------- 1 | 8 | 13 | 14 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/font/tcloud_number_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/font/tcloud_number_bold.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/tcloud_number_light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/font/tcloud_number_light.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/tcloud_number_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/font/tcloud_number_regular.ttf -------------------------------------------------------------------------------- /app/src/main/res/font/tcloud_number_vf.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/font/tcloud_number_vf.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_bottom_click.xml: -------------------------------------------------------------------------------- 1 | 18 | 30 | 31 | 37 | 38 | 45 | 46 | 53 | 54 | 62 | 63 | 64 | 70 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_bottom_switch.xml: -------------------------------------------------------------------------------- 1 | 18 | 30 | 31 | 39 | 40 | 46 | 47 | 54 | 55 | 63 | 64 | 65 | 72 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_middle_click.xml: -------------------------------------------------------------------------------- 1 | 18 | 31 | 32 | 38 | 39 | 46 | 47 | 54 | 55 | 63 | 64 | 65 | 71 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_middle_switch.xml: -------------------------------------------------------------------------------- 1 | 18 | 31 | 32 | 40 | 41 | 47 | 48 | 55 | 56 | 64 | 65 | 66 | 73 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_single_click.xml: -------------------------------------------------------------------------------- 1 | 18 | 26 | 27 | 33 | 34 | 41 | 42 | 49 | 50 | 58 | 59 | 60 | 66 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_single_switch.xml: -------------------------------------------------------------------------------- 1 | 18 | 29 | 30 | 38 | 39 | 45 | 46 | 53 | 54 | 62 | 63 | 64 | 71 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_top_click.xml: -------------------------------------------------------------------------------- 1 | 18 | 30 | 31 | 37 | 38 | 45 | 46 | 53 | 54 | 62 | 63 | 64 | 70 | -------------------------------------------------------------------------------- /app/src/main/res/layout/cell_top_switch.xml: -------------------------------------------------------------------------------- 1 | 18 | 30 | 31 | 39 | 40 | 46 | 47 | 54 | 55 | 63 | 64 | 65 | 72 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_hash.xml: -------------------------------------------------------------------------------- 1 | 18 | 25 | 26 | 30 | 31 | 36 | 37 | 42 | 43 | 50 | 51 | 57 | 58 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_loading.xml: -------------------------------------------------------------------------------- 1 | 18 | 25 | 26 | 31 | 32 | 37 | 38 | 48 | 49 | 56 | 57 | -------------------------------------------------------------------------------- /app/src/main/res/layout/exp_link_next_button.xml: -------------------------------------------------------------------------------- 1 | 18 | 27 | 28 | 33 | 34 | 38 | 39 | 46 | 47 | 54 | 55 | 56 | 57 | 58 | 59 | 66 | 67 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_exp_back_url_card.xml: -------------------------------------------------------------------------------- 1 | 18 | 31 | 32 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/local_qq.xml: -------------------------------------------------------------------------------- 1 | 18 | 23 | 24 | 36 | 37 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /app/src/main/res/layout/local_weixin.xml: -------------------------------------------------------------------------------- 1 | 18 | 23 | 24 | 36 | 37 | 49 | 50 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycle_qq_version.xml: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycle_tim_version.xml: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/scan_shortcut_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/scan_shortcut_icon_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/scan_shortcut_icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-hdpi/scan_shortcut_icon.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/scan_shortcut_icon_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-hdpi/scan_shortcut_icon_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/scan_shortcut_icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-mdpi/scan_shortcut_icon.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/scan_shortcut_icon_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-mdpi/scan_shortcut_icon_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/scan_shortcut_icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xhdpi/scan_shortcut_icon.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/scan_shortcut_icon_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xhdpi/scan_shortcut_icon_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/scan_shortcut_icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxhdpi/scan_shortcut_icon.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/scan_shortcut_icon_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxhdpi/scan_shortcut_icon_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/scan_shortcut_icon.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxxhdpi/scan_shortcut_icon.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/scan_shortcut_icon_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/klxiaoniu/QQVersionList/efb255dc08f2114ee30ae13f99ac669d4a154466/app/src/main/res/mipmap-xxxhdpi/scan_shortcut_icon_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 38 | 39 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | @string/stableVersion 21 | @string/previewVersion 22 | @string/timVersion 23 | @string/weixinEnumerateVersion 24 | 25 | 26 | 27 | @string/stableVersion 28 | @string/previewVersion 29 | @string/spaceEnumerateVersion 30 | @string/timVersion 31 | @string/weixinEnumerateVersion 32 | 33 | 34 | 35 | @string/shiplyTargetAppQQ 36 | @string/shiplyTargetAppTIM 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | #FF000000 20 | #FFFFFFFF 21 | #A0F2DF 22 | #00201B 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | #A0F2DF 20 | -------------------------------------------------------------------------------- /app/src/main/res/values/scan_shortcut_icon_background.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | #A0F2DF 20 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | 37 | 38 | 42 | 43 |