mirror of
https://github.com/KitsunePie/AppErrorsTracking.git
synced 2025-09-01 08:45:16 +08:00
Compare commits
53 Commits
Author | SHA1 | Date | |
---|---|---|---|
c301d5aab7
|
|||
2c673280cc
|
|||
036a3f90e9
|
|||
5b6caf4769
|
|||
140b74fcab
|
|||
e59b7f501a
|
|||
ab03c74659
|
|||
a17e823a46
|
|||
5a60ef47b5
|
|||
|
9092e4d17a | ||
d70cf11a42
|
|||
8b73ad6610
|
|||
652c8383c1
|
|||
fbabb41f33
|
|||
f0b52d54c5
|
|||
40747a81ea | |||
cabf025082
|
|||
248daa5c80
|
|||
d253b26294
|
|||
d7c26180ae
|
|||
0facd0bcbf
|
|||
32855f4b61
|
|||
183999ca30
|
|||
0ef91d8578
|
|||
|
ff948fd1ae | ||
|
7c237dd024 | ||
28749a9226
|
|||
46b810e409
|
|||
b497173e02
|
|||
18c49405a8
|
|||
7d96a5097e
|
|||
|
773a5258df | ||
|
59b835dd2e | ||
|
69a96cb819 | ||
53c6f8a204
|
|||
d1480ae8f3
|
|||
|
91cfda35bc | ||
c774dbebf2
|
|||
e81ca4ec10
|
|||
cafb664c1a
|
|||
7939d25bb6
|
|||
1b6bc71e51
|
|||
9483cd7940
|
|||
d1bd76221d
|
|||
b13df7179a
|
|||
10a51c800b
|
|||
308afa7d6a
|
|||
7775c82caa
|
|||
60b3963df1
|
|||
b7ffdf3231
|
|||
5f96817d8c
|
|||
063b093eed
|
|||
fb388ee783
|
@@ -10,6 +10,22 @@ ktlint_standard_argument-list-wrapping = disabled
|
||||
ktlint_standard_parameter-list-wrapping = disabled
|
||||
ktlint_standard_trailing-comma-on-declaration-site = disabled
|
||||
ktlint_function_signature_body_expression_wrapping = multiline
|
||||
ktlint_standard_string-template-indent = disabled
|
||||
ktlint_standard_function-signature = disabled
|
||||
ktlint_standard_trailing-comma-on-call-site = disabled
|
||||
ktlint_standard_multiline-expression-wrapping = disabled
|
||||
ktlint_standard_no-empty-first-line-in-class-body = disabled
|
||||
ktlint_standard_if-else-wrapping = disabled
|
||||
ktlint_standard_if-else-bracing = disabled
|
||||
ktlint_standard_statement-wrapping = disabled
|
||||
ktlint_standard_blank-line-before-declaration = disabled
|
||||
ktlint_standard_no-empty-file = disabled
|
||||
ktlint_standard_property-naming = disabled
|
||||
ktlint_standard_function-naming = disabled
|
||||
ktlint_standard_chain-method-continuation = disabled
|
||||
ktlint_standard_class-signature = disabled
|
||||
ktlint_standard_condition-wrapping = disabled
|
||||
ktlint_standard_class-signature = disabled
|
||||
ij_continuation_indent_size = 2
|
||||
indent_size = 4
|
||||
indent_style = space
|
||||
|
16
.github/workflows/commit_ci.yml
vendored
16
.github/workflows/commit_ci.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
See commit detail [here](${{ github.event.head_commit.url }})
|
||||
COMMIT_URL: ${{ github.event.head_commit.url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Prepare GitHub Env
|
||||
run: |
|
||||
GITHUB_SHA=${{ github.sha }}
|
||||
@@ -39,10 +39,10 @@ jobs:
|
||||
uses: jwlawson/actions-setup-cmake@v1
|
||||
with:
|
||||
cmake-version: '3.22.1'
|
||||
- name: Prepare Java 17
|
||||
uses: actions/setup-java@v3
|
||||
- name: Prepare Java 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 17
|
||||
java-version: 21
|
||||
java-package: jdk
|
||||
distribution: 'temurin'
|
||||
cache: 'gradle'
|
||||
@@ -75,22 +75,22 @@ jobs:
|
||||
echo "DEMO_DEBUG_APK_PATH=$(find ${{ env.DEMO_APK_OUTPUT_PATH }}/debug -name '*.apk')" >> $GITHUB_ENV
|
||||
echo "DEMO_RELEASE_APK_PATH=$(find ${{ env.DEMO_APK_OUTPUT_PATH }}/release -name '*.apk')" >> $GITHUB_ENV
|
||||
- name: Upload Artifacts (Module-Debug)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.MODULE_DEBUG_APK_PATH }}
|
||||
name: AppErrorsTracking-module-debug-${{ github.event.head_commit.id }}
|
||||
- name: Upload Artifacts (Module-Release)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.MODULE_RELEASE_APK_PATH }}
|
||||
name: AppErrorsTracking-module-release-${{ github.event.head_commit.id }}
|
||||
- name: Upload Artifacts (Demo-Debug)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.DEMO_DEBUG_APK_PATH }}
|
||||
name: AppErrorsTracking-demo-debug-${{ github.event.head_commit.id }}
|
||||
- name: Upload Artifacts (Demo-Release)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.DEMO_RELEASE_APK_PATH }}
|
||||
name: AppErrorsTracking-demo-release-${{ github.event.head_commit.id }}
|
||||
|
16
.github/workflows/pull_request_ci.yml
vendored
16
.github/workflows/pull_request_ci.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
MODULE_APK_OUTPUT_PATH: 'module-app/build/outputs/apk'
|
||||
DEMO_APK_OUTPUT_PATH: 'demo-app/build/outputs/apk'
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: Prepare GitHub Env
|
||||
run: |
|
||||
GITHUB_SHA=${{ github.sha }}
|
||||
@@ -28,10 +28,10 @@ jobs:
|
||||
uses: jwlawson/actions-setup-cmake@v1
|
||||
with:
|
||||
cmake-version: '3.22.1'
|
||||
- name: Prepare Java 17
|
||||
uses: actions/setup-java@v3
|
||||
- name: Prepare Java 21
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: 17
|
||||
java-version: 21
|
||||
java-package: jdk
|
||||
distribution: 'temurin'
|
||||
cache: 'gradle'
|
||||
@@ -64,22 +64,22 @@ jobs:
|
||||
echo "DEMO_DEBUG_APK_PATH=$(find ${{ env.DEMO_APK_OUTPUT_PATH }}/debug -name '*.apk')" >> $GITHUB_ENV
|
||||
echo "DEMO_RELEASE_APK_PATH=$(find ${{ env.DEMO_APK_OUTPUT_PATH }}/release -name '*.apk')" >> $GITHUB_ENV
|
||||
- name: Upload Artifacts (Module-Debug)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.MODULE_DEBUG_APK_PATH }}
|
||||
name: AppErrorsTracking-module-debug-${{ github.event.head_commit.id }}
|
||||
- name: Upload Artifacts (Module-Release)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.MODULE_RELEASE_APK_PATH }}
|
||||
name: AppErrorsTracking-module-release-${{ github.event.head_commit.id }}
|
||||
- name: Upload Artifacts (Demo-Debug)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.DEMO_DEBUG_APK_PATH }}
|
||||
name: AppErrorsTracking-demo-debug-${{ github.event.head_commit.id }}
|
||||
- name: Upload Artifacts (Demo-Release)
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
path: ${{ env.DEMO_RELEASE_APK_PATH }}
|
||||
name: AppErrorsTracking-demo-release-${{ github.event.head_commit.id }}
|
121
.gitignore
vendored
121
.gitignore
vendored
@@ -1,19 +1,110 @@
|
||||
# Project exclude paths
|
||||
## Fully .gtignore for IntelliJ, Android Studio and Gradle based Java projects
|
||||
## References:
|
||||
## - https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
## - https://github.com/android/platform-samples/blob/main/.gitignore
|
||||
|
||||
# User-specific stuff
|
||||
.idea/**/workspace.xml
|
||||
.idea/**/tasks.xml
|
||||
.idea/**/usage.statistics.xml
|
||||
.idea/**/dictionaries
|
||||
.idea/**/shelf
|
||||
|
||||
# AWS User-specific
|
||||
.idea/**/aws.xml
|
||||
|
||||
# Generated files
|
||||
.idea/**/contentModel.xml
|
||||
|
||||
# Sensitive or high-churn files
|
||||
.idea/**/dataSources/
|
||||
.idea/**/dataSources.ids
|
||||
.idea/**/dataSources.local.xml
|
||||
.idea/**/sqlDataSources.xml
|
||||
.idea/**/dynamic.xml
|
||||
.idea/**/uiDesigner.xml
|
||||
.idea/**/dbnavigator.xml
|
||||
|
||||
# Gradle
|
||||
.idea/**/gradle.xml
|
||||
.idea/**/libraries
|
||||
|
||||
# Gradle and Maven with auto-import
|
||||
.idea/.name
|
||||
.idea/artifacts
|
||||
.idea/compiler.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/modules.xml
|
||||
.idea/*.iml
|
||||
.idea/modules
|
||||
.idea/caches
|
||||
.idea/material_theme**
|
||||
.idea/other.xml
|
||||
*.iml
|
||||
.gradle
|
||||
/local.properties
|
||||
/.idea/caches
|
||||
/.idea/libraries
|
||||
/.idea/modules.xml
|
||||
/.idea/workspace.xml
|
||||
/.idea/navEditor.xml
|
||||
/.idea/assetWizardSettings.xml
|
||||
.DS_Store
|
||||
/build
|
||||
*.ipr
|
||||
|
||||
# Kotlin
|
||||
.kotlin
|
||||
|
||||
# Misc
|
||||
.idea/misc.xml
|
||||
|
||||
# CMake
|
||||
cmake-build-*/
|
||||
|
||||
# Mongo Explorer plugin
|
||||
.idea/**/mongoSettings.xml
|
||||
|
||||
# File-based project format
|
||||
*.iws
|
||||
|
||||
# IntelliJ
|
||||
out/
|
||||
|
||||
# mpeltonen/sbt-idea plugin
|
||||
.idea_modules/
|
||||
|
||||
# JIRA plugin
|
||||
atlassian-ide-plugin.xml
|
||||
|
||||
# Cursive Clojure plugin
|
||||
.idea/replstate.xml
|
||||
|
||||
# SonarLint plugin
|
||||
.idea/sonarlint/
|
||||
|
||||
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||
com_crashlytics_export_strings.xml
|
||||
crashlytics.properties
|
||||
crashlytics-build.properties
|
||||
fabric.properties
|
||||
|
||||
# Editor-based Rest Client
|
||||
.idea/httpRequests
|
||||
|
||||
# Android studio 3.1+ serialized cache file
|
||||
.idea/caches/build_file_checksums.ser
|
||||
|
||||
# Android studio 3.1+ additional
|
||||
.idea/deployment*.xml
|
||||
.idea/assetWizardSettings.xml
|
||||
.idea/androidTestResultsUserPreferences.xml
|
||||
|
||||
# Android projects
|
||||
**/local.properties
|
||||
/captures
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
/app/releaseHasController/
|
||||
/app/debug/
|
||||
/app/release/
|
||||
|
||||
# Gradle projects
|
||||
.gradle
|
||||
build/
|
||||
|
||||
# Mkdocs temporary serving folder
|
||||
docs-gen
|
||||
site
|
||||
*.bak
|
||||
.idea/appInsightsSettings.xml
|
||||
|
||||
# Mac OS
|
||||
.DS_Store
|
5
.idea/.gitignore
generated
vendored
5
.idea/.gitignore
generated
vendored
@@ -1,5 +0,0 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
/gradle.xml
|
||||
/misc.xml
|
6
.idea/AndroidProjectSystem.xml
generated
Normal file
6
.idea/AndroidProjectSystem.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AndroidProjectSystem">
|
||||
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
|
||||
</component>
|
||||
</project>
|
26
.idea/appInsightsSettings.xml
generated
26
.idea/appInsightsSettings.xml
generated
@@ -1,26 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AppInsightsSettings">
|
||||
<option name="tabSettings">
|
||||
<map>
|
||||
<entry key="Firebase Crashlytics">
|
||||
<value>
|
||||
<InsightsFilterSettings>
|
||||
<option name="connection">
|
||||
<ConnectionSetting>
|
||||
<option name="appId" value="PLACEHOLDER" />
|
||||
<option name="mobileSdkAppId" value="" />
|
||||
<option name="projectId" value="" />
|
||||
<option name="projectNumber" value="" />
|
||||
</ConnectionSetting>
|
||||
</option>
|
||||
<option name="signal" value="SIGNAL_UNSPECIFIED" />
|
||||
<option name="timeIntervalDays" value="THIRTY_DAYS" />
|
||||
<option name="visibilityType" value="ALL" />
|
||||
</InsightsFilterSettings>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
6
.idea/compiler.xml
generated
6
.idea/compiler.xml
generated
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="17" />
|
||||
</component>
|
||||
</project>
|
13
.idea/deploymentTargetDropDown.xml
generated
13
.idea/deploymentTargetDropDown.xml
generated
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="deploymentTargetDropDown">
|
||||
<value>
|
||||
<entry key="demo-app">
|
||||
<State />
|
||||
</entry>
|
||||
<entry key="module-app">
|
||||
<State />
|
||||
</entry>
|
||||
</value>
|
||||
</component>
|
||||
</project>
|
1
.idea/inspectionProfiles/Project_Default.xml
generated
1
.idea/inspectionProfiles/Project_Default.xml
generated
@@ -1,6 +1,7 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="CheckImageSize" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
|
||||
<option name="processCode" value="true" />
|
||||
<option name="processLiterals" value="true" />
|
||||
|
2
.idea/kotlinc.xml
generated
2
.idea/kotlinc.xml
generated
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="KotlinJpsPluginSettings">
|
||||
<option name="version" value="1.9.10" />
|
||||
<option name="version" value="2.1.10" />
|
||||
</component>
|
||||
</project>
|
7
.idea/ktlint-plugin.xml
generated
Normal file
7
.idea/ktlint-plugin.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="KtLint plugin">
|
||||
<ktlintMode>MANUAL</ktlintMode>
|
||||
<formatOnSave>false</formatOnSave>
|
||||
</component>
|
||||
</project>
|
17
.idea/runConfigurations.xml
generated
Normal file
17
.idea/runConfigurations.xml
generated
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
|
||||
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
|
||||
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
|
||||
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
121
README-ja-JP.md
Normal file
121
README-ja-JP.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# AppErrorsTracking
|
||||
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/releases)
|
||||

|
||||

|
||||
|
||||
[](https://t.me/AppErrorsTracking_CI)
|
||||
[](https://t.me/XiaofangInternet)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
|
||||
[](https://pd.qq.com/s/44gcy28h)
|
||||
|
||||
<img src="img-src/icon.png" width = "100" height = "100" alt="LOGO"/>
|
||||
|
||||
[English](README.md) | [简体中文](README-zh-CN.md) | 日本語
|
||||
|
||||
アプリのエラーダイアログに機能を追加し、カスタムROMによって削除されたダイアログを修正することで、Android開発者に最高の体験を提供します。
|
||||
|
||||
このプロジェクトは、どのAndroidシステム上でも使用できるXposedモジュールであり、現在は**LSPosed**でのみテストされています。
|
||||
|
||||
このXposedモジュールは、Android開発者のために特別に設計されています。
|
||||
|
||||
PCに接続できない、ADBが実行できない状態である場合にこのモジュールを使用して、インストールされているアプリのエラーをキャプチャする事で問題を迅速に特定することができます。
|
||||
|
||||
アプリがクラッシュしたときのエラーログは、開発者にとって貴重な財産です。もしあなたが開発者でなくても、このモジュールをインストールする事で開発者への貢献に繋がるでしょう。
|
||||
|
||||
> 最小サポート Android 7.0
|
||||
|
||||
## プロジェクトの理由
|
||||
|
||||
本当に理解不能ですが、中国本土のAndroid ROMは、MIUI(安定版を除く)を除いて、アプリのクラッシュ時のダイアログボックス(強制終了ダイアログ)を削除しています。私はシステムフレームワークを逆コンパイルして本当に削除されていることを確認するまで、これは当たり前の機能だと思っていました。
|
||||
|
||||
プロダクトマネージャーは、ユーザーにエラーを表示させずにアプリをクラッシュさせて直接終了する事が最善の解決策と考えているのでしょうか?
|
||||
それとも **隠された秘密** があるのでしょうか?
|
||||
|
||||
## 動作の原理
|
||||
|
||||
`Thread.UncaughtExceptionHandler`とは異なり、システムフレームワークをインジェクトする事でアプリのエラーを全方向からキャプチャするネイティブメソッドを使用します。これは、元の例外監視よりもパフォーマンスに優れています。
|
||||
|
||||
同時に、システムレベルの例外のキャプチャは、ネイティブプラットフォームの`スタックトレース`もキャプチャ可能です。
|
||||
|
||||
## 注意事項
|
||||
|
||||
システムによってネイティブにキャプチャされるエラーは、アプリ自体によって処理されないエラーのみです。アプリ自体に**Bugly**のような、エラーを自動的に収集するためのカスタムの `Thread.UncaughtExceptionHandler` がある場合、システムはアプリが実際にクラッシュ **(強制終了)** したかどうかを取得できません。
|
||||
|
||||
## 機能のリスト
|
||||
|
||||
- [x] システムのアプリエラーダイアログを完全に置き換え
|
||||
|
||||
- [x] 各アプリの例外をログに記録して再起動まで保持
|
||||
|
||||
- [x] エラーのスタックトレース関数のコピー、共有、エクスポート
|
||||
|
||||
- [x] エラー履歴記録機能、これは通知バータイルの「エラー履歴の記録」およびモジュールのメインインターフェースから入力
|
||||
|
||||
- [x] アプリのエラー統計機能
|
||||
|
||||
- [x] マルチプロセスアプリのエラー表示機能
|
||||
|
||||
## 翻訳の貢献
|
||||
|
||||
このプロジェクトは、あなたの国の言語に翻訳する事を歓迎します。
|
||||
|
||||
## リリースチャンネル
|
||||
|
||||
| <img src="https://avatars.githubusercontent.com/in/15368?s=64&v=4" width = "30" height = "30" alt="LOGO"/> | [GitHub CI](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml) | CI 自動ビルド (テスト版) |
|
||||
|------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-----------------------------------|
|
||||
|
||||
| <img src="https://github.com/peter-iakovlev/Telegram/blob/public/Icon.png?raw=true" width = "30" height = "30" alt="LOGO"/> | [Telegram CI チャンネル](https://t.me/AppErrorsTracking_CI) | CI 自動ビルド (テスト版) |
|
||||
|-----------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------|-----------------------------------|
|
||||
|
||||
| <img src="https://avatars.githubusercontent.com/in/15368?s=64&v=4" width = "30" height = "30" alt="LOGO"/> | [GitHub リリース](https://github.com/KitsunePie/AppErrorsTracking/releases) | 正式版 (安定版) |
|
||||
|------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|---------------------------------|
|
||||
|
||||
| <img src="https://avatars.githubusercontent.com/u/78217009?s=200&v=4?raw=true" width = "30" height = "30" alt="LOGO"/> | [Xposed モジュールのリポジトリ](https://github.com/Xposed-Modules-Repo/com.fankes.apperrorstracking/releases) | 正式版 (安定版) |
|
||||
|------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|---------------------------------|
|
||||
|
||||
このXposedモジュールのリリースは上記のURLに限定されています。
|
||||
|
||||
他の非公式チャンネルからダウンロードされたバージョンで及ぼした問題は一切関係はありません。
|
||||
|
||||
## プロモーション
|
||||
|
||||
<!--suppress HtmlDeprecatedAttribute -->
|
||||
<div align="center">
|
||||
<h2>ねぇ、きいて! 👋</h2>
|
||||
<h3>ここでは、Androidの開発ツールやUIデザイン、Gradleプラグイン、Xposedモジュール、実用的なソフトウェアなどの関連プロジェクトを紹介します。</h3>
|
||||
<h3>もしも以下のプロジェクトであなたのお役に立てたのであれば、私にStarを付けてください!</h3>
|
||||
<h3>すべてのプロジェクトは無料でオープンソースであり、対応するオープンソースライセンス契約に基づいています。</h3>
|
||||
<h1><a href="https://github.com/fankes/fankes/blob/main/project-promote/README.md">→ 私のプロジェクトについてはこちらをクリック ←</a></h1>
|
||||
</div>
|
||||
|
||||
## Starの推移
|
||||
|
||||

|
||||
|
||||
## ライセンス
|
||||
|
||||
- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
```
|
||||
Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
```
|
||||
|
||||
Powered by [YukiHookAPI](https://github.com/HighCapable/YukiHookAPI)
|
||||
|
||||
Copyright © 2017 Fankes Studio(qzmmcn@163.com)
|
@@ -1,19 +1,19 @@
|
||||
# AppErrorsTracking
|
||||
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/releases)
|
||||

|
||||

|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/releases)
|
||||

|
||||

|
||||
|
||||
[](https://t.me/AppErrorsTracking_CI)
|
||||
[](https://t.me/XiaofangInternet)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
|
||||
[](https://pd.qq.com/s/44gcy28h)
|
||||
[](https://t.me/AppErrorsTracking_CI)
|
||||
[](https://t.me/XiaofangInternet)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
|
||||
[](https://pd.qq.com/s/44gcy28h)
|
||||
|
||||
<img src="https://github.com/KitsunePie/AppErrorsTracking/blob/master/img-src/icon.png?raw=true" width = "100" height = "100" alt="LOGO"/>
|
||||
<img src="img-src/icon.png" width = "100" height = "100" alt="LOGO"/>
|
||||
|
||||
[English](https://github.com/KitsunePie/AppErrorsTracking/blob/master/README.md) | 简体中文
|
||||
[English](README.md) | 简体中文 | [日本語](README-ja-JP.md)
|
||||
|
||||
为原生 FC 对话框增加更多功能并修复国内定制 ROM 删除 FC 对话框的问题,给 Android 开发者带来更好的体验。
|
||||
|
||||
@@ -78,19 +78,29 @@
|
||||
|
||||
本模块发布地址仅限于上述所列出的地址,从其他非正规渠道下载到的版本或对您造成任何影响均与我们无关。
|
||||
|
||||
## 注意事项
|
||||
|
||||
<h3>1. 本软件免费、由兴趣驱动开发,仅供学习交流使用。如果你是从其他非官方渠道付费获得本软件,可能已遭遇欺诈,欢迎向我们举报可疑行为。</h3>
|
||||
|
||||
<h3>2. 本软件采用 <strong>GNU Affero General Public License (AGPL 3.0)</strong> 许可证。根据该许可证的要求:</h3>
|
||||
|
||||
- 任何衍生作品必须采用相同的 AGPL 许可证
|
||||
- 分发本软件或其修改版本时,必须提供完整的源代码
|
||||
- 必须保留原始的版权声明及许可证信息
|
||||
- 不得额外施加限制来限制他人对本软件的自由使用
|
||||
|
||||
<h3>3. 我们鼓励在遵守 AGPL 3.0 条款的前提下进行自由传播和改进,但请尊重作者署名权,勿冒用原作者名义。</h3>
|
||||
|
||||
## 项目推广
|
||||
|
||||
如果你正在寻找一个可以自动管理 Gradle 项目依赖的 Gradle 插件,你可以了解一下 [SweetDependency](https://github.com/HighCapable/SweetDependency) 项目。
|
||||
|
||||
如果你正在寻找一个可以自动生成属性键值的 Gradle 插件,你可以了解一下 [SweetProperty](https://github.com/HighCapable/SweetProperty) 项目。
|
||||
|
||||
本项目同样使用了 **SweetDependency** 和 **SweetProperty**。
|
||||
|
||||
## 捐赠支持
|
||||
|
||||
工作不易,无意外情况此项目将继续维护下去,提供更多可能,欢迎打赏。
|
||||
|
||||
<img src="https://github.com/fankes/fankes/blob/main/img-src/payment_code.jpg?raw=true" width = "500" alt="Payment Code"/>
|
||||
<!--suppress HtmlDeprecatedAttribute -->
|
||||
<div align="center">
|
||||
<h2>嘿,还请君留步!👋</h2>
|
||||
<h3>这里有 Android 开发工具、UI 设计、Gradle 插件、Xposed 模块和实用软件等相关项目。</h3>
|
||||
<h3>如果下方的项目能为你提供帮助,不妨为我点个 star 吧!</h3>
|
||||
<h3>所有项目免费、开源,遵循对应开源许可协议。</h3>
|
||||
<h1><a href="https://github.com/fankes/fankes/blob/main/project-promote/README-zh-CN.md">→ 查看更多关于我的项目,请点击这里 ←</a></h1>
|
||||
</div>
|
||||
|
||||
## Star History
|
||||
|
||||
@@ -101,7 +111,7 @@
|
||||
- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
```
|
||||
Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
@@ -119,4 +129,4 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Powered by [YukiHookAPI](https://github.com/HighCapable/YukiHookAPI)
|
||||
|
||||
版权所有 © 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
版权所有 © 2017 Fankes Studio(qzmmcn@163.com)
|
||||
|
43
README.md
43
README.md
@@ -1,19 +1,19 @@
|
||||
# AppErrorsTracking
|
||||
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/releases)
|
||||

|
||||

|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
|
||||
[](https://github.com/KitsunePie/AppErrorsTracking/releases)
|
||||

|
||||

|
||||
|
||||
[](https://t.me/AppErrorsTracking_CI)
|
||||
[](https://t.me/XiaofangInternet)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
|
||||
[](https://pd.qq.com/s/44gcy28h)
|
||||
[](https://t.me/AppErrorsTracking_CI)
|
||||
[](https://t.me/XiaofangInternet)
|
||||
[](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
|
||||
[](https://pd.qq.com/s/44gcy28h)
|
||||
|
||||
<img src="https://github.com/KitsunePie/AppErrorsTracking/blob/master/img-src/icon.png?raw=true" width = "100" height = "100" alt="LOGO"/>
|
||||
<img src="img-src/icon.png" width = "100" height = "100" alt="LOGO"/>
|
||||
|
||||
English | [简体中文](https://github.com/KitsunePie/AppErrorsTracking/blob/master/README-zh-CN.md)
|
||||
English | [简体中文](README-zh-CN.md) | [日本語](README-ja-JP.md)
|
||||
|
||||
Added more features to app's errors dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
|
||||
@@ -32,7 +32,7 @@ developers with more exception information to quickly solve problems.
|
||||
## Project Reason
|
||||
|
||||
I really can't understand, except for MIUI (except stable version), Android ROMs in mainland China have chosen to delete the dialog box (FC
|
||||
dialog) of apps crashes. I thought this was always a feature until I decompiled the system. frame, only to confirm that it was indeed deleted.
|
||||
dialog) of apps crashes. I thought this was always a feature until I decompiled the system framework, only to confirm that it was indeed deleted.
|
||||
|
||||
Does the product manager think that it is the best solution to let the user not see the error, and the apps will crash and exit directly, or is
|
||||
there another **hidden secret**?
|
||||
@@ -89,13 +89,14 @@ We have nothing to do with versions downloaded from other informal channels or a
|
||||
|
||||
## Promotion
|
||||
|
||||
If you are looking for a Gradle plugin that can automatically manage Gradle project dependencies,
|
||||
you can check out the [SweetDependency](https://github.com/HighCapable/SweetDependency) project.
|
||||
|
||||
If you are looking for a Gradle plugin that can automatically generate properties key-values,
|
||||
you can check out the [SweetProperty](https://github.com/HighCapable/SweetProperty) project.
|
||||
|
||||
This project also uses **SweetDependency** and **SweetProperty**.
|
||||
<!--suppress HtmlDeprecatedAttribute -->
|
||||
<div align="center">
|
||||
<h2>Hey, please stay! 👋</h2>
|
||||
<h3>Here are related projects such as Android development tools, UI design, Gradle plugins, Xposed Modules and practical software. </h3>
|
||||
<h3>If the project below can help you, please give me a star! </h3>
|
||||
<h3>All projects are free, open source, and follow the corresponding open source license agreement. </h3>
|
||||
<h1><a href="https://github.com/fankes/fankes/blob/main/project-promote/README.md">→ To see more about my projects, please click here ←</a></h1>
|
||||
</div>
|
||||
|
||||
## Star History
|
||||
|
||||
@@ -106,7 +107,7 @@ This project also uses **SweetDependency** and **SweetProperty**.
|
||||
- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)
|
||||
|
||||
```
|
||||
Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as
|
||||
@@ -124,4 +125,4 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Powered by [YukiHookAPI](https://github.com/HighCapable/YukiHookAPI)
|
||||
|
||||
Copyright © 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
Copyright © 2017 Fankes Studio(qzmmcn@163.com)
|
||||
|
@@ -1,5 +1,21 @@
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
||||
|
||||
plugins {
|
||||
autowire(libs.plugins.android.application) apply false
|
||||
autowire(libs.plugins.kotlin.android) apply false
|
||||
autowire(libs.plugins.kotlin.ksp) apply false
|
||||
}
|
||||
|
||||
allprojects {
|
||||
tasks.withType<KotlinJvmCompile>().configureEach {
|
||||
compilerOptions {
|
||||
jvmTarget = JvmTarget.JVM_17
|
||||
freeCompilerArgs.addAll(
|
||||
"-Xno-param-assertions",
|
||||
"-Xno-call-assertions",
|
||||
"-Xno-receiver-assertions"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
1
demo-app/.gitignore
vendored
1
demo-app/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
/build
|
@@ -43,14 +43,6 @@ android {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
freeCompilerArgs = listOf(
|
||||
"-Xno-param-assertions",
|
||||
"-Xno-call-assertions",
|
||||
"-Xno-receiver-assertions"
|
||||
)
|
||||
}
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
viewBinding = true
|
||||
@@ -63,7 +55,18 @@ androidComponents {
|
||||
onVariants(selector().all()) {
|
||||
it.outputs.forEach { output ->
|
||||
val currentType = it.buildType
|
||||
val currentSuffix = property.github.ci.commit.id?.let { suffix -> if (suffix.isNotBlank()) "-$suffix" else "" } ?: ""
|
||||
|
||||
// Workaround for GitHub Actions.
|
||||
// Why? I don't know, but it works.
|
||||
// Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
|
||||
// public inline fun CharSequence.isNotBlank(): Boolean defined in kotlin.text.
|
||||
@Suppress("UNNECESSARY_SAFE_CALL", "RemoveRedundantCallsOfConversionMethods")
|
||||
val currentSuffix = property.github.ci.commit.id?.let { suffix ->
|
||||
// Workaround for GitHub Actions.
|
||||
// Strongly transfer type to [String].
|
||||
val sSuffix = suffix.toString()
|
||||
if (sSuffix.isNotBlank()) "-$sSuffix" else ""
|
||||
}
|
||||
val currentVersion = "${output.versionName.get()}$currentSuffix(${output.versionCode.get()})"
|
||||
if (output is com.android.build.api.variant.impl.VariantOutputImpl)
|
||||
output.outputFileName.set("${property.project.name}-demo-v$currentVersion-$currentType.apk")
|
||||
@@ -73,7 +76,8 @@ androidComponents {
|
||||
|
||||
dependencies {
|
||||
implementation(com.fankes.projectpromote.project.promote)
|
||||
implementation(com.highcapable.yukireflection.api)
|
||||
implementation(com.highcapable.kavaref.kavaref.core)
|
||||
implementation(com.highcapable.kavaref.kavaref.extension)
|
||||
implementation(androidx.core.core.ktx)
|
||||
implementation(androidx.appcompat.appcompat)
|
||||
implementation(com.google.android.material.material)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -23,15 +23,16 @@ package com.fankes.apperrorsdemo.ui.activity.base
|
||||
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.fankes.apperrorsdemo.R
|
||||
import com.fankes.apperrorsdemo.utils.factory.isNotSystemInDarkMode
|
||||
import com.highcapable.yukireflection.factory.current
|
||||
import com.highcapable.yukireflection.factory.method
|
||||
import com.highcapable.yukireflection.type.android.LayoutInflaterClass
|
||||
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
||||
import com.highcapable.kavaref.extension.genericSuperclassTypeArguments
|
||||
import com.highcapable.kavaref.extension.toClassOrNull
|
||||
|
||||
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
|
||||
@@ -40,10 +41,12 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = current().generic()?.argument()?.method {
|
||||
val bindingClass = javaClass.genericSuperclassTypeArguments().firstOrNull()?.toClassOrNull()
|
||||
binding = bindingClass?.resolve()?.optional()?.firstMethodOrNull {
|
||||
name = "inflate"
|
||||
param(LayoutInflaterClass)
|
||||
}?.get()?.invoke<VB>(layoutInflater) ?: error("binding failed")
|
||||
parameters(LayoutInflater::class)
|
||||
}?.invoke<VB>(layoutInflater) ?: error("binding failed")
|
||||
if (Build.VERSION.SDK_INT >= 35) binding.root.fitsSystemWindows = true
|
||||
setContentView(binding.root)
|
||||
/** 隐藏系统的标题栏 */
|
||||
supportActionBar?.hide()
|
||||
@@ -52,6 +55,7 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
isAppearanceLightStatusBars = isNotSystemInDarkMode
|
||||
isAppearanceLightNavigationBars = isNotSystemInDarkMode
|
||||
}
|
||||
@Suppress("DEPRECATION")
|
||||
ResourcesCompat.getColor(resources, R.color.colorThemeBackground, null).also {
|
||||
window?.statusBarColor = it
|
||||
window?.navigationBarColor = it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,13 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">エラーの例</string>
|
||||
<string name="back">戻る</string>
|
||||
<string name="function_desc">一般的なシナリオでのビジネスエラーロジックをここに示します。Xposedモジュールをアクティブ化した後、ここでエラーをキャッチできるかどうかをテストできます。Xposedモジュールの有効性を確認するために、現在のアプリには手動用のロジックコードがありません。エラーの処理。</string>
|
||||
<string name="throw_native_error">ネイティブレイヤーのエラーをスロー</string>
|
||||
<string name="throw_exception">Exception をスロー</string>
|
||||
<string name="throw_nullpointer">NullPointerException をスロー</string>
|
||||
<string name="throw_illegalstate">IllegalStateException をスロー</string>
|
||||
<string name="throw_runtime">RuntimeException をスロー</string>
|
||||
<string name="throw_multi_process_error">マルチプロセスエラーをスロー</string>
|
||||
<string name="suicide_in_progress">自殺中</string>
|
||||
</resources>
|
||||
<string name="app_name">AppErrorsDemo</string>
|
||||
<string name="back">戻る</string>
|
||||
<string name="function_desc">一般的なシナリオにおけるビジネス例外のロジックを提供します。\nXposed モジュールを有効化後に例外を取得できるかどうかをテストする事ができます。\nXposed モジュールの有効性を検証するため、現在のアプリには手動で例外を処理するロジックコードはありません。</string>
|
||||
<string name="throw_runtime">RuntimeException をスロー</string>
|
||||
<string name="throw_illegalstate">IllegalStateException をスロー</string>
|
||||
<string name="throw_nullpointer">NullPointerException をスロー</string>
|
||||
<string name="throw_exception">Exception をスロー</string>
|
||||
<string name="throw_native_error">ネイティブエラーをスロー</string>
|
||||
<string name="throw_multi_process_error">マルチプロセスの例外をスロー</string>
|
||||
<string name="suicide_in_progress">プロセスを強制停止中</string>
|
||||
</resources>
|
||||
|
@@ -3,12 +3,11 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
||||
android.useAndroidX=true
|
||||
android.nonTransitiveRClass=true
|
||||
kotlin.code.style=official
|
||||
kotlin.incremental.useClasspathSnapshot=true
|
||||
# Project Configuration
|
||||
project.name=AppErrorsTracking
|
||||
project.android.compileSdk=34
|
||||
project.android.compileSdk=36
|
||||
project.android.minSdk=24
|
||||
project.android.targetSdk=34
|
||||
project.android.targetSdk=36
|
||||
project.android.ndk.version="24.0.8215888"
|
||||
project.android.cmake.version="3.22.1"
|
||||
project.module-app.packageName=com.fankes.apperrorstracking
|
||||
@@ -19,9 +18,9 @@ project.module-app.signing.keyPassword="123456"
|
||||
project.module-app.signing.storePassword="123456"
|
||||
project.module-app.signing.storeFilePath=.secret/universal.p12
|
||||
project.demo-app.packageName=com.fankes.apperrorsdemo
|
||||
project.demo-app.versionName=${project.module-app.versionName}
|
||||
project.demo-app.versionName="${project.module-app.versionName}"
|
||||
project.demo-app.versionCode=${project.module-app.versionCode}
|
||||
project.demo-app.signing.keyAlias=${project.module-app.signing.keyAlias}
|
||||
project.demo-app.signing.keyPassword=${project.module-app.signing.keyPassword}
|
||||
project.demo-app.signing.storePassword=${project.module-app.signing.storePassword}
|
||||
project.demo-app.signing.storeFilePath=${project.module-app.signing.storeFilePath}
|
||||
project.demo-app.signing.keyAlias="${project.module-app.signing.keyAlias}"
|
||||
project.demo-app.signing.keyPassword="${project.module-app.signing.keyPassword}"
|
||||
project.demo-app.signing.storePassword="${project.module-app.signing.storePassword}"
|
||||
project.demo-app.signing.storeFilePath="${project.module-app.signing.storeFilePath}"
|
@@ -22,16 +22,16 @@ repositories:
|
||||
plugins:
|
||||
com.android.application:
|
||||
alias: android-application
|
||||
version: 8.1.2
|
||||
version: 8.12.1
|
||||
org.jetbrains.kotlin.android:
|
||||
alias: kotlin-android
|
||||
version: 1.9.10
|
||||
version: 2.2.10
|
||||
com.highcapable.flexilocale:
|
||||
alias: flexi-locale
|
||||
version: 1.0.1
|
||||
version: 1.0.2
|
||||
com.google.devtools.ksp:
|
||||
alias: kotlin-ksp
|
||||
version: 1.9.10-1.0.13
|
||||
version: 2.2.10-2.0.2
|
||||
|
||||
libraries:
|
||||
com.fankes.projectpromote:
|
||||
@@ -46,47 +46,50 @@ libraries:
|
||||
rovo89-xposed-api
|
||||
com.highcapable.yukihookapi:
|
||||
api:
|
||||
version: 1.2.0
|
||||
version: 1.3.0
|
||||
ksp-xposed:
|
||||
version-ref: <this>::api
|
||||
com.highcapable.yukireflection:
|
||||
api:
|
||||
version: 1.0.3
|
||||
com.highcapable.kavaref:
|
||||
kavaref-core:
|
||||
version: 1.0.1
|
||||
kavaref-extension:
|
||||
version: 1.0.1
|
||||
com.microsoft.appcenter:
|
||||
appcenter-analytics:
|
||||
version: 5.0.2
|
||||
version: 5.0.6
|
||||
appcenter-crashes:
|
||||
version-ref: <this>::appcenter-analytics
|
||||
com.github.topjohnwu.libsu:
|
||||
core:
|
||||
version: 5.2.1
|
||||
version: 5.2.2
|
||||
auto-update: false
|
||||
com.github.duanhong169:
|
||||
drawabletoolbox:
|
||||
version: 1.0.7
|
||||
com.google.code.gson:
|
||||
gson:
|
||||
version: 2.10.1
|
||||
version: 2.13.1
|
||||
com.squareup.okhttp3:
|
||||
okhttp:
|
||||
version: 5.0.0-alpha.11
|
||||
version: 5.1.0
|
||||
androidx.core:
|
||||
core-ktx:
|
||||
version: 1.12.0
|
||||
version: 1.17.0
|
||||
androidx.appcompat:
|
||||
appcompat:
|
||||
version: 1.6.1
|
||||
version: 1.7.1
|
||||
com.google.android.material:
|
||||
material:
|
||||
version: 1.10.0
|
||||
version: 1.12.0
|
||||
androidx.constraintlayout:
|
||||
constraintlayout:
|
||||
version: 2.1.4
|
||||
version: 2.2.1
|
||||
androidx.test.ext:
|
||||
junit:
|
||||
version: 1.1.5
|
||||
version: 1.3.0
|
||||
androidx.test.espresso:
|
||||
espresso-core:
|
||||
version: 3.5.1
|
||||
version: 3.7.0
|
||||
junit:
|
||||
junit:
|
||||
version: 4.13.2
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
1
module-app/.gitignore
vendored
1
module-app/.gitignore
vendored
@@ -1,3 +1,2 @@
|
||||
/build
|
||||
/src/main/assets/xposed_init
|
||||
/src/main/resources/META-INF/yukihookapi_init
|
@@ -39,14 +39,6 @@ android {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
freeCompilerArgs = listOf(
|
||||
"-Xno-param-assertions",
|
||||
"-Xno-call-assertions",
|
||||
"-Xno-receiver-assertions"
|
||||
)
|
||||
}
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
viewBinding = true
|
||||
@@ -59,7 +51,18 @@ androidComponents {
|
||||
onVariants(selector().all()) {
|
||||
it.outputs.forEach { output ->
|
||||
val currentType = it.buildType
|
||||
val currentSuffix = property.github.ci.commit.id?.let { suffix -> if (suffix.isNotBlank()) "-$suffix" else "" } ?: ""
|
||||
|
||||
// Workaround for GitHub Actions.
|
||||
// Why? I don't know, but it works.
|
||||
// Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
|
||||
// public inline fun CharSequence.isNotBlank(): Boolean defined in kotlin.text.
|
||||
@Suppress("UNNECESSARY_SAFE_CALL", "RemoveRedundantCallsOfConversionMethods")
|
||||
val currentSuffix = property.github.ci.commit.id?.let { suffix ->
|
||||
// Workaround for GitHub Actions.
|
||||
// Strongly transfer type to [String].
|
||||
val sSuffix = suffix.toString()
|
||||
if (sSuffix.isNotBlank()) "-$sSuffix" else ""
|
||||
}
|
||||
val currentVersion = "${output.versionName.get()}$currentSuffix(${output.versionCode.get()})"
|
||||
if (output is com.android.build.api.variant.impl.VariantOutputImpl)
|
||||
output.outputFileName.set("${property.project.name}-module-v$currentVersion-$currentType.apk")
|
||||
@@ -71,6 +74,8 @@ dependencies {
|
||||
compileOnly(de.robv.android.xposed.api)
|
||||
implementation(com.highcapable.yukihookapi.api)
|
||||
ksp(com.highcapable.yukihookapi.ksp.xposed)
|
||||
implementation(com.highcapable.kavaref.kavaref.core)
|
||||
implementation(com.highcapable.kavaref.kavaref.extension)
|
||||
implementation(com.fankes.projectpromote.project.promote)
|
||||
implementation(com.microsoft.appcenter.appcenter.analytics)
|
||||
implementation(com.microsoft.appcenter.appcenter.crashes)
|
||||
|
@@ -117,5 +117,15 @@
|
||||
<action android:name="android.service.quicksettings.action.QS_TILE" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="${applicationId}.provider"
|
||||
android:exported="false"
|
||||
android:grantUriPermissions="true">
|
||||
<meta-data
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths" />
|
||||
</provider>
|
||||
</application>
|
||||
</manifest>
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -53,9 +53,15 @@ object ConfigData {
|
||||
/** 启用应用配置模板 */
|
||||
val ENABLE_APP_CONFIG_TEMPLATE = PrefsData("_enable_app_config_template", false)
|
||||
|
||||
/** 启用对话框防误触 */
|
||||
val ENABLE_PREVENT_MISOPERATION_FOR_DIALOG = PrefsData("_enable_prevent_misoperation_for_dialog", false)
|
||||
|
||||
/** 禁止异常堆栈内容自动换行 */
|
||||
val DISABLE_AUTO_WRAP_ERROR_STACK_TRACE = PrefsData("_disable_auto_wrap_error_stack_trace", false)
|
||||
|
||||
/** 分享时使用文件 */
|
||||
val SHARE_WITH_FILE = PrefsData("_share_with_file", false)
|
||||
|
||||
/** 当前实例 - [Context] or [PackageParam] */
|
||||
private var instance: Any? = null
|
||||
|
||||
@@ -194,6 +200,16 @@ object ConfigData {
|
||||
putBoolean(ENABLE_APP_CONFIG_TEMPLATE, value)
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否启用对话框防误触
|
||||
* @return [Boolean]
|
||||
*/
|
||||
var isEnablePreventMisoperation
|
||||
get() = getBoolean(ENABLE_PREVENT_MISOPERATION_FOR_DIALOG)
|
||||
set(value) {
|
||||
putBoolean(ENABLE_PREVENT_MISOPERATION_FOR_DIALOG, value)
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否启用 Material 3 风格的错误对话框
|
||||
* @return [Boolean]
|
||||
@@ -203,4 +219,13 @@ object ConfigData {
|
||||
set(value) {
|
||||
putBoolean(ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG, value)
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否以文件方式分享
|
||||
*/
|
||||
var isShareWithFile
|
||||
get() = getBoolean(SHARE_WITH_FILE)
|
||||
set(value) {
|
||||
putBoolean(SHARE_WITH_FILE, value)
|
||||
}
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -30,6 +30,7 @@ import android.content.Intent
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.pm.PackageInfo
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Message
|
||||
import android.os.SystemClock
|
||||
import android.util.ArrayMap
|
||||
@@ -58,15 +59,10 @@ import com.fankes.apperrorstracking.utils.factory.toArrayList
|
||||
import com.fankes.apperrorstracking.utils.factory.toast
|
||||
import com.fankes.apperrorstracking.utils.tool.FrameworkTool
|
||||
import com.fankes.apperrorstracking.wrapper.BuildConfigWrapper
|
||||
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
||||
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
||||
import com.highcapable.kavaref.extension.VariousClass
|
||||
import com.highcapable.yukihookapi.hook.entity.YukiBaseHooker
|
||||
import com.highcapable.yukihookapi.hook.factory.field
|
||||
import com.highcapable.yukihookapi.hook.factory.hasMethod
|
||||
import com.highcapable.yukihookapi.hook.factory.method
|
||||
import com.highcapable.yukihookapi.hook.log.YLog
|
||||
import com.highcapable.yukihookapi.hook.type.android.BundleClass
|
||||
import com.highcapable.yukihookapi.hook.type.android.MessageClass
|
||||
import com.highcapable.yukihookapi.hook.type.java.BooleanType
|
||||
|
||||
object FrameworkHooker : YukiBaseHooker() {
|
||||
|
||||
@@ -109,40 +105,73 @@ object FrameworkHooker : YukiBaseHooker() {
|
||||
* 获取当前包列表实例
|
||||
* @return [Any] or null
|
||||
*/
|
||||
private val pkgList = if (ProcessRecordClass.hasMethod { name = "getPkgList"; emptyParam() })
|
||||
ProcessRecordClass.method { name = "getPkgList"; emptyParam() }.get(proc).call()
|
||||
else ProcessRecordClass.field { name = "pkgList" }.get(proc).any()
|
||||
private val pkgList by lazy {
|
||||
ProcessRecordClass.resolve().optional(silent = true)
|
||||
.firstMethodOrNull {
|
||||
name = "getPkgList"
|
||||
emptyParameters()
|
||||
}?.of(proc)?.invoke()
|
||||
?: ProcessRecordClass.resolve().optional(silent = true)
|
||||
.firstFieldOrNull {
|
||||
name { it.endsWith("pkgList", true) }
|
||||
}?.of(proc)?.get()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前包列表数组大小
|
||||
* @return [Int]
|
||||
*/
|
||||
private val pkgListSize = PackageListClass?.method { name = "size"; emptyParam() }?.get(pkgList)?.int()
|
||||
?: ProcessRecordClass.field { name = "pkgList" }.get(proc).cast<ArrayMap<*, *>>()?.size ?: -1
|
||||
private val pkgListSize by lazy {
|
||||
PackageListClass?.resolve()?.optional(silent = true)
|
||||
?.firstMethodOrNull {
|
||||
name = "size"
|
||||
emptyParameters()
|
||||
}?.of(pkgList)?.invoke()
|
||||
?: ProcessRecordClass.resolve().optional(silent = true)
|
||||
.firstFieldOrNull { name = "pkgList" }
|
||||
?.of(proc)?.get<ArrayMap<*, *>>()?.size ?: -1
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前 pid 信息
|
||||
* @return [Int]
|
||||
*/
|
||||
val pid = ProcessRecordClass.field { name { it == "mPid" || it == "pid" } }.get(proc).int()
|
||||
val pid by lazy {
|
||||
ProcessRecordClass.resolve().optional()
|
||||
.firstFieldOrNull {
|
||||
name { it == "mPid" || it == "pid" }
|
||||
}?.of(proc)?.get<Int>() ?: 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户 ID 信息
|
||||
* @return [Int]
|
||||
*/
|
||||
val userId = ProcessRecordClass.field { name = "userId" }.get(proc).int()
|
||||
val userId by lazy {
|
||||
ProcessRecordClass.resolve().optional()
|
||||
.firstFieldOrNull { name = "userId" }
|
||||
?.of(proc)?.get<Int>() ?: 0
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前 APP 信息
|
||||
* @return [ApplicationInfo] or null
|
||||
*/
|
||||
val appInfo = ProcessRecordClass.field { name = "info" }.get(proc).cast<ApplicationInfo>()
|
||||
val appInfo by lazy {
|
||||
ProcessRecordClass.resolve().optional()
|
||||
.firstFieldOrNull { name = "info" }
|
||||
?.of(proc)?.get<ApplicationInfo>()
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前进程名称
|
||||
* @return [String]
|
||||
*/
|
||||
val processName = ProcessRecordClass.field { name = "processName" }.get(proc).string()
|
||||
val processName by lazy {
|
||||
ProcessRecordClass.resolve().optional()
|
||||
.firstFieldOrNull { name = "processName" }
|
||||
?.of(proc)?.get<String>() ?: ""
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前 APP、进程 包名
|
||||
@@ -166,17 +195,25 @@ object FrameworkHooker : YukiBaseHooker() {
|
||||
* 获取当前进程是否为后台进程
|
||||
* @return [Boolean]
|
||||
*/
|
||||
val isBackgroundProcess = UserControllerClass
|
||||
.method { name { it == "getCurrentProfileIds" || it == "getCurrentProfileIdsLocked" } }
|
||||
.get(ActivityManagerServiceClass?.field { name = "mUserController" }
|
||||
?.get(AppErrorsClass.field { name = "mService" }.get(errors).any())?.any())
|
||||
.invoke<IntArray>()?.takeIf { it.isNotEmpty() }?.any { it != userId } ?: false
|
||||
val isBackgroundProcess by lazy {
|
||||
UserControllerClass.resolve().optional()
|
||||
.firstMethodOrNull { name { it == "getCurrentProfileIds" || it == "getCurrentProfileIdsLocked" } }
|
||||
?.of(ActivityManagerServiceClass?.resolve()?.optional()?.firstFieldOrNull { name = "mUserController" }
|
||||
?.of(AppErrorsClass.resolve().optional().firstFieldOrNull { name = "mService" }?.of(errors)?.get())?.getQuietly())
|
||||
?.invokeQuietly<IntArray>()?.takeIf { it.isNotEmpty() }?.any { it != userId } ?: false
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前进程是否短时内重复崩溃
|
||||
* @return [Boolean]
|
||||
*/
|
||||
val isRepeatingCrash = resultData?.let { AppErrorDialog_DataClass.field { name = "repeating" }.get(it).boolean() } ?: false
|
||||
val isRepeatingCrash by lazy {
|
||||
resultData?.let {
|
||||
AppErrorDialog_DataClass.resolve().optional()
|
||||
.firstFieldOrNull { name = "repeating" }
|
||||
?.of(it)?.get<Boolean>() == true
|
||||
} ?: false
|
||||
}
|
||||
}
|
||||
|
||||
/** 注册生命周期 */
|
||||
@@ -263,7 +300,9 @@ object FrameworkHooker : YukiBaseHooker() {
|
||||
* 是否为系统应用
|
||||
* @return [Boolean]
|
||||
*/
|
||||
fun PackageInfo.isSystemApp() = (applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0
|
||||
fun PackageInfo.isSystemApp() = applicationInfo?.let {
|
||||
(it.flags and ApplicationInfo.FLAG_SYSTEM) != 0
|
||||
} ?: false
|
||||
when (filters.type) {
|
||||
AppFiltersType.USER -> result.filter { it.isSystemApp().not() }
|
||||
AppFiltersType.SYSTEM -> result.filter { it.isSystemApp() }
|
||||
@@ -373,50 +412,56 @@ object FrameworkHooker : YukiBaseHooker() {
|
||||
/** 注册生命周期 */
|
||||
registerLifecycle()
|
||||
/** 干掉原生错误对话框 - 如果有 */
|
||||
ErrorDialogControllerClass?.apply {
|
||||
method {
|
||||
ErrorDialogControllerClass?.resolve()?.optional(silent = true)?.apply {
|
||||
val hasCrashDialogs = firstMethodOrNull {
|
||||
name = "hasCrashDialogs"
|
||||
emptyParam()
|
||||
}.hook().replaceToTrue()
|
||||
method {
|
||||
emptyParameters()
|
||||
}?.hook()?.replaceToTrue() != null
|
||||
if (!hasCrashDialogs)
|
||||
firstConstructorOrNull {
|
||||
parameterCount = 1
|
||||
}?.hook()?.after {
|
||||
firstFieldOrNull { name = "mCrashDialogs" }?.of(instance)?.set(emptyList<Any>())
|
||||
}
|
||||
firstMethodOrNull {
|
||||
name = "showCrashDialogs"
|
||||
paramCount = 1
|
||||
}.hook().intercept()
|
||||
parameterCount = 1
|
||||
}?.hook()?.intercept()
|
||||
}
|
||||
/** 干掉原生错误对话框 - API 30 以下 */
|
||||
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q) {
|
||||
ActivityTaskManagerService_LocalServiceClass?.method {
|
||||
ActivityTaskManagerService_LocalServiceClass?.resolve()?.optional()?.firstMethodOrNull {
|
||||
name = "canShowErrorDialogs"
|
||||
emptyParam()
|
||||
}?.ignored()?.hook()?.replaceToFalse()
|
||||
ActivityManagerServiceClass?.method {
|
||||
emptyParameters()
|
||||
}?.hook()?.replaceToFalse()
|
||||
ActivityManagerServiceClass?.resolve()?.optional()?.firstMethodOrNull {
|
||||
name = "canShowErrorDialogs"
|
||||
emptyParam()
|
||||
}?.ignored()?.hook()?.replaceToFalse()
|
||||
emptyParameters()
|
||||
}?.hook()?.replaceToFalse()
|
||||
}
|
||||
/** 干掉原生错误对话框 - 如果上述方法全部失效则直接结束对话框 */
|
||||
AppErrorDialogClass.apply {
|
||||
method {
|
||||
AppErrorDialogClass.resolve().optional(silent = true).apply {
|
||||
firstMethodOrNull {
|
||||
name = "onCreate"
|
||||
param(BundleClass)
|
||||
}.ignored().hook().after { instance<Dialog>().cancel() }
|
||||
method {
|
||||
parameters(Bundle::class)
|
||||
}?.hook()?.after { instance<Dialog>().cancel() }
|
||||
firstMethodOrNull {
|
||||
name = "onStart"
|
||||
emptyParam()
|
||||
}.ignored().hook().after { instance<Dialog>().cancel() }
|
||||
emptyParameters()
|
||||
}?.hook()?.after { instance<Dialog>().cancel() }
|
||||
}
|
||||
/** 注入自定义错误对话框 */
|
||||
AppErrorsClass.apply {
|
||||
AppErrorsClass.resolve().optional().apply {
|
||||
when {
|
||||
Build.VERSION.SDK_INT > Build.VERSION_CODES.R -> {
|
||||
method {
|
||||
firstMethodOrNull {
|
||||
name = "handleAppCrashLSPB"
|
||||
paramCount = 6
|
||||
}.hook().after {
|
||||
parameterCount = 6
|
||||
}?.hook()?.after {
|
||||
/** 如果为用户终止则不展示异常 */
|
||||
if (args(index = 1).string() == "user-terminated") return@after
|
||||
/** 当前实例 */
|
||||
val context = appContext ?: field { name = "mContext" }.get(instance).cast<Context>() ?: return@after
|
||||
val context = appContext ?: firstFieldOrNull { name = "mContext" }?.of(instance)?.get<Context>() ?: return@after
|
||||
|
||||
/** 当前进程信息 */
|
||||
val proc = args().first().any() ?: return@after YLog.warn("Received but got null ProcessRecord (Show UI failed)")
|
||||
@@ -428,29 +473,29 @@ object FrameworkHooker : YukiBaseHooker() {
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
method {
|
||||
firstMethodOrNull {
|
||||
name = "handleShowAppErrorUi"
|
||||
param(MessageClass)
|
||||
}.hook().after {
|
||||
parameters(Message::class)
|
||||
}?.hook()?.after {
|
||||
/** 当前实例 */
|
||||
val context = appContext ?: field { name = "mContext" }.get(instance).cast<Context>() ?: return@after
|
||||
val context = appContext ?: firstFieldOrNull { name = "mContext" }?.of(instance)?.get<Context>() ?: return@after
|
||||
|
||||
/** 当前错误数据 */
|
||||
val resultData = args().first().cast<Message>()?.obj
|
||||
|
||||
/** 当前进程信息 */
|
||||
val proc = AppErrorDialog_DataClass.field { name = "proc" }.get(resultData).any()
|
||||
val proc = AppErrorDialog_DataClass.resolve().optional().firstFieldOrNull { name = "proc" }?.of(resultData)?.get()
|
||||
/** 创建 APP 进程异常数据类 */
|
||||
AppErrorsProcessData(instance, proc, resultData).handleShowAppErrorUi(context)
|
||||
}
|
||||
}
|
||||
}
|
||||
method {
|
||||
firstMethodOrNull {
|
||||
name = "handleAppCrashInActivityController"
|
||||
returnType = BooleanType
|
||||
}.hook().after {
|
||||
returnType = Boolean::class
|
||||
}?.hook()?.after {
|
||||
/** 当前实例 */
|
||||
val context = appContext ?: field { name = "mContext" }.get(instance).cast<Context>() ?: return@after
|
||||
val context = appContext ?: firstFieldOrNull { name = "mContext" }?.of(instance)?.get<Context>() ?: return@after
|
||||
|
||||
/** 当前进程信息 */
|
||||
val proc = args().first().any() ?: return@after YLog.warn("Received but got null ProcessRecord")
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -25,6 +25,7 @@ import android.app.ActivityManager
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import androidx.core.view.WindowCompat
|
||||
@@ -32,9 +33,9 @@ import androidx.viewbinding.ViewBinding
|
||||
import com.fankes.apperrorstracking.R
|
||||
import com.fankes.apperrorstracking.utils.factory.isNotSystemInDarkMode
|
||||
import com.fankes.apperrorstracking.utils.factory.toast
|
||||
import com.highcapable.yukihookapi.hook.factory.current
|
||||
import com.highcapable.yukihookapi.hook.factory.method
|
||||
import com.highcapable.yukihookapi.hook.type.android.LayoutInflaterClass
|
||||
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
||||
import com.highcapable.kavaref.extension.genericSuperclassTypeArguments
|
||||
import com.highcapable.kavaref.extension.toClassOrNull
|
||||
|
||||
abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
|
||||
@@ -43,10 +44,12 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = current().generic()?.argument()?.method {
|
||||
val bindingClass = javaClass.genericSuperclassTypeArguments().firstOrNull()?.toClassOrNull()
|
||||
binding = bindingClass?.resolve()?.optional()?.firstMethodOrNull {
|
||||
name = "inflate"
|
||||
param(LayoutInflaterClass)
|
||||
}?.get()?.invoke<VB>(layoutInflater) ?: error("binding failed")
|
||||
parameters(LayoutInflater::class)
|
||||
}?.invoke<VB>(layoutInflater) ?: error("binding failed")
|
||||
if (Build.VERSION.SDK_INT >= 35) binding.root.fitsSystemWindows = true
|
||||
setContentView(binding.root)
|
||||
/** 隐藏系统的标题栏 */
|
||||
supportActionBar?.hide()
|
||||
@@ -55,6 +58,7 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
|
||||
isAppearanceLightStatusBars = isNotSystemInDarkMode
|
||||
isAppearanceLightNavigationBars = isNotSystemInDarkMode
|
||||
}
|
||||
@Suppress("DEPRECATION")
|
||||
ResourcesCompat.getColor(resources, R.color.colorThemeBackground, null).also {
|
||||
window?.statusBarColor = it
|
||||
window?.navigationBarColor = it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -27,6 +27,7 @@ import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.widget.TextView
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import com.fankes.apperrorstracking.R
|
||||
@@ -47,6 +48,7 @@ import com.fankes.apperrorstracking.utils.factory.showDialog
|
||||
import com.fankes.apperrorstracking.utils.factory.toast
|
||||
import com.fankes.apperrorstracking.utils.tool.StackTraceShareHelper
|
||||
import com.highcapable.yukihookapi.hook.log.loggerE
|
||||
import java.io.File
|
||||
|
||||
class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
|
||||
|
||||
@@ -143,8 +145,21 @@ class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
|
||||
binding.shareIcon.setOnClickListener {
|
||||
StackTraceShareHelper.showChoose(context = this, locale.shareErrorStack) { sDeviceBrand, sDeviceModel, sDisplay, sPackageName ->
|
||||
startActivity(Intent.createChooser(Intent(Intent.ACTION_SEND).apply {
|
||||
type = "text/plain"
|
||||
putExtra(Intent.EXTRA_TEXT, appErrorsInfo.stackOutputShareContent(sDeviceBrand, sDeviceModel, sDisplay, sPackageName))
|
||||
val content = appErrorsInfo.stackOutputShareContent(sDeviceBrand, sDeviceModel, sDisplay, sPackageName)
|
||||
if (ConfigData.isShareWithFile) {
|
||||
type = "application/octet-stream"
|
||||
runCatching {
|
||||
val file = File.createTempFile("app_errors_stacktrace_", ".log", cacheDir)
|
||||
file.deleteOnExit()
|
||||
file.writeText(content)
|
||||
putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(this@AppErrorsDetailActivity, "$packageName.provider", file))
|
||||
}.onFailure {
|
||||
toast(msg = "Create temp file failed")
|
||||
}
|
||||
} else {
|
||||
type = "text/plain"
|
||||
putExtra(Intent.EXTRA_TEXT, content)
|
||||
}
|
||||
}, locale.shareErrorStack))
|
||||
}
|
||||
}
|
||||
@@ -195,7 +210,7 @@ class AppErrorsDetailActivity : BaseActivity<ActivityAppErrorsDetailBinding>() {
|
||||
|
||||
override fun onBackPressed() {
|
||||
intent?.removeExtra(EXTRA_APP_ERRORS_INFO)
|
||||
finish()
|
||||
super.onBackPressed()
|
||||
}
|
||||
|
||||
override fun onNewIntent(intent: Intent?) {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -99,10 +99,12 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
|
||||
binding.onlyShowErrorsInFrontSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_FRONT)
|
||||
binding.onlyShowErrorsInMainProcessSwitch.bind(ConfigData.ENABLE_ONLY_SHOW_ERRORS_IN_MAIN)
|
||||
binding.alwaysShowsReopenAppOptionsSwitch.bind(ConfigData.ENABLE_ALWAYS_SHOWS_REOPEN_APP_OPTIONS)
|
||||
binding.shareWithFile.bind(ConfigData.SHARE_WITH_FILE)
|
||||
binding.enableAppsConfigsTemplateSwitch.bind(ConfigData.ENABLE_APP_CONFIG_TEMPLATE) {
|
||||
onInitialize { binding.mgrAppsConfigsTemplateButton.isVisible = it }
|
||||
onChanged { reinitialize() }
|
||||
}
|
||||
binding.errorsDialogPreventMisoperationSwitch.bind(ConfigData.ENABLE_PREVENT_MISOPERATION_FOR_DIALOG)
|
||||
binding.enableMaterial3AppErrorsDialogSwitch.bind(ConfigData.ENABLE_MATERIAL3_STYLE_APP_ERRORS_DIALOG)
|
||||
/** 设置匿名统计 */
|
||||
binding.appAnalyticsConfigItem.isVisible = AppAnalyticsTool.isAvailable
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -19,6 +19,8 @@
|
||||
*
|
||||
* This file is created by fankes on 2022/6/3.
|
||||
*/
|
||||
@file:Suppress("DEPRECATION")
|
||||
|
||||
package com.fankes.apperrorstracking.utils.factory
|
||||
|
||||
import android.content.Context
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -19,20 +19,25 @@
|
||||
*
|
||||
* This file is created by fankes on 2022/5/12.
|
||||
*/
|
||||
@file:Suppress("unused")
|
||||
@file:Suppress("unused", "DEPRECATION")
|
||||
|
||||
package com.fankes.apperrorstracking.utils.factory
|
||||
|
||||
import android.app.Dialog
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.view.Gravity
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.core.os.postDelayed
|
||||
import androidx.viewbinding.ViewBinding
|
||||
import com.fankes.apperrorstracking.data.ConfigData
|
||||
import com.fankes.apperrorstracking.locale.locale
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.progressindicator.CircularProgressIndicator
|
||||
@@ -82,6 +87,8 @@ class DialogBuilder<VB : ViewBinding>(
|
||||
/** 自定义布局 */
|
||||
private var customLayoutView: View? = null
|
||||
|
||||
private val mainHandler = Handler(Looper.getMainLooper())
|
||||
|
||||
/**
|
||||
* 获取 [DialogBuilder] 绑定布局对象
|
||||
* @return [VB]
|
||||
@@ -191,6 +198,16 @@ class DialogBuilder<VB : ViewBinding>(
|
||||
customLayoutView?.let { setView(it) }
|
||||
dialogInstance = this
|
||||
setOnCancelListener { onCancel?.invoke() }
|
||||
if (ConfigData.isEnablePreventMisoperation) {
|
||||
setOnShowListener {
|
||||
window?.run {
|
||||
addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
||||
mainHandler.postDelayed(1000) {
|
||||
clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}?.show()
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
@@ -19,7 +19,7 @@
|
||||
*
|
||||
* This file is created by fankes on 2022/5/7.
|
||||
*/
|
||||
@file:Suppress("unused", "NotificationPermission")
|
||||
@file:Suppress("unused", "NotificationPermission", "DEPRECATION")
|
||||
|
||||
package com.fankes.apperrorstracking.utils.factory
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* AppErrorsTracking - Added more features to app's crash dialog, fixed custom rom deleted dialog, the best experience to Android developer.
|
||||
* Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com)
|
||||
* Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)
|
||||
* https://github.com/KitsunePie/AppErrorsTracking
|
||||
*
|
||||
* This software is non-free but opensource software: you can redistribute it
|
||||
|
@@ -298,6 +298,30 @@
|
||||
android:textColor="@color/colorTextDark"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<com.fankes.apperrorstracking.ui.widget.MaterialSwitch
|
||||
android:id="@+id/share_with_file"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:text="@string/share_with_file"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@color/colorTextGray"
|
||||
android:textSize="15sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:alpha="0.6"
|
||||
android:lineSpacingExtra="6dp"
|
||||
android:text="@string/share_with_file_tip"
|
||||
android:textColor="@color/colorTextDark"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<com.fankes.apperrorstracking.ui.widget.MaterialSwitch
|
||||
android:id="@+id/enable_apps_configs_template_switch"
|
||||
android:layout_width="match_parent"
|
||||
@@ -338,6 +362,30 @@
|
||||
android:text="@string/apps_config_template_tip"
|
||||
android:textColor="@color/colorTextDark"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<com.fankes.apperrorstracking.ui.widget.MaterialSwitch
|
||||
android:id="@+id/errors_dialog_prevent_misoperation_switch"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="30dp"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginBottom="5dp"
|
||||
android:text="@string/errors_dialog_prevent_misoperation"
|
||||
android:textAllCaps="false"
|
||||
android:textColor="@color/colorTextGray"
|
||||
android:textSize="15sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:alpha="0.6"
|
||||
android:lineSpacingExtra="6dp"
|
||||
android:text="@string/errors_dialog_prevent_misoperation_tip"
|
||||
android:textColor="@color/colorTextDark"
|
||||
android:textSize="12sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
@@ -728,6 +776,35 @@
|
||||
android:textColor="@color/colorTextGray"
|
||||
android:textSize="11sp" />
|
||||
</LinearLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="15dp"
|
||||
android:layout_marginRight="15dp"
|
||||
android:layout_marginBottom="10dp"
|
||||
android:background="@drawable/bg_permotion_round"
|
||||
android:gravity="center|start"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="35dp"
|
||||
android:layout_height="35dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:src="@mipmap/ic_kavaref" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:ellipsize="end"
|
||||
android:lineSpacingExtra="6dp"
|
||||
android:maxLines="2"
|
||||
android:text="@string/about_module_extension"
|
||||
android:textColor="@color/colorTextGray"
|
||||
android:textSize="11sp" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
BIN
module-app/src/main/res/mipmap-xxhdpi/ic_kavaref.png
Normal file
BIN
module-app/src/main/res/mipmap-xxhdpi/ic_kavaref.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
@@ -1,158 +1,161 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">エラー追跡</string>
|
||||
<string name="xposed_desc">アプリのエラーダイアログに機能を追加し、カスタム ROM の削除されたダイアログを修正し、Android 開発者にとって最高のエクスペリエンスを実現しました。</string>
|
||||
<string name="app_info">アプリ情報</string>
|
||||
<string name="reopen_app">アプリをリスタート</string>
|
||||
<string name="error_detail">エラーの詳細</string>
|
||||
<string name="mute_if_unlock">無視(ロックが解除されるまで)</string>
|
||||
<string name="mute_if_restart">無視(システイムがリスタートまで)</string>
|
||||
<string name="close_app">アプリを閉じる</string>
|
||||
<string name="aerr_title">%1$s がエラー</string>
|
||||
<string name="aerr_repeated_title">%1$s が再びエラー</string>
|
||||
<string name="mute_if_restart_tip">システイムがリスタートするまで、「%1$s」のエラーを無視します</string>
|
||||
<string name="mute_if_unlock_tip">ロックが解除されるまで、「%1$s」のエラーを無視します</string>
|
||||
<string name="back">戻る</string>
|
||||
<string name="copy_error_stack">エラースタックをコピーする</string>
|
||||
<string name="export_to_file">ファイルにエクスポート</string>
|
||||
<string name="error_info">エラー情報</string>
|
||||
<string name="error_type">エラータイプ</string>
|
||||
<string name="error_file_name">ファイル名</string>
|
||||
<string name="error_throw_class">投擲クラス</string>
|
||||
<string name="error_throw_method">投擲メソッド</string>
|
||||
<string name="error_line_number">行番号</string>
|
||||
<string name="error_record_time">記録タイム</string>
|
||||
<string name="copied">コピーしました</string>
|
||||
<string name="copy_fail">コピーに失敗しました</string>
|
||||
<string name="print_to_logcat">コンソールに印刷</string>
|
||||
<string name="print_to_logcat_success">コンソールに印刷されていました</string>
|
||||
<string name="output_stack_success">エクスポートされたエラースタックされていました</string>
|
||||
<string name="output_stack_fail">エラースタックのエクスポートに失敗しました</string>
|
||||
<string name="export_all">すべてエクスポート</string>
|
||||
<string name="clear_all">すべてクリア</string>
|
||||
<string name="errors_record">エラー履歴記錄</string>
|
||||
<string name="no_list_data">一時的にデータレコードはありません</string>
|
||||
<string name="confirm">確認</string>
|
||||
<string name="cancel">キャンセル</string>
|
||||
<string name="more">モア</string>
|
||||
<string name="notice">ヒント</string>
|
||||
<string name="are_you_sure_clear_errors">すべてのエラーレコードをクリアしてもよろしいですか</string>
|
||||
<string name="all_errors_clear_success">すべてのアラーレコードがクリアされました</string>
|
||||
<string name="are_you_sure_export_all_errors">すべてのログファイルをエクスポートしてもよろしいですか。梱包プロセスには時間がかかる場合があります。</string>
|
||||
<string name="view_detail">詳細を見る</string>
|
||||
<string name="export_all_errors_success">すべてのエラーレコードがエクスポートされました</string>
|
||||
<string name="export_all_errors_fail">すべてのエラーレコードのエクスポートに失敗しました</string>
|
||||
<string name="no_cpu_abi">アビなし</string>
|
||||
<string name="remove_record">レコードを削除</string>
|
||||
<string name="are_you_sure_remove_record">このレコードを削除してもよろしいですか</string>
|
||||
<string name="got_it">分かります</string>
|
||||
<string name="restart_system">リスタートシステム</string>
|
||||
<string name="project_address">プロジェクトアドレス</string>
|
||||
<string name="module_not_activated">モジュールが無効化でした</string>
|
||||
<string name="module_version">モジュールバージョン: %1$s</string>
|
||||
<string name="system_version">システムバージョン: %1$s</string>
|
||||
<string name="module_is_activated">モジュールが有効化でした</string>
|
||||
<string name="display_settings">表示設定</string>
|
||||
<string name="hide_app_icon_on_launcher">ランチャー上のアプリアイコンを非表示</string>
|
||||
<string name="hide_app_icon_on_launcher_tip">モジュールアイコンを非表示にすると、インターフェイスが閉じてランチャーに表示されなくなります。モジュール設定は、EdXposedまたはLSPosedで検索して開くことができます。</string>
|
||||
<string name="hide_app_icon_on_launcher_notice">注:LSPosedの「ランチャーアイコンを強制的に表示」機能を必ずオフにしてください</string>
|
||||
<string name="about_module">このモジュールは、YukiHookAPIを使用して構築できます。 \n詳細 https://github.com/HighCapable/YukiHookAPI</string>
|
||||
<string name="module_not_fully_activated">モジュールが不完全に有効化でした</string>
|
||||
<string name="are_your_sure_restart_system">リスタートシステムしてもよろしいですか</string>
|
||||
<string name="fast_restart">高速リスタート</string>
|
||||
<string name="access_root_fail">ルート権限を取得できませんでした</string>
|
||||
<string name="moment_ago">現在</string>
|
||||
<string name="second_ago">秒前</string>
|
||||
<string name="minute_ago">分前</string>
|
||||
<string name="hour_ago">時間前</string>
|
||||
<string name="day_ago">日前</string>
|
||||
<string name="month_ago">月前</string>
|
||||
<string name="year_ago">年前</string>
|
||||
<string name="crash_process">エラープロセス「%1$s」</string>
|
||||
<string name="share_error_stack">エラースタックをシェアする</string>
|
||||
<string name="preference_settings">好み設定</string>
|
||||
<string name="function_mgr">機能管理</string>
|
||||
<string name="only_show_errors_in_front">フォアグラウンドアプリで発生したエラーを表示</string>
|
||||
<string name="only_show_errors_in_main_process">アプリのメインプロセスで発生したエラーを表示</string>
|
||||
<string name="enable_apps_config_template">アプリ設定テンプレートを有効</string>
|
||||
<string name="mgr_apps_config_template">アプリ設定テンプレートを管理する</string>
|
||||
<string name="view_errors_record">エラー履歴を表示する</string>
|
||||
<string name="view_muted_errors_apps">エラーを無視したアプリを表示する</string>
|
||||
<string name="only_show_errors_in_front_tip">有効にすると、アプリがフォアグラウンド (使用中) の場合にのみエラーが表示されます。エラーが発生したバックグラウンドアプリにはプロンプト情報はありませんが、エラー履歴に記録されます。</string>
|
||||
<string name="only_show_errors_in_main_process_tip">有効にすると、アプリがメインプロセス (最初の Application インスタンスオブジェクト) にあるときに、アプリのエラーのみが表示されます。</string>
|
||||
<string name="apps_config_template_tip">ここでは、アプリごとに個別にエラーが発生したときにエラーダイアログおよびその他のエラーメッセージを表示するかどうかを設定できます。\n無効にすると、すべてのアプリで常にエラーダイアログの形式でエラーメッセージが表示されます。</string>
|
||||
<string name="view_muted_errors_apps_tip">ここでは、さまざまな形式のエラーを手動で無視したアプリを見つけることができます。このリストは、リスタート後に自動的にクリアされます。これらの無視されたアプリを管理し、無視リストから削除できます。</string>
|
||||
<string name="muted_errors_apps">エラーを無視したアプリ</string>
|
||||
<string name="unmute">無視を解除</string>
|
||||
<string name="unmute_all">無視を全部解除</string>
|
||||
<string name="are_you_sure_unmute_all">エラーを無視したすべてのアプリを解除してもよろしいですか</string>
|
||||
<string name="apps_config_template">アプリ設定テンプレート</string>
|
||||
<string name="filter_by_condition">条件でフィルタリング</string>
|
||||
<string name="no_list_result">表示結果はありません</string>
|
||||
<string name="typo_app_name_pkg_name">アプリ名とパッケージ名を入力できます</string>
|
||||
<string name="clear_filters">条件をクリア</string>
|
||||
<string name="result_count">%1$s の合計結果</string>
|
||||
<string name="loading">ロード中</string>
|
||||
<string name="when_errors_how_to_show_tip">エラーが適用されているときにシステムがエラーを表示する方法を構成できます。</string>
|
||||
<string name="show_errors_dialog">エラーダイアログを表示</string>
|
||||
<string name="show_errors_toast">エラー Toast を表示</string>
|
||||
<string name="show_nothing">何も表示されません</string>
|
||||
<string name="app_errors_statistics">アプリのエラー統計</string>
|
||||
<string name="total_errors">エラーの総数</string>
|
||||
<string name="total_apps">アプリの総数</string>
|
||||
<string name="most_errors_app">エラーが最も多いアプリ</string>
|
||||
<string name="most_errors_type">エラーが最も多いタイプ</string>
|
||||
<string name="total_proportion_of_errors">エラーの合計割合</string>
|
||||
<string name="total_errors_unit">%1$s 個</string>
|
||||
<string name="total_apps_unit">%1$s 個 (システムアプリを含む)</string>
|
||||
<string name="generating_statistics">統計が生成されています</string>
|
||||
<string name="module_not_fully_activated_tip">モジュールは完全にアクティブ化されておらず、現在の設定アイテムをロードできない場合があります。システムをリスタートして試してみることをお勧めします。</string>
|
||||
<string name="show_errors_notify">エラー通知プッシュを表示</string>
|
||||
<string name="app_errors_tip">アプリは未処理のエラーで崩壊しました。クリックして、アプリ開発者への詳細またはフィードバックを表示します。</string>
|
||||
<string name="batch_operations">一括操作</string>
|
||||
<string name="are_you_sure_apply_site_apps">一度に %1$s 個のアプリに設定を適用してもよろしいですか</string>
|
||||
<string name="errors_dialog_always_show_reopen">エラーダイアログには常に「アプリをリスタート」が表示</string>
|
||||
<string name="errors_dialog_always_show_reopen_tip">有効にした後、ダイアログボックスにアプリのエラーが表示された場合、エラーが初めてではない場合、「アプリをリスタート」オプションも表示されます。現在のエラーがメインプロセスでない場合、またはアプリを開けない場合、このオプションはまだ表示されません。</string>
|
||||
<string name="developer_notice_tip">このモジュールは、Android開発者向けに作成されています。\n\nコンピューターに接続できず、ADBデバッグを実行できない可能性がある場合、このモジュールを使用して、インストールされているアプリのエラーをすばやくキャプチャし、問題をすばやく特定できます。\n\nアプリのクラッシュのエラーログは開発者にとって非常に貴重です。開発者でない場合でも、このモジュールをインストールして、問題をすばやく解決するためのより多くの例外情報を開発者に提供できます。</string>
|
||||
<string name="developer_notice">使用説明書</string>
|
||||
<string name="warning">警告</string>
|
||||
<string name="fast_restart_problem">一部のカスタム システムでは、高速リスタートを使用した後にエラーが発生する場合があります。\\n続行しますか?</string>
|
||||
<string name="view_errors_record_tip">ここでは、モジュールが記録を開始してからのすべてのアプリエラーレコードを見つけることができます。エラー履歴は、手動で消去するか工場出荷時の設定に戻すまで保持され続けます。記録を表示、エクスポート、共有、消去できます。</string>
|
||||
<string name="theme_settings">テーマ設定</string>
|
||||
<string name="enable_md3_app_errors_dialog">MD3 スタイルのエラータイアログを有効</string>
|
||||
<string name="enable_md3_app_errors_dialog_tip">この機能は、Android のターゲットバージョンが 12 以降の場合にデフォルトで有効になり、動的テーマカラー機能は Android 12 以降でのみ有効になります。</string>
|
||||
<string name="user_id">ユーザー %1$s</string>
|
||||
<string name="unable_get_app_errors_record_tip">現在、エラーレコードを取得できません。後でエラー履歴で確認する必要があるかもしれません。問題が解決しない場合は、システムがエラーレポート収集機能をオフにしている可能性があります。</string>
|
||||
<string name="debug_logs">デバッグログ</string>
|
||||
<string name="refresh">リフレッシュ</string>
|
||||
<string name="copy">コピー</string>
|
||||
<string name="export_all_logs_success">エクスポートされたすべてのデバッグログ</string>
|
||||
<string name="export_all_logs_fail">すべてのデバッグ ログのエクスポートに失敗しました</string>
|
||||
<string name="this_contents_clear_when_restarts_tip">ここのコンテンツは、デバイスのリスタート後に自動的に消去されます</string>
|
||||
<string name="when_logger_how_to_show_tip">現在のデバッグ ログ表示の優先度フィルタ条件を設定できます。</string>
|
||||
<string name="enable_anonymous_statistics">匿名統計を有効</string>
|
||||
<string name="enable_anonymous_statistics_tip">有効にすると、Microsoft App Center を使用してアプリ関連の診断データを匿名で送信し、アプリの機能を向上させます。\n収集される情報は匿名であり、独立したデバイスまたはユーザーまで追跡することはできません。\nこの機能を有効または無効にするには、リスタートアプリが有効になります。</string>
|
||||
<string name="go_it_now">今行く</string>
|
||||
<string name="access_root_fail_tip">現在、ルート許可を取得できません。デバイスがルート化されていることを確認し、ルート許可を付与することに同意してください。\nMagisk を使用していて、Shamiko モジュールをインストールしている場合は、現在ホワイトリスト モードになっているかどうかを確認してください。(ホワイトリストモードでは、ルート権限の申請ができなくなります)</string>
|
||||
<string name="global_config">グローバル構成</string>
|
||||
<string name="follow_global_config">グローバル構成に従う</string>
|
||||
<string name="batch_operations_number">一括操作 %1$s 個のアプリ</string>
|
||||
<string name="user_apps">ユーザーアプリ</string>
|
||||
<string name="all_apps">全てのアプリ</string>
|
||||
<string name="system_apps">システムアプリ</string>
|
||||
<string name="disable_auto_wrap_error_stack_trace_content">エラースタックコンテンツの自動ラッピングを無効</string>
|
||||
<string name="click_to_update">更新 %1$s をクリック</string>
|
||||
<string name="latest_version">最新バージョン %1$s</string>
|
||||
<string name="latest_version_tip">%1$s に投稿\n\n変更ログ\n\n%2$s</string>
|
||||
<string name="update_now">更新</string>
|
||||
<string name="record_count">%1$s の合計紀錄</string>
|
||||
<string name="ci_notice_dialog_title">CI 自動ビルド手順</string>
|
||||
<string name="ci_notice_dialog_content">コミット ID %1$s の CI 自動ビルドを使用しています。\n\nコードが送信された後、自動的にトリガーされてビルドされ、自動的にコンパイルされてリリースされますが、安定性についてはテストされていません。ご自身の責任で使用してください。</string>
|
||||
<string name="stack_trace_share_top_tip">共有したいコンテンツを選択すると、表示したくないコンテンツの一部を非表示にすることができます。</string>
|
||||
<string name="stack_trace_share_bottom_tip">システム言語地域、バージョン、アプリケーションのバージョン、およびエラー ログは、非表示にしてはいけないコンテンツとして共有する必要があります。これらのコンテンツは、開発者が問題を特定するのに役立ちます。</string>
|
||||
<string name="stack_trace_share_device_brand">デバイスのブランド</string>
|
||||
<string name="stack_trace_share_device_model">デバイスモデル</string>
|
||||
<string name="stack_trace_share_system_build_id">システムビルドID</string>
|
||||
<string name="stack_trace_share_package_name">アプリのパッケージ名</string>
|
||||
<string name="stack_trace_share_other">その他の要件</string>
|
||||
</resources>
|
||||
<string name="app_name">AppErrorsTracking</string>
|
||||
<string name="xposed_desc">アプリのエラーダイアログに機能を追加、カスタム ROM の削除されたダイアログを修正し、 Android 開発者に最高の体験を提供します。</string>
|
||||
<string name="app_info">アプリ情報</string>
|
||||
<string name="reopen_app">アプリを再び開く</string>
|
||||
<string name="error_detail">エラーの詳細</string>
|
||||
<string name="mute_if_unlock">デバイスのロックが解除されるまでミュート</string>
|
||||
<string name="mute_if_restart">デバイスが再起動するまでミュート</string>
|
||||
<string name="close_app">アプリを閉じる</string>
|
||||
<string name="aerr_title">%1$s が停止しました</string>
|
||||
<string name="aerr_repeated_title">%1$s が繰り返し停止しています</string>
|
||||
<string name="mute_if_unlock_tip">デバイスのロックが解除されるまで「%1$s」のエラーをミュートにします</string>
|
||||
<string name="mute_if_restart_tip">デバイスが再起動されるまで「%1$s」のエラーをミュートにします</string>
|
||||
<string name="back">戻る</string>
|
||||
<string name="copy_error_stack">エラースタックをコピー</string>
|
||||
<string name="export_to_file">ファイルにエクスポート</string>
|
||||
<string name="error_info">エラーの情報</string>
|
||||
<string name="error_type">エラーの種類</string>
|
||||
<string name="error_file_name">ファイル名</string>
|
||||
<string name="error_throw_class">スローしたクラス</string>
|
||||
<string name="error_throw_method">スローしたメソッド</string>
|
||||
<string name="error_line_number">行番号</string>
|
||||
<string name="error_record_time">記録日時</string>
|
||||
<string name="copied">コピーしました</string>
|
||||
<string name="copy_fail">コピーに失敗しました</string>
|
||||
<string name="print_to_logcat">logcat に出力</string>
|
||||
<string name="print_to_logcat_success">logcat に出力されました</string>
|
||||
<string name="output_stack_success">例外のスタックのエクスポートに成功しました</string>
|
||||
<string name="output_stack_fail">例外のスタックのエクスポートに失敗しました</string>
|
||||
<string name="export_all">すべてエクスポート</string>
|
||||
<string name="clear_all">すべてクリア</string>
|
||||
<string name="errors_record">アプリエラー記録</string>
|
||||
<string name="no_list_data">今のところエラーはありません</string>
|
||||
<string name="confirm">確認</string>
|
||||
<string name="cancel">キャンセル</string>
|
||||
<string name="more">詳細</string>
|
||||
<string name="notice">通知</string>
|
||||
<string name="are_you_sure_clear_errors">すべてのエラー記録をクリアしてよろしいですか?</string>
|
||||
<string name="all_errors_clear_success">すべてのエラー記録をクリアしました</string>
|
||||
<string name="are_you_sure_export_all_errors">本当にログファイルをエクスポートしますか?パッケージングの処理には時間がかかるかもしれません。</string>
|
||||
<string name="view_detail">詳細を表示</string>
|
||||
<string name="export_all_errors_success">すべてのエラー記録がエクスポートされました</string>
|
||||
<string name="export_all_errors_fail">すべてのエラー記録のエクスポートに失敗しました</string>
|
||||
<string name="no_cpu_abi">ABI なし</string>
|
||||
<string name="remove_record">記録を削除</string>
|
||||
<string name="are_you_sure_remove_record">本当にこの記録を削除しますか?</string>
|
||||
<string name="got_it">了解</string>
|
||||
<string name="restart_system">システムを再起動</string>
|
||||
<string name="project_address">プロジェクトのアドレス</string>
|
||||
<string name="module_not_activated">アクティブ化されていません</string>
|
||||
<string name="module_version">モジュールバージョン: %1$s</string>
|
||||
<string name="system_version">システムバージョン: %1$s</string>
|
||||
<string name="module_is_activated">アクティブ化されています</string>
|
||||
<string name="display_settings">表示設定</string>
|
||||
<string name="hide_app_icon_on_launcher">ランチャーからアプリアイコンを隠す</string>
|
||||
<string name="hide_app_icon_on_launcher_tip">アプリアイコンを隠すとインターフェースが閉じられ、ランチャーに表示されなくなります。モジュールの設定は、EdXposed または LSPosed から開く事ができます。</string>
|
||||
<string name="hide_app_icon_on_launcher_notice">注意: LSPosed の「ランチャーアイコンを強制的に表示」の機能は必ず OFF にしてください</string>
|
||||
<string name="about_module">このモジュールは、YukiHookAPI で作成されています。\n詳細はこちら https://github.com/HighCapable/YukiHookAPI</string>
|
||||
<string name="module_not_fully_activated">一部アクティブ化されていません</string>
|
||||
<string name="are_your_sure_restart_system">本当にシステムを再起動しますか?</string>
|
||||
<string name="fast_restart">高速再起動</string>
|
||||
<string name="access_root_fail">root のアクセスに失敗しました</string>
|
||||
<string name="moment_ago">ほんの少し前</string>
|
||||
<string name="second_ago">秒前</string>
|
||||
<string name="minute_ago">分前</string>
|
||||
<string name="hour_ago">時間前</string>
|
||||
<string name="day_ago">日前</string>
|
||||
<string name="month_ago">ヶ月前</string>
|
||||
<string name="year_ago">年前</string>
|
||||
<string name="crash_process">クラッシュしたプロセス「%1$s」</string>
|
||||
<string name="share_error_stack">エラースタックを共有</string>
|
||||
<string name="preference_settings">環境設定</string>
|
||||
<string name="function_mgr">機能の管理</string>
|
||||
<string name="only_show_errors_in_front">フォアグラウンドのみエラーを表示</string>
|
||||
<string name="only_show_errors_in_main_process">メインプロセスのみエラーを表示</string>
|
||||
<string name="enable_apps_config_template">アプリ構成のテンプレートを有効化</string>
|
||||
<string name="mgr_apps_config_template">アプリ構成のテンプレートを管理</string>
|
||||
<string name="view_errors_record">アプリのエラー記録を表示</string>
|
||||
<string name="view_muted_errors_apps">ミュートされたエラーアプリを表示</string>
|
||||
<string name="only_show_errors_in_front_tip">有効化すると異常のあるアプリがフォアグラウンド(使用中)にある場合にのみ、エラー情報が表示されます。異常のあるバックグラウンドアプリは、エラー情報が表示されませんがエラー履歴には記録されます。</string>
|
||||
<string name="only_show_errors_in_main_process_tip">有効化するとアプリで発生した例外がメインプロセス(最初のアプリインスタンスオブジェクト)で発生した場合にのみエラー情報が表示されます。</string>
|
||||
<string name="apps_config_template_tip">ここでは、アプリごとに例外の発生時にエラーダイアログやその他のエラーヒントを表示するかどうかを個別に設定できます。\n無効化するとすべてのアプリがエラーダイアログの形でエラー情報を表示するようになります。</string>
|
||||
<string name="view_muted_errors_apps_tip">ここでは、手動でミュートにしたアプリを様々な形で見つける事ができます。このリストは、再起動後に自動的にクリアされます。これらの無視されたアプリを管理してミュートリストから削除する事ができます。</string>
|
||||
<string name="muted_errors_apps">ミュートされたエラーアプリ</string>
|
||||
<string name="unmute">ミュートを解除</string>
|
||||
<string name="unmute_all">すべてのミュートを解除</string>
|
||||
<string name="are_you_sure_unmute_all">本当にすべてのアプリのミュートを解除しますか?</string>
|
||||
<string name="apps_config_template">構成のテンプレート</string>
|
||||
<string name="filter_by_condition">条件で絞り込む</string>
|
||||
<string name="no_list_result">表示する結果がありません</string>
|
||||
<string name="typo_app_name_pkg_name">アプリ名またはパッケージ名のタイプミス</string>
|
||||
<string name="clear_filters">絞り込みをクリア</string>
|
||||
<string name="result_count">%1$s 件の結果が見つかりました</string>
|
||||
<string name="loading">読み込み中</string>
|
||||
<string name="when_errors_how_to_show_tip">アプリのクラッシュ時にシステムがエラーをどのように表示するかを構成できます。</string>
|
||||
<string name="show_errors_dialog">エラーダイアログを表示</string>
|
||||
<string name="show_errors_toast">エラーをトーストで表示</string>
|
||||
<string name="show_nothing">何も表示しない</string>
|
||||
<string name="app_errors_statistics">アプリエラーの統計</string>
|
||||
<string name="total_errors">エラーの合計</string>
|
||||
<string name="total_apps">アプリの合計</string>
|
||||
<string name="most_errors_app">最もエラーが多いアプリ</string>
|
||||
<string name="most_errors_type">最もエラーが多い種類</string>
|
||||
<string name="total_proportion_of_errors">エラーの合計の割合</string>
|
||||
<string name="total_errors_unit">%1$s</string>
|
||||
<string name="total_apps_unit">%1$s (システムアプリを含む)</string>
|
||||
<string name="generating_statistics">統計の生成</string>
|
||||
<string name="module_not_fully_activated_tip">モジュールが完全にアクティブ化しておらず、現在の設定項目を読み込む事ができない可能性があります。システムを再起動して再試行をしてみる事をお勧めします。</string>
|
||||
<string name="show_errors_notify">エラー通知を表示</string>
|
||||
<string name="app_errors_tip">アプリが未処理の状態を崩壊します。タップをすると詳細が表示されます。</string>
|
||||
<string name="batch_operations">バッチ操作</string>
|
||||
<string name="are_you_sure_apply_site_apps">%1$s のアプリに設定を一度に適用してもよろしいですか?</string>
|
||||
<string name="errors_dialog_always_show_reopen">「アプリを再び開く」を表示</string>
|
||||
<string name="errors_dialog_always_show_reopen_tip">有効化後にダイアログを使用してアプリの例外を表示する場合、エラーが初めてではない場合に「アプリを再び開く」のオプションが表示されます。現在のエラーがメインプロセスではない場合、またはアプリを開く事ができない場合はこのオプションは表示されません。</string>
|
||||
<string name="errors_dialog_prevent_misoperation">エラーダイアログの誤操作を防止</string>
|
||||
<string name="errors_dialog_prevent_misoperation_tip">有効化するとエラーダイアログがポップアップ表示後の 1 秒以内はクリックイベントに応答しなくなります。</string>
|
||||
<string name="developer_notice_tip">このモジュールは、Android 開発者のために特別に設計されています。\n\nコンピューターが接続できず、ADB が実行できない可能性がある場合にこのモジュールを使用する事でインストールされているアプリの例外を素早くキャプチャし、問題を素早く特定する事ができます。\n\nアプリがクラッシュしたときのエラーログは、開発者にとって貴重な財産です。開発者でなくても、このモジュールをインストールする事で開発者に問題を素早く解決させるための例外情報を提供する事ができます。</string>
|
||||
<string name="developer_notice">使用方法</string>
|
||||
<string name="warning">警告</string>
|
||||
<string name="fast_restart_problem">カスタムされたシステムによっては、高速再起動の使用後にエラーが発生する場合があります。\n\n続行しますか?</string>
|
||||
<string name="view_errors_record_tip">ここでは、モジュールが記録を開始してからのすべてのアプリの例外の記録を見つける事ができます。例外の履歴は、手動でクリアするかファクトリーリセットを実行するまで保持され続けます。記録の表示、エクスポート、共有、クリアができます。</string>
|
||||
<string name="theme_settings">テーマの設定</string>
|
||||
<string name="enable_md3_app_errors_dialog">Material 3 スタイルのエラーダイアログ</string>
|
||||
<string name="enable_md3_app_errors_dialog_tip">この機能は、Android のターゲットバージョンが 12 以降の場合にデフォルトで有効化され、テーマのダイナミックカラー機能は Android 12 以降でのみ有効になります。</string>
|
||||
<string name="user_id">ユーザー %1$s</string>
|
||||
<string name="unable_get_app_errors_record_tip">現在、エラー記録を取得できません。後でエラー履歴の記録を確認する必要がある場合があります。\n\n問題が解決しない場合は、システムがエラーレポートの収集機能を無効にしている可能性があります。</string>
|
||||
<string name="debug_logs">デバッグログ</string>
|
||||
<string name="refresh">更新</string>
|
||||
<string name="copy">コピー</string>
|
||||
<string name="export_all_logs_success">すべてのデバッグログをエクスポートしました</string>
|
||||
<string name="export_all_logs_fail">すべてのデバッグログのエクスポートに失敗しました</string>
|
||||
<string name="this_contents_clear_when_restarts_tip">これは再起動後にクリアされます</string>
|
||||
<string name="when_logger_how_to_show_tip">現在のデバッグログ表示の優先度のフィルタ条件を設定できます。</string>
|
||||
<string name="enable_anonymous_statistics">匿名の統計を有効化</string>
|
||||
<string name="enable_anonymous_statistics_tip">この機能を有効化すると、Microsoft App Center を使用してアプリ関連の診断データを匿名で送信し、アプリの機能を向上させる事ができます。\nこの機能を有効化、無効化するにはアプリを再起動する必要があります。</string>
|
||||
<string name="go_it_now">今すぐ確認</string>
|
||||
<string name="access_root_fail_tip">現在、root 権限を取得できません。デバイスが root 化されている事を確認し、root 権限を付与している事を確認して root 権限の付与に同意してください。\nMagisk と Shamiko モジュールをインストールしている場合は、ホワイトリストモードになっているかどうか確認をしてください。(ホワイトリストモードでは root 権限の許可ができなくなります)</string>
|
||||
<string name="global_config">グローバル構成</string>
|
||||
<string name="follow_global_config">グローバル構成に従う</string>
|
||||
<string name="batch_operations_number">バッチ操作を行なう %1$s 個のアプリ</string>
|
||||
<string name="user_apps">ユーザーアプリ</string>
|
||||
<string name="system_apps">システムアプリ</string>
|
||||
<string name="all_apps">すべてのアプリ</string>
|
||||
<string name="disable_auto_wrap_error_stack_trace_content">テキストの自動折り返しを無効化</string>
|
||||
<string name="click_to_update">タップして更新 %1$s</string>
|
||||
<string name="latest_version">最新バージョン %1$s</string>
|
||||
<string name="latest_version_tip">リリース日 %1$s\n\n更新履歴\n\n%2$s</string>
|
||||
<string name="update_now">更新</string>
|
||||
<string name="record_count">%1$s 件の記録が見つかりました</string>
|
||||
<string name="ci_notice_dialog_title">CI 自動ビルドの説明</string>
|
||||
<string name="ci_notice_dialog_content">あなたはコミット ID %1$s の CI 自動ビルドを使用しています。\n\nこれはコードがコミットされた後に自動的にトリガーおよびビルドされ、自動的にコンパイルおよびリリースされるものであり、安定性はテストされていないため、自己責任で使用してください。</string>
|
||||
<string name="stack_trace_share_top_tip">共有する情報を選択し、見せたくない情報の一部を非表示にする事ができます。</string>
|
||||
<string name="stack_trace_share_bottom_tip">システムの言語地域、バージョン、アプリのバージョン、およびエラーログは隠してはいけない情報として共有する必要があります。これらの情報は、開発者が問題を特定するのに役立ちます。</string>
|
||||
<string name="stack_trace_share_device_brand">デバイスのブランド</string>
|
||||
<string name="stack_trace_share_device_model">デバイスのモデル</string>
|
||||
<string name="stack_trace_share_system_build_id">システムビルド ID</string>
|
||||
<string name="stack_trace_share_package_name">アプリのパッケージ名</string>
|
||||
<string name="stack_trace_share_other">その他の要件</string>
|
||||
<string name="about_module_extension">このモジュールは KavaRef を搭載しています。\n詳細はこちら https://github.com/HighCapable/KavaRef</string>
|
||||
</resources>
|
||||
|
@@ -115,6 +115,8 @@
|
||||
<string name="are_you_sure_apply_site_apps">你确定要一次性应用设置给 %1$s 个应用吗?</string>
|
||||
<string name="errors_dialog_always_show_reopen">错误对话框始终显示“重新打开”选项</string>
|
||||
<string name="errors_dialog_always_show_reopen_tip">启用后,在使用对话框显示应用异常时,非首次异常时也将显示“重新打开”选项,若当前异常非主进程或应用无法打开则依然不会显示此选项。</string>
|
||||
<string name="errors_dialog_prevent_misoperation">错误对话框防误触</string>
|
||||
<string name="errors_dialog_prevent_misoperation_tip">启用后,错误对话框弹出前 1s 内不会响应点击事件</string>
|
||||
<string name="developer_notice_tip">此模块专为 Android 开发者而打造。\n\n在可能的无法连接电脑,不能进行 ADB 调试的时候,可通过此模块来快速捕获任意已安装应用的任意异常,以便快速定位问题。\n\n应用发生崩溃的错误日志对开发者来说是无价的财富,若你不是开发者,你依然可以安装此模块,以便给开发者提供更多异常信息快速解决问题。</string>
|
||||
<string name="developer_notice">使用说明</string>
|
||||
<string name="fast_restart_problem">部分定制系统使用快速重启后可能会发生错误,仍然要继续吗?</string>
|
||||
@@ -155,4 +157,7 @@
|
||||
<string name="stack_trace_share_system_build_id">系统构建 ID</string>
|
||||
<string name="stack_trace_share_package_name">APP 包名</string>
|
||||
<string name="stack_trace_share_other">其它必要信息</string>
|
||||
<string name="share_with_file">以文件方式分享异常堆栈</string>
|
||||
<string name="share_with_file_tip">使用文件的方式代替文本分享异常堆栈</string>
|
||||
<string name="about_module_extension">此模块使用 KavaRef 强力驱动。\n了解更多 https://github.com/HighCapable/KavaRef</string>
|
||||
</resources>
|
@@ -155,4 +155,5 @@
|
||||
<string name="stack_trace_share_system_build_id">系統建置 ID</string>
|
||||
<string name="stack_trace_share_package_name">應用程式包名稱</string>
|
||||
<string name="stack_trace_share_other">其它必要資訊</string>
|
||||
<string name="about_module_extension">此模組使用 KavaRef 強力驅動。\n了解更多 https://github.com/HighCapable/KavaRef</string>
|
||||
</resources>
|
@@ -155,4 +155,5 @@
|
||||
<string name="stack_trace_share_system_build_id">系統建置 ID</string>
|
||||
<string name="stack_trace_share_package_name">應用程式包名稱</string>
|
||||
<string name="stack_trace_share_other">其它必要資訊</string>
|
||||
<string name="about_module_extension">此模組使用 KavaRef 強力驅動。\n了解更多 https://github.com/HighCapable/KavaRef</string>
|
||||
</resources>
|
@@ -155,4 +155,5 @@
|
||||
<string name="stack_trace_share_system_build_id">系統建置 ID</string>
|
||||
<string name="stack_trace_share_package_name">應用程式包名稱</string>
|
||||
<string name="stack_trace_share_other">其它必要資訊</string>
|
||||
<string name="about_module_extension">此模組使用 KavaRef 強力驅動。\n瞭解更多 https://github.com/HighCapable/KavaRef</string>
|
||||
</resources>
|
@@ -113,6 +113,8 @@
|
||||
<string name="are_you_sure_apply_site_apps">Are you sure you want to apply settings to %1$s apps at once?</string>
|
||||
<string name="errors_dialog_always_show_reopen">Error dialog always shows \"Reopen App\"</string>
|
||||
<string name="errors_dialog_always_show_reopen_tip">After enabling, when using the dialog to display application exceptions, the \"Reopen App\" option will also be displayed when the errors is not the first time. If the current errors is not the main process or the application cannot be opened, this option will still not be displayed.</string>
|
||||
<string name="errors_dialog_prevent_misoperation">Prevent misoperation of error dialog</string>
|
||||
<string name="errors_dialog_prevent_misoperation_tip">After enabling, the error dialog will not respond to click events within 1s after popping up</string>
|
||||
<string name="developer_notice_tip">This module is specially designed for Android developers.\n\nWhen it is possible that the computer cannot be connected and ADB cannot be performed, this module can be used to quickly capture any exception of any installed apps, so as to quickly locate the problem.\n\nThe error log of apps crashing is an invaluable asset for developers. If you are not a developer, you can still install this module to provide developers with more exception information to quickly solve problems.</string>
|
||||
<string name="developer_notice">Instructions</string>
|
||||
<string name="warning">Warning</string>
|
||||
@@ -133,7 +135,7 @@
|
||||
<string name="microsoft_app_center" translatable="false">Microsoft App Center</string>
|
||||
<string name="enable_anonymous_statistics">Enable anonymous statistics</string>
|
||||
<string name="enable_anonymous_statistics_tip">After enabling, we will use the Microsoft App Center to anonymously send application-related diagnostic data to help the application function better.\nThe information collected is anonymous, and we cannot trace it back to an independent device or user.\nEnabling or disabling this feature requires restarting the app to take effect.</string>
|
||||
<string name="go_it_now">Got It Now</string>
|
||||
<string name="go_it_now">Go It Now</string>
|
||||
<string name="access_root_fail_tip">Root permission cannot be obtained currently, please confirm that your device has been rooted and agree to grant Root permission.\nIf you are using Magisk and installed the Shamiko module, please confirm whether it is currently in whitelist mode. (Whitelist mode will make it impossible to apply for Root permission)</string>
|
||||
<string name="global_config">Global Config</string>
|
||||
<string name="follow_global_config">Follow global config</string>
|
||||
@@ -158,4 +160,7 @@
|
||||
<string name="stack_trace_share_system_build_id">System Build ID</string>
|
||||
<string name="stack_trace_share_package_name">App Package Name</string>
|
||||
<string name="stack_trace_share_other">Other Requirement</string>
|
||||
</resources>
|
||||
<string name="share_with_file">Share errors stacktrace with file</string>
|
||||
<string name="share_with_file_tip">Share errors stacktrace using files instead of text</string>
|
||||
<string name="about_module_extension">This Xposed Module is powered by KavaRef.\nLearn more https://github.com/HighCapable/KavaRef</string>
|
||||
</resources>
|
||||
|
5
module-app/src/main/res/xml/file_paths.xml
Normal file
5
module-app/src/main/res/xml/file_paths.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<cache-path name="cache" path="." />
|
||||
<external-path name="external" path="." />
|
||||
</paths>
|
@@ -6,8 +6,8 @@ pluginManagement {
|
||||
}
|
||||
}
|
||||
plugins {
|
||||
id("com.highcapable.sweetdependency") version "1.0.2"
|
||||
id("com.highcapable.sweetproperty") version "1.0.3"
|
||||
id("com.highcapable.sweetdependency") version "1.0.4"
|
||||
id("com.highcapable.sweetproperty") version "1.0.8"
|
||||
}
|
||||
sweetProperty {
|
||||
global {
|
||||
@@ -21,6 +21,8 @@ sweetProperty {
|
||||
sourcesCode {
|
||||
propertiesFileNames(".secret/secret.properties")
|
||||
includeKeys("GITHUB_CI_COMMIT_ID", "APP_CENTER_SECRET")
|
||||
// 关闭类型自动转换功能,防止一些特殊 "COMMIT ID" 被生成为数值
|
||||
isEnableTypeAutoConversion = false
|
||||
}
|
||||
}
|
||||
rootProject { all { isEnable = false } }
|
||||
|
Reference in New Issue
Block a user