392 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
b89a4f3550 Fix ComponentName property access in cloneAnr method
Changed from accessing non-existent className/packageName properties
to using flattenToShortString() method which returns the component
name in a standard format. This fixes the Kotlin compilation errors:
- Unresolved reference 'className'
- Unresolved reference 'packageName'

Co-authored-by: fankes <37344460+fankes@users.noreply.github.com>
2026-01-16 03:43:39 +00:00
copilot-swe-agent[bot]
c4108069a9 Fix build failure: add explicit String type to suffix parameter
The build was failing because the Gradle Kotlin DSL couldn't infer
the type of the 'suffix' parameter in the lambda, causing
'isNotBlank()' method to be unresolved.

Fixed by explicitly typing the lambda parameter as String:
`{ suffix: String -> ... }` instead of `{ suffix -> ... }`

Co-authored-by: fankes <37344460+fankes@users.noreply.github.com>
2026-01-16 03:33:32 +00:00
copilot-swe-agent[bot]
3cfb1dc950 Fix indentation in locale strings files
Ensure ANR string entries use consistent 2-space indentation
matching the rest of the file in all locale variants.

Co-authored-by: NextAlone <12210746+NextAlone@users.noreply.github.com>
2026-01-15 19:09:04 +00:00
copilot-swe-agent[bot]
3cc37a68ee Fix Traditional Chinese translations for ANR strings
Use proper Traditional Chinese characters:
- 无响应 → 無回應
- 屡次 → 屢次

Applied to zh-rHK, zh-rMO, and zh-rTW locales.

Co-authored-by: NextAlone <12210746+NextAlone@users.noreply.github.com>
2026-01-15 19:07:40 +00:00
copilot-swe-agent[bot]
94bc3dc066 Add ANR (Application Not Responding) tracking support
- Add isAnr flag to AppErrorsInfoBean data model
- Add cloneAnr() method to create ANR error records from ApplicationErrorReport.AnrInfo
- Hook appNotResponding() and handleAnrInActivityController() methods in framework
- Add ANR-specific error titles in all supported languages (EN, ZH-CN, ZH-HK, ZH-MO, ZH-TW, JA)
- Update error type display to show "ANR" for ANR errors
- Add handleAppAnrInfo() method to record ANR data

Co-authored-by: NextAlone <12210746+NextAlone@users.noreply.github.com>
2026-01-15 19:05:03 +00:00
copilot-swe-agent[bot]
fd2c563089 Initial plan 2026-01-15 18:57:04 +00:00
4ccd3dec8b chore: bump dependencies 2025-12-28 01:55:08 +08:00
970da5e328 refactor: update text and enhance link styling in MainActivity 2025-12-28 01:55:00 +08:00
646400ccb2 chore: bump dependencies 2025-12-14 00:02:55 +08:00
2d470a17bc misc: update .editorconfig 2025-12-01 10:19:34 +08:00
d96d1a9954 misc: update .editorconfig 2025-11-30 22:45:31 +08:00
33304cc112 chore: bump dependencies 2025-11-16 01:55:00 +08:00
3d48441b76 chore: bump gradle to 9.2.0 2025-11-12 19:05:12 +08:00
326a7ebb95 chore: migrate to version catalog, Gropify 2025-11-12 19:05:06 +08:00
2dd4db95bd misc: update project files 2025-09-27 00:59:18 +08:00
f1664bd799 misc: update .gitignore 2025-09-27 00:59:01 +08:00
5bcfacf60b chore: bump dependencies 2025-09-23 15:59:05 +08:00
94057c63fc chore: bump dependencies 2025-09-13 19:50:57 +08:00
20d2fe437f chore: bump dependencies 2025-09-06 22:56:08 +08:00
418e5308b6 chore: update target sdk to 36 2025-08-19 17:48:54 +08:00
ab6e03fcbe chore: update jdk to 21 2025-08-19 17:48:32 +08:00
c08b094151 chore: bump gradle to 8.14.3 2025-08-19 17:48:24 +08:00
35ff2ec861 chore: bump dependencies 2025-08-19 17:48:15 +08:00
5a8bb5b5d2 refactor: update KavaRef usage to 1.0.1 2025-07-06 21:42:17 +08:00
ad852d6a0b refactor: migrate and update to YukiHookAPI 1.3.0 2025-06-25 23:22:59 +08:00
0086700252 docs: update README, README-zh-CN, README-ja-JP 2025-06-24 14:11:02 +08:00
070c20a6b2 docs: update README-zh-CN 2025-06-20 12:52:05 +08:00
a22a8d7715 chore: disable type auto conversion for sweet-property 2025-05-09 23:19:48 +08:00
Blue cat
3c5afb3dac Support Android 15 (#370) 2025-05-08 00:22:46 +08:00
621bddbb30 fix: removeExtra below onBackPressed in AppErrorsDetailActivity 2025-03-17 14:06:57 +08:00
e7a0ee904a chore: update project files 2025-03-17 14:05:23 +08:00
456cbbf17b chore: bump dependencies 2025-03-16 23:40:50 +08:00
f980f8ad4c chore: bump gradle to 8.13 2025-03-16 23:40:45 +08:00
66056452ec chore: update project files 2025-03-16 23:40:37 +08:00
7ebc8868c1 feat: support share errors stacktrace with file 2025-03-16 02:30:46 +08:00
0ce70690ee chore: bump ci to v4 2025-02-22 01:16:07 +08:00
a5bc6d0258 chore: update .gitignore 2025-02-22 01:15:58 +08:00
ba77c5e254 docs: update license 2025-01-13 11:19:00 +08:00
411d04ca20 refactor: support Android 15 edge-to-edge system bars 2024-11-25 18:55:00 +08:00
0124204898 chore: update target sdk to 35 2024-11-10 21:42:06 +08:00
c6a870a341 chore: update project files 2024-11-10 21:39:25 +08:00
81b33f0a35 chore: bump dependencies 2024-11-10 21:39:15 +08:00
8b75de6e33 chore: bump gradle to 8.10.2 2024-11-10 21:19:17 +08:00
kitadai31
cc4b89cd3d Update Japanese translations (#300) 2024-09-20 18:02:17 +08:00
Horange321
722132dcc1 <Add>monochrome 图标 (#288) 2024-08-09 11:17:40 +08:00
1eff715869 chore: update .editorconfig 2024-06-21 10:11:41 +08:00
b8a343827d chore: update project files 2024-06-21 10:11:36 +08:00
d742647c31 chore: bump dependencies 2024-06-20 11:32:44 +08:00
b85d8f5340 chore: bump gradle to 8.7 2024-06-20 11:32:41 +08:00
7defe28c24 chore: update .editorconfig 2024-06-20 11:32:36 +08:00
Re*Index. (ot_inc)
eff3618a38 AppErrorDemo Japanese Update. (#239)
* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Add files via upload

* Update README-ja-JP.md

* Add Japanese README link

* Update README-zh-CN.md

* Add Japanese README link

* Add Prevent misoperation of error dialog text

text update.

* Update Japanese
2024-03-28 19:10:53 +08:00
Re*Index. (ot_inc)
175d35b325 Update Japanese and Create Japanese README. (#237)
* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Update strings.xml

* Add files via upload

* Update README-ja-JP.md

* Add Japanese README link

* Update README-zh-CN.md

* Add Japanese README link

* Add Prevent misoperation of error dialog text

text update.
2024-03-21 12:55:32 +08:00
Mufanc
40286c0476 feat: prevent misoperation (#228)
* feat: prevent misoperation

* feat: add switch for misoperation prevention

* feat: add English and Chinese simplified translation
2024-03-05 14:55:03 +08:00
37c7c1cee8 chore: bump dependencies 2024-02-20 11:43:39 +08:00
d2883ec13a chore: bump gradle to 8.6 2024-02-20 11:43:33 +08:00
Re*Index. (ot_inc)
9260fb1735 Major Fix in Japanese translation. (#231) 2024-02-20 09:23:05 +08:00
1eaa2ce32e chore: update .editorconfig 2024-01-13 21:26:32 +08:00
05fd6a930d docs: update copyright date to 2024 for all existing files 2024-01-01 03:22:16 +08:00
2f3dc68d6e style: merge to new ktlint version & rules 2023-12-29 21:31:30 +08:00
929ada81c0 chore: bump dependencies 2023-12-29 00:13:16 +08:00
e422b40d6e chore: some tweaks in build.gradle.kts 2023-12-29 00:13:09 +08:00
d9fa97d643 chore: bump gradle to 8.5 2023-12-28 23:58:37 +08:00
8860469316 chore: update .gitignore 2023-12-28 23:58:25 +08:00
f7f8ffcbdd docs: use relative link 2023-12-11 02:37:13 +08:00
95ed3df72c chore: update project files 2023-12-11 02:37:10 +08:00
88a4a1b952 chore: bump dependency versions 2023-12-11 00:41:15 +08:00
d0cf5e445a docs: update piracy statement 2023-12-11 00:29:00 +08:00
078a5ec7b0 docs: update promotion 2023-11-18 18:10:28 +08:00
078614935d chore: bump "com.highcapable.sweetdependency" version to 1.0.4 2023-11-14 01:01:48 +08:00
7930b29f82 chore: bump "com.highcapable.sweetproperty" version to 1.0.5 2023-11-08 15:12:33 +08:00
4dd3d6e69f chore: bump dependencies 2023-11-04 03:46:49 +08:00
99b59a42ac chore: bump plugin versions
- bump "com.highcapable.sweetdependency" version to 1.0.3
- bump "com.highcapable.sweetproperty" version to 1.0.4
2023-11-04 03:40:41 +08:00
96b3fa2e5e Bump version to 1.3 2023-11-03 20:05:58 +08:00
65aa9be957 feat: ignore user-terminated crash 2023-11-03 19:51:44 +08:00
c5ac5e43b6 feat: add stack trace share optional dialog 2023-11-03 18:46:07 +08:00
72d8d2b9bb docs: update release channel 2023-10-26 21:40:50 +08:00
2c63c64919 feat: add errors app's target and min sdk record 2023-10-22 23:13:26 +08:00
810c99f783 fix: catch toast when no looper 2023-10-22 22:36:29 +08:00
829495d23b feat: add module app version in shared errors info data 2023-10-21 17:13:57 +08:00
82bfde0855 feat: use handleAppCrashLSPB method on system higher than Android 11 2023-10-21 02:30:11 +08:00
1b172becca chore: update target sdk to 34 2023-10-21 01:27:10 +08:00
4cc851b9b9 feat(docs): update YukiHookAPI owner link 2023-10-21 01:26:20 +08:00
c6903b50be refactor: remove DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION 2023-10-21 01:25:04 +08:00
5296033ba0 chore: bump "com.highcapable.flexilocale" version to 1.0.1 2023-10-13 20:02:06 +08:00
490607101d refactor: migrate i18ns generation to FlexiLocale plugin 2023-10-13 18:49:15 +08:00
5fcfbdabad refactor: migrate to YukiHookAPI new usage 2023-10-07 21:15:15 +08:00
ffa415f09f chore: bump dependency versions 2023-10-07 21:15:05 +08:00
7bc106c5de chore: bump plugin versions
- bump "com.highcapable.sweetdependency" version to 1.0.2
- bump "com.highcapable.sweetproperty" version to 1.0.3
2023-09-26 09:10:38 +08:00
3425e54624 refactor: change "Url" to "URL" 2023-09-21 00:42:16 +08:00
5e676878d8 refactor: add new R8 rules to fix possible problems 2023-09-19 08:13:54 +08:00
cead51ffe4 style: rearrange imports 2023-09-19 07:41:23 +08:00
cf375f57fb fix: data format and style problems 2023-09-19 07:30:58 +08:00
0757bd9737 ci: use allowed symbols 2023-09-19 05:29:00 +08:00
149d3f6ead docs: optimize comments 2023-09-19 05:13:25 +08:00
a7b4f4c642 feat: lots of changes
- add BuildConfigWrapper
- add project promote
- add ci version tag support
- change app analytics config item show when available
- fix system api compat issues
2023-09-19 05:12:44 +08:00
42c388c1b6 feat: add i18n strings 2023-09-19 05:10:35 +08:00
23b578d8df docs: update README, README-zh-CN 2023-09-19 05:09:43 +08:00
d5b79e63b3 refactor: add package name 2023-09-19 05:07:19 +08:00
581cee317d docs: add icon in img-src 2023-09-19 05:06:26 +08:00
482ece1de6 ci: optimize and add artifacts post to Telegram 2023-09-19 05:02:57 +08:00
e7559b2646 chore: add Android 14 option 2023-09-19 05:02:37 +08:00
51c64d7b4b chore: migrate build script from groovy to kts
- using SweetDependency, SweetProperty
- merge singing key file configs to properties
- update gradle and dependencies
2023-09-19 05:02:15 +08:00
b50a709c0d chore: clean up build step files 2023-09-19 05:00:58 +08:00
f363d55b71 [Change Commit Specification] Use the new commit spec from here on
child commits:
chore: add .editorconfig
2023-09-19 04:59:33 +08:00
Fankesyooni
feca4138cb Merge pull request #132 from ZQDesigned/master
[BUG FIX] Deprecated AppErrorInfo when dialog covers AppErrorsDetailActivity
2023-06-21 02:03:30 +08:00
e0925334ab Complete method annotation 2023-06-21 01:43:29 +08:00
752a68231d Revert some changes and Refactor code style again 2023-06-21 01:32:06 +08:00
1c4bce0353 Refactor code style 2023-06-21 01:14:17 +08:00
eca90eefb9 Fix:deprecated AppErrorInfo when dialog covers AppErrorsDetailActivity 2023-06-21 00:22:43 +08:00
6f643e32ba Modify refactor the locales config code 2023-05-09 11:51:11 +08:00
e77f954644 Update Gradle dependencies 2023-05-09 11:50:06 +08:00
Fankesyooni
b5136fa643 Merge pull request #112 from huajijam/master
feat: Per-app language preferences
2023-05-04 22:34:22 +08:00
‭huajijam
561d3313f5 feat: Per-app language preferences 2023-05-04 21:42:35 +08:00
ad6a06fcf5 Update Gradle dependencies 2023-04-25 07:30:55 +08:00
9d51f09020 Modify merge to YukiHookAPI new usage 2023-04-25 06:29:55 +08:00
e0f4e7aa3c Update YukiHookAPI 2023-04-25 06:29:35 +08:00
d87288fa09 Update YukiHookAPI 2023-04-21 01:26:35 +08:00
0754d5f61d Update version to 1.25 2023-04-17 06:41:55 +08:00
155bc14606 Modify merge to YukiHookAPI new usage 2023-04-17 06:38:05 +08:00
86a0b5e2cb Modify merge to YukiHookAPI new usage 2023-04-17 06:06:35 +08:00
8424acea1d Update Gradle dependencies 2023-04-17 06:05:05 +08:00
de442d7112 Update YukiHookAPI 2023-04-17 06:03:55 +08:00
e35f517668 Modify merge contents of build.gradle into constant definitions 2023-04-15 23:01:55 +08:00
0ca8cf752a Update Gradle dependencies 2023-04-14 17:57:05 +08:00
bec3fd43b8 Modify change uninstalled apps or unknown apps to show their package name for users 2023-04-09 20:52:55 +08:00
441d970869 Modify change apps related functions returned "" for default value in FunctionFactory 2023-04-09 20:51:55 +08:00
a0cec39a46 Added loading view and errors records count in AppErrorsRecordActivity, activity_app_errors_record 2023-04-09 20:31:55 +08:00
f8e549c69f Added i18n strings 2023-04-09 20:30:35 +08:00
d26c8c921a Modify replace YukiHookAPI to YukiReflection in demo-app 2023-04-08 00:06:05 +08:00
dcd4af2391 Update Gradle & Kotlin
- Update Kotlin version to 1.8.20
- Update Gradle version to 8.0.2
- Update Gradle dependencies
2023-04-08 00:03:55 +08:00
9beb2a0e2b Added start history chart in README 2023-02-19 14:39:55 +08:00
5750af4abb Modify change ProgressBar to CircularProgressIndicator in activity_config 2023-02-08 13:42:55 +08:00
2fc82f3d83 Added new bug report issues template 2023-02-08 13:25:55 +08:00
0a9e5d7a78 Fix CI compiler problem and add debug version on CI 2023-02-08 13:03:15 +08:00
256201af9a Fix "GitHub" spelling in all files 2023-02-07 05:27:55 +08:00
4b6ffb0ade Modify change ProgressBar to CircularProgressIndicator in DialogBuilderFactory 2023-02-03 23:17:15 +08:00
b6339d143a Fix some problems in CompoundButtonFactory 2023-02-03 03:39:05 +08:00
20b82b769d Modify merge to CompoundButtonDataBinder and optimize code in AppErrorsDetailActivity 2023-02-03 02:26:09 +08:00
bcaa1ae0cc Modify merge to CompoundButtonDataBinder and optimize code in MainActivity 2023-02-03 02:22:05 +08:00
951f9265ee Update YukiHookAPI 2023-02-01 04:32:05 +08:00
b4255b6b25 Update .gitignore 2023-02-01 04:31:10 +08:00
87569d8402 Update Gradle dependencies 2023-01-31 23:50:05 +08:00
8705e69782 Update version to 1.2 2023-01-23 12:19:06 +08:00
9afb85c641 Update copyright date to 2023 for all existing files 2023-01-23 12:13:50 +08:00
1d79edd760 Modify remove scrollbar and reset scroll view when view changed in AppErrorsDetailActivity, activity_app_errors_detail 2023-01-23 11:59:35 +08:00
b67bc37e70 Added check for updates feature from GitHub Release 2023-01-23 11:43:55 +08:00
56dc9ee866 Added i18n strings 2023-01-23 11:42:04 +08:00
1d85785617 Added disable automatic wrapping error stack trace contents function in ConfigData, AppErrorsDetailActivity, activity_app_errors_detail 2023-01-22 15:51:31 +08:00
1e3ab28228 Added i18n strings 2023-01-22 15:49:31 +08:00
ae08b100bc Modify remove screenOrientation parameter for AppErrorsDetailActivity in AndroidManifest 2023-01-22 15:32:18 +08:00
3772ba6560 Modify add cpuAbi, versionName, versionCode default value for legacy data transfer of AppErrorsInfoBean in AppErrorsRecordData 2023-01-22 14:55:16 +08:00
3daa0c3d94 Modify make crashed apps info persistence and add more info to stackOutputShareContent, stackOutputFileContent in AppErrorsInfoBean, FrameworkHooker, AppErrorsDetailActivity 2023-01-22 14:51:15 +08:00
a315fb03f0 Added appVersionNameOf, appVersionCodeOf functions and merge to appVersionBrandOf function in FunctionFactory 2023-01-22 14:23:41 +08:00
3b2ee23855 Modify change the judgment logic when fetched installed packages list is empty in FrameworkHooker 2023-01-22 14:11:05 +08:00
b2652a90a3 Modify change view id "app_api" to "app_cpu_abi" in AppErrorsDetailActivity, activity_app_errors_detail 2023-01-22 14:05:08 +08:00
e994343e88 Modify change apps config filters function with 3 types such as user apps, system apps and all apps 2023-01-22 13:05:05 +08:00
5631627758 Added i18n strings and remove some unused translations 2023-01-22 13:03:02 +08:00
31bac79473 Modify make radio button singleLine in dia_app_config 2023-01-22 12:59:38 +08:00
152f90e4bc Modify add @throws code note in putAppShowingType function in AppErrorsConfigData 2023-01-22 11:49:37 +08:00
361bb3a583 Update YukiHookAPI 2023-01-21 00:53:45 +08:00
1e03459e04 Update Android Gradle Plugin to 7.4.0 2023-01-21 00:49:40 +08:00
07be2df04b Added global app config template function and remove old implementations 2023-01-20 03:09:25 +08:00
cc0813b1df Added i18n strings and fix some translations 2023-01-20 02:59:15 +08:00
ea7754f60a Modify remove fetch installed packages list log and only print for empty list in FrameworkHooker 2023-01-20 02:33:25 +08:00
cc24141b9a Fix translations for i18n strings 2023-01-19 23:59:28 +08:00
3ade78d689 Update Gradle dependencies 2023-01-19 22:29:12 +08:00
5487fda542 Added access root failed tips dialog in FrameworkTool 2023-01-19 21:53:58 +08:00
ab3a71533c Added i18n strings 2023-01-19 21:53:51 +08:00
7209493518 Modify remove @Keep in all beans and add @SerializedName in AppErrorsInfoBean 2023-01-19 13:07:26 +08:00
e786ceff2d Modify change empty mark for AppErrorsInfoBean in AppErrorsInfoBean, FrameworkHooker 2023-01-19 12:57:02 +08:00
0b19c95cf1 Modify optimize code in FrameworkHooker 2023-01-17 13:45:16 +08:00
d28aef66f0 Modify ignored "android" package name when getting app list data in FrameworkHooker 2023-01-17 13:13:21 +08:00
cff8293ec1 Modify rename ui/view to ui/widget 2023-01-17 11:15:48 +08:00
162510b433 Modify change the way of getting app list data in FrameworkHooker 2023-01-17 05:12:23 +08:00
469b3ae731 Modify change multi-user app display name with suffix its user id in FrameworkHooker 2023-01-17 05:02:15 +08:00
9a19b2c1a3 Modify change appNameOf function returned default blank content to "unknown" in FunctionFactory 2023-01-17 04:56:37 +08:00
dfeb035402 Modify make app errors record files sorted by last modified date in AppErrorsRecordData 2023-01-17 04:35:47 +08:00
96e8177698 Fix the previous fix caused the text could not be selected in AppErrorsDetailActivity, activity_app_errors_detail 2023-01-17 03:59:48 +08:00
5a50881af8 Modify change AppErrorsData to AppErrorsProcessData in FrameworkHooker 2023-01-17 03:22:37 +08:00
4d4fad03ae Modify merge to new way to save and read the app errors record data 2023-01-17 03:17:37 +08:00
120c6f2aca Added List.toArrayList function in FunctionFactory 2023-01-17 03:03:27 +08:00
eab28c57b7 Added Any?.toJsonOrNull, String.toEntityOrNull functions in GsonFormatFactory 2023-01-17 01:37:08 +08:00
0f14d566d3 Fix code style in build.gradle 2023-01-16 23:36:20 +08:00
5e2bc8ce02 Fix the central color problem of views such as CheckBox 2023-01-16 22:40:26 +08:00
dc4734370e Fix the interface automatically slides up problem on Android versions lower than 10 in activity_app_errors_detail 2023-01-16 22:21:21 +08:00
1c9cdfe4a1 Added "Go It Now" button in app errors dialog for unable get app errors record in AppErrorsDetailActivity 2023-01-16 22:20:02 +08:00
097df14de6 Modify merge app errors functions implementation code to AppErrorsData in FrameworkHooker 2023-01-15 14:35:06 +08:00
8f078662ef Fix crashed apps user id mismatch problem in FrameworkHooker, AppErrorsInfoBean 2023-01-15 04:12:50 +08:00
8e99cb4cef Fix the app first crash report not responded problem in some customize ROMs in FrameworkHooker 2023-01-15 03:57:41 +08:00
60bd68f016 Modify support Android 7.0 2023-01-15 02:39:03 +08:00
60c7d5bfa3 Fix PackageList class not exist problem in Android 8.1 and fix app errors dialog no show problem in FrameworkHooker 2023-01-15 02:37:16 +08:00
c1ee00f785 Modify optimize code format in MainActivity 2023-01-15 01:35:02 +08:00
bcfa1fa4bb Fix no onCreate method in AppErrorDialog class problem in Android 10 in FrameworkHooker 2023-01-14 01:55:52 +08:00
0316f8d0df Modify make HookEntry singleton 2023-01-14 01:55:29 +08:00
4d68bc1af5 Modify merge to YukiHookAPI new usage 2023-01-14 01:55:22 +08:00
bd4b980f4d Update Gradle & Kotlin
- Update Kotlin version to 1.7.22
- Update Gradle version to 7.6
- Update Gradle dependencies
2023-01-14 01:28:08 +08:00
b28ed4148f Update YukiHookAPI 2023-01-14 01:24:19 +08:00
f2710ac1a6 Modify remove "contains", "replace" method's param name statement 2023-01-14 01:22:16 +08:00
6f9402896a Modify add release channel description, release status description in README 2022-11-26 00:12:48 +08:00
d7dce37428 Modify change action file name for ci 2022-11-25 23:32:43 +08:00
7ea16bc1eb Modify change action name for ci 2022-11-25 23:29:03 +08:00
Fankesyooni
00305a788b Merge pull request #24 from KitsunePie/ci
Upgrade ci deps
2022-11-14 13:13:57 +08:00
Howard Wu
e95163b60a gradlew chmod +x 2022-11-14 12:13:50 +08:00
Howard Wu
cd96689004 Update push_ci.yml 2022-11-14 12:10:41 +08:00
Howard Wu
5cc11b0835 Upgrade ci deps 2022-11-14 12:08:46 +08:00
f2aea80cd8 Update Gradle & PlatformSDK
- Update Android Gradle Plugin version to 7.3.1
- Update Kotlin version to 1.7.20
- Update YukiHookAPI version to 1.1.4 in demo-app
2022-10-20 00:18:46 +08:00
Fankesyooni
9ea677fe62 Merge pull request #10 from cracky5322/master
Update Traditional Chinese
2022-10-12 12:00:25 +08:00
Jia-Bin
43427f1e89 Update Traditional Chinese
Better quality and beautiful localization translation optimization
2022-10-12 11:42:17 +08:00
f55022a103 Fix file naming bug 2022-10-05 09:57:39 +08:00
b3e798d663 Update version to 1.1 2022-10-05 07:03:16 +08:00
24549a076e Added Microsoft App Center analytics 2022-10-05 06:45:49 +08:00
ccfc0e4d1d Added i18n strings 2022-10-05 06:44:33 +08:00
0b2e786f33 Update .gitignore 2022-10-05 05:51:46 +08:00
1c22497a2d Added debug log viewing function 2022-10-05 04:36:55 +08:00
f9a3cbedba Added i18n strings 2022-10-05 04:35:52 +08:00
1b12c432fa Modify add debug log and change crash log in FrameworkHooker 2022-10-05 04:32:58 +08:00
835bbdccfa Modify change ListView padding bottom in activity_app_errors_muted, activity_app_errors_record, activity_config 2022-10-05 03:00:56 +08:00
0c15cb1e81 Fix when "proc" field got null System Framework maybe crashed in FrameworkHooker 2022-10-05 02:22:36 +08:00
6c9e888622 Update YukiHookAPI 2022-10-04 07:31:50 +08:00
d51851066b Modify change app errors log's "App" to "Application" in FrameworkHooker 2022-10-04 03:47:52 +08:00
57db0a47e6 Modify change Context.openApp function command "am start ..." to system startActivityAsUser function in FunctionFactory 2022-10-04 03:03:52 +08:00
24bec3ab5b Fix code style in FunctionFactory 2022-10-04 02:38:50 +08:00
1f9a003b1d Fix tip text not full width in activity_main in demo-app 2022-10-04 02:04:58 +08:00
8ef8da9f4b Fix destroyed Activity reading list data maybe out of bounds or called adapter's data confusion error in ConfigureActivity 2022-10-04 00:49:56 +08:00
b7e992e7b8 Added system version text click notice dialog in MainActivity 2022-10-03 22:25:29 +08:00
c2b685de30 Fix English translation for i18n strings 2022-10-03 22:21:01 +08:00
9042d325c8 Modify move unable read errors data on-time tip to AppErrorsDetailActivity 2022-10-03 21:29:09 +08:00
98c2e4366d Update i18n strings 2022-10-03 21:28:07 +08:00
be8bea2ddb Modify change missing output log's timestamp file name to UTC time file name 2022-10-03 08:04:13 +08:00
e3bd5ee713 Fix some custom system can't read application crash info on-time will get wrong errors data problem 2022-10-03 07:19:13 +08:00
7f33d731a1 Added pid showing for log in FrameworkHooker 2022-10-03 07:05:02 +08:00
b271e5ad35 Added i18n strings 2022-10-03 06:40:11 +08:00
72e4025399 Modify allowed multi-user app errors dialog's "Reopen App" option to start Activity with correct user id 2022-10-03 06:15:42 +08:00
f69e0d876d Modify change Context.openApp function can open multi-user's Activity 2022-10-03 06:11:49 +08:00
7677651c73 Fix UTC time displayed directly on UI 2022-10-03 05:44:34 +08:00
82da50a0cc Added multi-user display app's user id feature 2022-10-03 05:43:49 +08:00
b8678bb6b5 Added i18n strings 2022-10-03 05:33:29 +08:00
00bcf58d0d Added INTERACT_ACROSS_USERS permission in AndroidManifest 2022-10-03 04:41:17 +08:00
0e78614208 Fix app errors record's current Context may not has INTERACT_ACROSS_USERS permission problem 2022-10-03 04:40:46 +08:00
0766fd1efe Added Material 3 dynamic colors theme for app errors dialog 2022-10-03 04:09:54 +08:00
a69bfabbe1 Added Resources.colorOf function in FunctionFactory 2022-10-03 04:02:53 +08:00
327986a399 Added i18n strings 2022-10-03 03:39:18 +08:00
6a7c098ac3 Added dynamic colors Material 3 theme for Translucent 2022-10-03 03:17:42 +08:00
5438a20275 Modify code notes in ConfigData 2022-10-03 03:15:10 +08:00
47070865f7 Added isDisableMaterial3 function in DialogBuilderFactory 2022-10-03 03:08:14 +08:00
93f87500c2 Update i18n strings 2022-10-03 02:48:06 +08:00
f9136ec880 Modify make app errors records data to persistent storage 2022-10-03 02:41:32 +08:00
73ecc9553e Added Gson format function 2022-10-03 02:37:08 +08:00
3ac74977e8 Modify merge thread to thread pool in ConfigureActivity, AppErrorsRecordActivity 2022-10-03 02:35:04 +08:00
f7c975e6de Added thread pool function 2022-10-03 02:34:16 +08:00
e3ab99c1a6 Added getResolverString / putResolverString function in ConfigData 2022-10-03 02:19:35 +08:00
53b2cb581e Update proguard-rules.pro 2022-10-03 01:32:27 +08:00
6c9bec3626 Added Gson in Gradle dependencies 2022-10-03 01:31:32 +08:00
435dd43f01 Added @Keep to data beans for R8 2022-10-03 01:29:06 +08:00
6dcbca8688 Modify merge all png elements to svg elements 2022-10-03 01:17:10 +08:00
1c3fe17587 Modify change icon to svg in activity_main 2022-10-02 23:11:07 +08:00
52fd40a42d Modify format code style in FrameworkHooker 2022-10-02 02:19:17 +08:00
f90d0bf125 Modify change code style in AppErrorsInfoBean 2022-10-02 00:52:58 +08:00
82588ec35e Modify change timestamp displayed text to UTC time in AppErrorsInfoBean, AppErrorsRecordActivity 2022-10-02 00:50:15 +08:00
5b8c926267 Added Long.toUtcTime function in FunctionFactory 2022-10-02 00:50:15 +08:00
f7c8383d0b Modify merge DataConst to ConfigData and move DataFactory to data/factory 2022-10-02 00:25:16 +08:00
a0d965a98d Added system locale display info on stack output content in AppErrorsInfoBean 2022-10-01 03:57:18 +08:00
4fa7284c3a Modify replace app errors info's display text "null" to "unknown" in AppErrorsInfoBean 2022-10-01 03:57:18 +08:00
a67507cb2d Fix add a scroll view to resolve app errors dialog bottom occlusion problem 2022-10-01 03:48:14 +08:00
a051305c48 Added scroll view in MainActivity and remove rotation lock on demo-app 2022-10-01 03:40:12 +08:00
3857a894b2 Added fast restart problem dialog in FrameworkTool 2022-10-01 03:32:52 +08:00
9f8fe8257a Added i18n strings 2022-10-01 03:32:45 +08:00
88d7f1619c Modify merge YukiHookAPI new usage and compatible with API 33 2022-10-01 03:32:23 +08:00
6d6153d6ff Update Gradle & PlatformSDK 2022-10-01 00:18:09 +08:00
08461fc50a Update YukiHookAPI 2022-10-01 00:15:14 +08:00
130c6cbc79 Update .idea 2022-10-01 00:13:05 +08:00
ac2cc089c2 Added Project icon 2022-09-30 22:25:44 +08:00
85bfadbf53 Update .gitignore 2022-09-30 22:25:05 +08:00
e0f6f9eb53 Added readme document language isolation 2022-07-26 23:50:05 +08:00
f2d4742d42 Update Gradle & Kotlin & PlatformSDK
- Update Kotlin version to 1.7.10
- Update Gradle version
2022-07-20 23:13:53 +08:00
ce413dba20 Merge dependencies 2022-07-20 02:14:39 +08:00
c7b4808b09 Update version to 1.0.1 2022-06-27 17:36:34 +08:00
a0db1f8ef4 Fix TextView ellipsize bug 2022-06-27 17:32:09 +08:00
7a34dd919f Fix System native apps errors dialog cannot closed when Android API lower 30 2022-06-27 17:31:48 +08:00
0076b2d947 Release version 1.0 2022-06-21 09:13:03 +08:00
d3f872a78e Update proguard-rules.pro 2022-06-21 09:10:38 +08:00
c1970d055d Update i18n supports 2022-06-21 09:09:21 +08:00
0ed8e289e4 Added developer notice in MainActivity 2022-06-21 07:21:21 +08:00
66f9df9f85 Added always shows "Reopen App" options in MainActivity 2022-06-21 07:00:40 +08:00
9c157cc00c Added batch operations in ConfigureActivity 2022-06-21 06:37:15 +08:00
cf91a9590d Changed copied stackTrack to content share text 2022-06-21 06:35:53 +08:00
2d73cc66dd Added errors showing with notification function and fix some i18n translation bug 2022-06-21 06:35:53 +08:00
98bfd28039 Added warn dialog notice the module is not fully activated 2022-06-21 06:35:53 +08:00
ba4d50ff05 Changed re-draw the launcher icon 2022-06-21 06:35:53 +08:00
32779be5ee Changed when errors records more than 5 then show the statistics icon 2022-06-21 06:35:40 +08:00
dd647473d3 Fix code naming irregular 2022-06-21 00:48:46 +08:00
keta1
7afc69ed9a specify ndk version 2022-06-12 09:02:28 +08:00
aa13bcb7c4 Added App errors statistics function 2022-06-11 01:31:03 +08:00
730fccc716 Update Gradle & Kotlin & PlatformSDK
- Update Kotlin version to 1.7.0
- Update Gradle dependencies
- Merge legacy code
2022-06-10 17:39:24 +08:00
be98616e33 Added Apps Configs Template function 2022-06-08 18:59:18 +08:00
1c65b51b47 Merge UI Theme to Material3 2022-06-08 15:15:21 +08:00
22cfe8b6fc Merge DialogBuilderFactory with new code style 2022-06-07 16:57:40 +08:00
2d62e6fbc5 Added muted errors apps management function and fix i18n translation 2022-06-03 04:46:23 +08:00
e6ab8f0ba4 Remove "taskAffinity" in AppErrorsDetailActivity 2022-06-03 03:12:43 +08:00
4bcec59ac8 Added multi-process error demo in demo-app 2022-06-03 03:06:09 +08:00
f1a8eedceb Merge ListView's adapter to BaseAdapterFactory 2022-06-03 01:59:29 +08:00
fe0f0d730d Added more functions
- From module activity enter to AppErrorsRecordActivity
- Only show errors dialog when apps in front or main process
- More i18n support
2022-06-02 04:58:13 +08:00
c8c1c4ef49 Remove todo_items translation 2022-06-02 01:43:47 +08:00
c985d25a42 Fix file header date 2022-06-01 23:58:05 +08:00
a5b943431f Added share error stack function in AppErrorsDetailActivity 2022-06-01 05:57:26 +08:00
412b7101da Merge code 2022-06-01 05:15:19 +08:00
ca75c50678 Added show app process when crashed and remove background process judge 2022-06-01 05:11:35 +08:00
0d9373014a Added when self crashed show crash toast 2022-06-01 04:34:17 +08:00
7676650997 Added App crashed process in logger showing 2022-06-01 04:29:47 +08:00
228f1ed741 Added crossTime and dateTime in AppErrorsInfoBean 2022-06-01 04:04:27 +08:00
6c93590772 Remove useless i18n translation 2022-06-01 03:09:39 +08:00
87f61cf523 Delete don't screenshots in AppErrorsDetailActivity 2022-06-01 03:07:17 +08:00
602cd00a6e Added new style in app errors dialog and merge code from FrameworkHooker 2022-06-01 03:06:15 +08:00
188e6c39e3 Merge code 2022-06-01 02:05:55 +08:00
d15858e7c2 Merge code 2022-06-01 01:29:08 +08:00
5a198df314 Delete overflow code 2022-06-01 01:09:26 +08:00
3735751713 Merge module and host receiver to new api 2022-06-01 00:33:10 +08:00
61c38e6e67 Update build.gradle 2022-06-01 00:20:16 +08:00
5ef26cfe46 Update YukiHookAPI 2022-05-31 04:13:26 +08:00
140372d385 Merge code 2022-05-30 02:02:22 +08:00
807f0b6781 Merge code 2022-05-30 01:45:42 +08:00
f5e22aa0ea Update YukiHookAPI 2022-05-29 04:00:29 +08:00
4fd78cd0a7 Update YukiHookAPI 2022-05-27 03:22:23 +08:00
083a0b3c0a Update YukiHookAPI 2022-05-25 04:20:34 +08:00
34027fb705 Merge systemBar support with native 2022-05-19 10:00:23 +08:00
70edb5f0d0 Added module home page 2022-05-14 18:44:24 +08:00
421de3996c Merge **.ui.App** to **.ui.errors.App** 2022-05-14 14:44:46 +08:00
8141cb1310 Added don't screenshots in AppErrorsDetailActivity 2022-05-14 01:36:00 +08:00
d8eb5f68d0 Added errors detail title float to scroll view 2022-05-14 01:18:07 +08:00
d1cb88f2b2 Fix i18n translation bug 2022-05-13 23:45:26 +08:00
42847873cf Added remove designated errors record function 2022-05-13 23:37:47 +08:00
49d10f9fec Merge remote-tracking branch 'origin/master' 2022-05-13 23:30:47 +08:00
NextAlone
6b4ae208f4 ci: add pr check 2022-05-13 23:04:59 +08:00
b9daaf3e0c Added CPU ABI shower in AppErrorsDetailActivity 2022-05-13 22:54:08 +08:00
Fankesyooni
a1b34e23fa Merge pull request #2 from KitsunePie/patch-1
chore: set default buildToolsVersion
2022-05-13 22:51:51 +08:00
NextAlone
8f1827c0e1 chore: set default buildToolsVersion 2022-05-13 22:45:55 +08:00
7408d0f1e2 Make Material Dialog background round corner 2022-05-13 20:37:29 +08:00
c91093caca Revert "Material You" Design in demo-app 2022-05-13 20:36:48 +08:00
c240c2384c Revert "Material You" Design 2022-05-13 19:47:10 +08:00
NextAlone
4afb98d1ff ci: fix double artifacts extension 2022-05-13 04:28:51 +08:00
NextAlone
f00ea99569 ci: add demo app 2022-05-13 04:23:06 +08:00
NextAlone
71ff07cc3a ci: add workflow for push 2022-05-13 03:42:43 +08:00
eeb184b3b7 Update README.md 2022-05-13 02:29:09 +08:00
ac326d390d Added export all errors record function 2022-05-13 02:27:57 +08:00
b565af4032 Fix receiver crash bug in FrameworkTool 2022-05-13 02:27:39 +08:00
8d5e7ac86f Changed locale time in AppErrorsDetailActivity and fix a crash bug 2022-05-13 02:26:59 +08:00
fd796d9671 Added locale time and formatter stack trace in AppErrorsInfoBean 2022-05-13 02:25:38 +08:00
44409fb498 Added app info on app item onclick 2022-05-13 00:35:03 +08:00
6b57d3465b Added errors detail context menu 2022-05-13 00:29:00 +08:00
2bfaaedea8 Bump Android Gradle Plugin to 7.2.0 2022-05-12 21:51:51 +08:00
81216b2509 Added errors record clear all function and changed receiver mode 2022-05-12 14:15:19 +08:00
6551252b8a Changed DialogBuilder to i18n 2022-05-12 14:14:20 +08:00
3055029dad Added i18n strings 2022-05-12 14:13:55 +08:00
NextAlone
c26ac142f5 fix: typo 2022-05-12 05:02:16 +08:00
NextAlone
a99c7d05e6 fix: wrong log extension 2022-05-12 04:58:32 +08:00
d1a1ba7855 Added function AppErrorsRecordActivity and support native crash message 2022-05-12 04:18:00 +08:00
2119d0edce Fix code style 2022-05-12 02:39:52 +08:00
2b4004182f Merge to new DialogBuilder 2022-05-12 02:35:48 +08:00
7a6c0dfcd2 Changed View's resId 2022-05-12 01:29:44 +08:00
c50f488fc7 Merge startActivity to navigate 2022-05-12 01:14:54 +08:00
b643097016 Changed I18n to template 2022-05-11 23:58:39 +08:00
491acf33db Revert "Fix "tooltipText" attrs bellowed Android 8.x"
Changed only support minSdk 27
2022-05-11 14:38:46 +08:00
8e2bec0ec2 Changed context is Activity not use Intent.FLAG_ACTIVITY_NEW_TASK and added isOutSide function 2022-05-11 13:46:23 +08:00
cc79c53d1f Fix "tooltipText" attrs bellowed Android 8.x 2022-05-11 13:37:34 +08:00
dd1447dc01 Fix demo-app version lost 2022-05-11 02:58:59 +08:00
ecc569b10b Fix ja translation 2022-05-11 02:45:06 +08:00
40e1979e7d Added AppErrorsDetailActivity function and more function 2022-05-11 02:41:54 +08:00
bcc010eba5 Added i18n's in demo-app 2022-05-10 19:56:57 +08:00
30047f5b81 Created AppErrorsDemo demo-app 2022-05-10 15:35:44 +08:00
bcf4398699 Merge README.md 2022-05-10 12:56:41 +08:00
7aab9b88eb Fix xposed_desc character "\n" bug 2022-05-10 12:06:18 +08:00
d1aa21550d Support Android 11 2022-05-10 03:28:08 +08:00
19306f842f Modify lintOptions 2022-05-10 02:41:19 +08:00
bdf09472f0 Support i18n 2022-05-10 02:15:30 +08:00
d441f441bf Update README.md 2022-05-10 02:14:56 +08:00
ddaea75ebd Update YukiHookAPI 2022-05-10 01:55:00 +08:00
9a4ca43988 Added function ignored Error when device reunlock/restart 2022-05-09 23:31:25 +08:00
8cc0255152 Merge code 2022-05-08 19:00:31 +08:00
1775e05851 Merge code 2022-05-08 16:14:02 +08:00
c3bdc99ad3 Added dialog can remove from HashMap on canceled 2022-05-08 16:01:28 +08:00
91a849d53d Fix memory leak possible 2022-05-08 15:58:07 +08:00
f44e3d8c59 Fix restart button show in cannot opened app's and fix error dialog repeating showing 2022-05-08 15:51:32 +08:00
Kitsune
fbb36d96fc Reformat code 2022-05-08 13:53:06 +08:00
Kitsune
de23cdfa8b Revert "Fix .gitignore"
This reverts commit e2d20ca9
2022-05-08 13:51:01 +08:00
Kitsune
4e5670532c Revert "Make FrameworkHooker singleton"
This reverts commit 89451aa812.
2022-05-08 13:50:15 +08:00
Kitsune
7d5ab4ec2b Reformat code 2022-05-08 13:49:49 +08:00
Kitsune
89451aa812 Make FrameworkHooker singleton 2022-05-08 13:27:47 +08:00
Kitsune
8ccb6ea2ce Remove .idea 2022-05-08 13:13:19 +08:00
e2d20ca9e7 Fix .gitignore 2022-05-08 12:37:22 +08:00
Fankesyooni
45d62fdca2 Merge pull request #1 from NextAlone/patch-na
fix: remove local.properties
2022-05-08 12:30:46 +08:00
NextAlone
bed67d0fa5 fix: remove local.properties 2022-05-08 05:04:08 +08:00
Fankesyooni
bd02a2fd5e Create LICENSE 2022-05-07 01:51:35 +08:00
81 changed files with 1140 additions and 633 deletions

View File

@@ -1,4 +1,3 @@
# noinspection EditorConfigKeyCorrectness
[{*.kt,*.kts}]
ktlint_standard_annotation = disabled
ktlint_standard_filename = disabled
@@ -10,6 +9,25 @@ 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_blank-line-between-when-conditions = disabled
ktlint_standard_no-trailing-spaces = disabled
ktlint_standard_multiline-loop = disabled
ktlint_standard_when-entry-bracing = disabled
ij_continuation_indent_size = 2
indent_size = 4
indent_style = space

View File

@@ -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 }}

View File

@@ -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 }}

131
.gitignore vendored
View File

@@ -1,19 +1,120 @@
# 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
.idea/kotlinc.xml
# Misc
.idea/misc.xml
.idea/markdown.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
.idea/AndroidProjectSystem.xml
.idea/deviceManager.xml
**/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
# Discord plugin for IntelliJ
.idea/discord.xml
# Copilot for IntelliJ
.idea/copilot**
# Mac OS
.DS_Store

5
.idea/.gitignore generated vendored
View File

@@ -1,5 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
/gradle.xml
/misc.xml

View File

@@ -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
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="17" />
</component>
</project>

View File

@@ -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>

View File

@@ -1,11 +1,8 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="SpellCheckingInspection" enabled="false" level="TYPO" enabled_by_default="false">
<option name="processCode" value="true" />
<option name="processLiterals" value="true" />
<option name="processComments" value="true" />
</inspection_tool>
<inspection_tool class="CheckImageSize" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="UnstableApiUsage" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="YAMLSchemaValidation" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>

6
.idea/kotlinc.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinJpsPluginSettings">
<option name="version" value="1.9.10" />
</component>
</project>

7
.idea/ktlint-plugin.xml generated Normal file
View 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
View 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
View File

@@ -0,0 +1,121 @@
# AppErrorsTracking
[![GitHub license](https://img.shields.io/github/license/KitsunePie/AppErrorsTracking?color=blue&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
[![GitHub CI](https://img.shields.io/github/actions/workflow/status/KitsunePie/AppErrorsTracking/commit_ci.yml?label=CI%20builds&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
[![GitHub release](https://img.shields.io/github/v/release/KitsunePie/AppErrorsTracking?display_name=release&logo=github&color=green&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/releases)
![GitHub all releases](https://img.shields.io/github/downloads/KitsunePie/AppErrorsTracking/total?label=downloads&style=flat-square)
![GitHub all releases](https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.fankes.apperrorstracking/total?label=LSPosed%20downloads&labelColor=F48FB1&style=flat-square)
[![Telegram CI](https://img.shields.io/badge/CI%20builds-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/AppErrorsTracking_CI)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/XiaofangInternet)
[![QQ](https://img.shields.io/badge/discussion-QQ-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
[![QQ 频道](https://img.shields.io/badge/discussion-QQ%20频道-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](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の推移
![Star History Chart](https://api.star-history.com/svg?repos=KitsunePie/AppErrorsTracking&type=Date)
## ライセンス
- [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)

View File

@@ -1,19 +1,19 @@
# AppErrorsTracking
[![GitHub license](https://img.shields.io/github/license/KitsunePie/AppErrorsTracking?color=blue)](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
[![GitHub CI](https://img.shields.io/github/actions/workflow/status/KitsunePie/AppErrorsTracking/commit_ci.yml?label=CI%20builds)](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
[![GitHub release](https://img.shields.io/github/v/release/KitsunePie/AppErrorsTracking?display_name=release&logo=github&color=green)](https://github.com/KitsunePie/AppErrorsTracking/releases)
![GitHub all releases](https://img.shields.io/github/downloads/KitsunePie/AppErrorsTracking/total?label=downloads)
![GitHub all releases](https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.fankes.apperrorstracking/total?label=LSPosed%20downloads&labelColor=F48FB1)
[![GitHub license](https://img.shields.io/github/license/KitsunePie/AppErrorsTracking?color=blue&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
[![GitHub CI](https://img.shields.io/github/actions/workflow/status/KitsunePie/AppErrorsTracking/commit_ci.yml?label=CI%20builds&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
[![GitHub release](https://img.shields.io/github/v/release/KitsunePie/AppErrorsTracking?display_name=release&logo=github&color=green&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/releases)
![GitHub all releases](https://img.shields.io/github/downloads/KitsunePie/AppErrorsTracking/total?label=downloads&style=flat-square)
![GitHub all releases](https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.fankes.apperrorstracking/total?label=LSPosed%20downloads&labelColor=F48FB1&style=flat-square)
[![Telegram CI](https://img.shields.io/badge/CI%20builds-Telegram-blue.svg?logo=telegram)](https://t.me/AppErrorsTracking_CI)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram)](https://t.me/XiaofangInternet)
[![QQ](https://img.shields.io/badge/discussion-QQ-blue.svg?logo=tencent-qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
[![QQ 频道](https://img.shields.io/badge/discussion-QQ%20频道-blue.svg?logo=tencent-qq&logoColor=red)](https://pd.qq.com/s/44gcy28h)
[![Telegram CI](https://img.shields.io/badge/CI%20builds-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/AppErrorsTracking_CI)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/XiaofangInternet)
[![QQ](https://img.shields.io/badge/discussion-QQ-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
[![QQ 频道](https://img.shields.io/badge/discussion-QQ%20频道-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](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.&nbsp;本软件免费、由兴趣驱动开发,仅供学习交流使用。如果你是从其他非官方渠道付费获得本软件,可能已遭遇欺诈,欢迎向我们举报可疑行为。</h3>
<h3>2.&nbsp;本软件采用 <strong>GNU Affero General Public License (AGPL 3.0)</strong> 许可证。根据该许可证的要求:</h3>
- 任何衍生作品必须采用相同的 AGPL 许可证
- 分发本软件或其修改版本时,必须提供完整的源代码
- 必须保留原始的版权声明及许可证信息
- 不得额外施加限制来限制他人对本软件的自由使用
<h3>3.&nbsp;我们鼓励在遵守 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)

View File

@@ -1,19 +1,19 @@
# AppErrorsTracking
[![GitHub license](https://img.shields.io/github/license/KitsunePie/AppErrorsTracking?color=blue)](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
[![GitHub CI](https://img.shields.io/github/actions/workflow/status/KitsunePie/AppErrorsTracking/commit_ci.yml?label=CI%20builds)](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
[![GitHub release](https://img.shields.io/github/v/release/KitsunePie/AppErrorsTracking?display_name=release&logo=github&color=green)](https://github.com/KitsunePie/AppErrorsTracking/releases)
![GitHub all releases](https://img.shields.io/github/downloads/KitsunePie/AppErrorsTracking/total?label=downloads)
![GitHub all releases](https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.fankes.apperrorstracking/total?label=LSPosed%20downloads&labelColor=F48FB1)
[![GitHub license](https://img.shields.io/github/license/KitsunePie/AppErrorsTracking?color=blue&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/blob/master/LICENSE)
[![GitHub CI](https://img.shields.io/github/actions/workflow/status/KitsunePie/AppErrorsTracking/commit_ci.yml?label=CI%20builds&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/actions/workflows/commit_ci.yml)
[![GitHub release](https://img.shields.io/github/v/release/KitsunePie/AppErrorsTracking?display_name=release&logo=github&color=green&style=flat-square)](https://github.com/KitsunePie/AppErrorsTracking/releases)
![GitHub all releases](https://img.shields.io/github/downloads/KitsunePie/AppErrorsTracking/total?label=downloads&style=flat-square)
![GitHub all releases](https://img.shields.io/github/downloads/Xposed-Modules-Repo/com.fankes.apperrorstracking/total?label=LSPosed%20downloads&labelColor=F48FB1&style=flat-square)
[![Telegram CI](https://img.shields.io/badge/CI%20builds-Telegram-blue.svg?logo=telegram)](https://t.me/AppErrorsTracking_CI)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram)](https://t.me/XiaofangInternet)
[![QQ](https://img.shields.io/badge/discussion-QQ-blue.svg?logo=tencent-qq&logoColor=red)](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
[![QQ 频道](https://img.shields.io/badge/discussion-QQ%20频道-blue.svg?logo=tencent-qq&logoColor=red)](https://pd.qq.com/s/44gcy28h)
[![Telegram CI](https://img.shields.io/badge/CI%20builds-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/AppErrorsTracking_CI)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/XiaofangInternet)
[![QQ](https://img.shields.io/badge/discussion-QQ-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](https://qm.qq.com/cgi-bin/qm/qr?k=dp2h5YhWiga9WWb_Oh7kSHmx01X8I8ii&jump_from=webapi&authKey=Za5CaFP0lk7+Zgsk2KpoBD7sSaYbeXbsDgFjiWelOeH4VSionpxFJ7V0qQBSqvFM)
[![QQ 频道](https://img.shields.io/badge/discussion-QQ%20频道-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](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)

View File

@@ -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
alias(libs.plugins.android.application) apply false
alias(libs.plugins.kotlin.android) apply false
alias(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
View File

@@ -1 +0,0 @@
/build

View File

@@ -1,29 +1,29 @@
plugins {
autowire(libs.plugins.android.application)
autowire(libs.plugins.kotlin.android)
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}
android {
namespace = property.project.demo.app.packageName
compileSdk = property.project.android.compileSdk
ndkVersion = property.project.android.ndk.version
namespace = gropify.project.demo.app.packageName
compileSdk = gropify.project.android.compileSdk
ndkVersion = gropify.project.android.ndk.version
signingConfigs {
create("universal") {
keyAlias = property.project.demo.app.signing.keyAlias
keyPassword = property.project.demo.app.signing.keyPassword
storeFile = rootProject.file(property.project.demo.app.signing.storeFilePath)
storePassword = property.project.demo.app.signing.storePassword
keyAlias = gropify.project.demo.app.signing.keyAlias
keyPassword = gropify.project.demo.app.signing.keyPassword
storeFile = rootProject.file(gropify.project.demo.app.signing.storeFilePath)
storePassword = gropify.project.demo.app.signing.storePassword
enableV1Signing = true
enableV2Signing = true
}
}
defaultConfig {
applicationId = property.project.demo.app.packageName
minSdk = property.project.android.minSdk
targetSdk = property.project.android.targetSdk
versionName = property.project.demo.app.versionName
versionCode = property.project.demo.app.versionCode
applicationId = gropify.project.demo.app.packageName
minSdk = gropify.project.android.minSdk
targetSdk = gropify.project.android.targetSdk
versionName = gropify.project.demo.app.versionName
versionCode = gropify.project.demo.app.versionCode
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -36,21 +36,13 @@ android {
externalNativeBuild {
cmake {
path("src/main/cpp/CMakeLists.txt")
version = property.project.android.cmake.version
version = gropify.project.android.cmake.version
}
}
compileOptions {
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,21 +55,28 @@ 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.
// Strongly transfer type to [String].
@Suppress("UNNECESSARY_SAFE_CALL")
val currentSuffix = gropify.github.ci.commit.id?.let { suffix: String ->
if (suffix.isNotBlank()) "-$suffix" 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")
output.outputFileName.set("${gropify.project.name}-demo-v$currentVersion-$currentType.apk")
}
}
}
dependencies {
implementation(com.fankes.projectpromote.project.promote)
implementation(com.highcapable.yukireflection.api)
implementation(androidx.core.core.ktx)
implementation(androidx.appcompat.appcompat)
implementation(com.google.android.material.material)
testImplementation(junit.junit)
androidTestImplementation(androidx.test.ext.junit)
androidTestImplementation(androidx.test.espresso.espresso.core)
implementation(libs.project.promote)
implementation(libs.kavaref.core)
implementation(libs.kavaref.extension)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.ext.junit)
androidTestImplementation(libs.androidx.test.espresso.core)
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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>

View File

@@ -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}"

51
gradle/libs.versions.toml Normal file
View File

@@ -0,0 +1,51 @@
[versions]
agp = "8.13.2"
kotlin = "2.2.21"
ksp = "2.2.21-2.0.4"
flexi-locale = "1.0.2"
project-promote = "1.0.1"
rovo89-xposed-api = "82"
yukihookapi = "1.3.1"
kavaref-core = "1.0.2"
kavaref-extension = "1.0.2"
betterandroid-ui-extension = "1.0.9"
microsoft-appcenter = "5.0.6"
libsu = "5.2.2"
drawabletoolbox = "1.0.7"
gson = "2.13.2"
okhttp = "5.3.2"
androidx-core-ktx = "1.17.0"
androidx-appcompat = "1.7.1"
material = "1.13.0"
androidx-constraintlayout = "2.2.1"
junit = "4.13.2"
androidx-test-junit = "1.3.0"
androidx-test-espresso-core = "3.7.0"
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
flexi-locale = { id = "com.highcapable.flexilocale", version.ref = "flexi-locale" }
[libraries]
project-promote = { group = "com.fankes.projectpromote", name = "project-promote", version.ref = "project-promote" }
rovo89-xposed-api = { group = "de.robv.android.xposed", name = "api", version.ref = "rovo89-xposed-api" }
yukihookapi = { group = "com.highcapable.yukihookapi", name = "api", version.ref = "yukihookapi" }
yukihookapi-ksp-xposed = { group = "com.highcapable.yukihookapi", name = "ksp-xposed", version.ref = "yukihookapi" }
kavaref-core = { group = "com.highcapable.kavaref", name = "kavaref-core", version.ref = "kavaref-core" }
kavaref-extension = { group = "com.highcapable.kavaref", name = "kavaref-extension", version.ref = "kavaref-extension" }
betterandroid-ui-extension = { group = "com.highcapable.betterandroid", name = "ui-extension", version.ref = "betterandroid-ui-extension" }
microsoft-appcenter-analytics = { group = "com.microsoft.appcenter", name = "appcenter-analytics", version.ref = "microsoft-appcenter" }
microsoft-appcenter-crashes = { group = "com.microsoft.appcenter", name = "appcenter-crashes", version.ref = "microsoft-appcenter" }
libsu = { group = "com.github.topjohnwu.libsu", name = "core", version.ref = "libsu" }
drawabletoolbox = { group = "com.github.duanhong169", name = "drawabletoolbox", version.ref = "drawabletoolbox" }
gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" }
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core-ktx" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx-appcompat" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-junit" }
androidx-test-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "androidx-test-espresso-core" }

View File

@@ -1,92 +0,0 @@
preferences:
autowire-on-sync-mode: UPDATE_OPTIONAL_DEPENDENCIES
repositories-mode: FAIL_ON_PROJECT_REPOS
repositories:
gradle-plugin-portal:
scope: PLUGINS
google:
maven-central:
jit-pack:
sonatype-oss-releases:
rovo89-xposed-api:
scope: LIBRARIES
url: https://api.xposed.info/
content:
include:
group:
de.robv.android.xposed
fankes-maven-releases:
url: https://raw.githubusercontent.com/fankes/maven-repository/main/repository/releases
plugins:
com.android.application:
alias: android-application
version: 8.1.2
org.jetbrains.kotlin.android:
alias: kotlin-android
version: 1.9.10
com.highcapable.flexilocale:
alias: flexi-locale
version: 1.0.1
com.google.devtools.ksp:
alias: kotlin-ksp
version: 1.9.10-1.0.13
libraries:
com.fankes.projectpromote:
project-promote:
version: 1.0.0
repositories:
fankes-maven-releases
de.robv.android.xposed:
api:
version: 82
repositories:
rovo89-xposed-api
com.highcapable.yukihookapi:
api:
version: 1.2.0
ksp-xposed:
version-ref: <this>::api
com.highcapable.yukireflection:
api:
version: 1.0.3
com.microsoft.appcenter:
appcenter-analytics:
version: 5.0.2
appcenter-crashes:
version-ref: <this>::appcenter-analytics
com.github.topjohnwu.libsu:
core:
version: 5.2.1
com.github.duanhong169:
drawabletoolbox:
version: 1.0.7
com.google.code.gson:
gson:
version: 2.10.1
com.squareup.okhttp3:
okhttp:
version: 5.0.0-alpha.11
androidx.core:
core-ktx:
version: 1.12.0
androidx.appcompat:
appcompat:
version: 1.6.1
com.google.android.material:
material:
version: 1.10.0
androidx.constraintlayout:
constraintlayout:
version: 2.1.4
androidx.test.ext:
junit:
version: 1.1.5
androidx.test.espresso:
espresso-core:
version: 3.5.1
junit:
junit:
version: 4.13.2

View File

@@ -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-9.2.0-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

View File

@@ -1,3 +1,2 @@
/build
/src/main/assets/xposed_init
/src/main/resources/META-INF/yukihookapi_init

View File

@@ -1,30 +1,30 @@
plugins {
autowire(libs.plugins.android.application)
autowire(libs.plugins.kotlin.android)
autowire(libs.plugins.kotlin.ksp)
autowire(libs.plugins.flexi.locale)
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.ksp)
alias(libs.plugins.flexi.locale)
}
android {
namespace = property.project.module.app.packageName
compileSdk = property.project.android.compileSdk
namespace = gropify.project.module.app.packageName
compileSdk = gropify.project.android.compileSdk
signingConfigs {
create("universal") {
keyAlias = property.project.module.app.signing.keyAlias
keyPassword = property.project.module.app.signing.keyPassword
storeFile = rootProject.file(property.project.module.app.signing.storeFilePath)
storePassword = property.project.module.app.signing.storePassword
keyAlias = gropify.project.module.app.signing.keyAlias
keyPassword = gropify.project.module.app.signing.keyPassword
storeFile = rootProject.file(gropify.project.module.app.signing.storeFilePath)
storePassword = gropify.project.module.app.signing.storePassword
enableV1Signing = true
enableV2Signing = true
}
}
defaultConfig {
applicationId = property.project.module.app.packageName
minSdk = property.project.android.minSdk
targetSdk = property.project.android.targetSdk
versionName = property.project.module.app.versionName
versionCode = property.project.module.app.versionCode
applicationId = gropify.project.module.app.packageName
minSdk = gropify.project.android.minSdk
targetSdk = gropify.project.android.targetSdk
versionName = gropify.project.module.app.versionName
versionCode = gropify.project.module.app.versionCode
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
@@ -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,30 +51,39 @@ 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.
// Strongly transfer type to [String].
@Suppress("UNNECESSARY_SAFE_CALL")
val currentSuffix = gropify.github.ci.commit.id?.let { suffix ->
if (suffix.isNotBlank()) "-$suffix" 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")
output.outputFileName.set("${gropify.project.name}-module-v$currentVersion-$currentType.apk")
}
}
}
dependencies {
compileOnly(de.robv.android.xposed.api)
implementation(com.highcapable.yukihookapi.api)
ksp(com.highcapable.yukihookapi.ksp.xposed)
implementation(com.fankes.projectpromote.project.promote)
implementation(com.microsoft.appcenter.appcenter.analytics)
implementation(com.microsoft.appcenter.appcenter.crashes)
implementation(com.github.topjohnwu.libsu.core)
implementation(com.github.duanhong169.drawabletoolbox)
implementation(com.google.code.gson.gson)
implementation(com.squareup.okhttp3.okhttp)
implementation(androidx.core.core.ktx)
implementation(androidx.appcompat.appcompat)
implementation(com.google.android.material.material)
implementation(androidx.constraintlayout.constraintlayout)
testImplementation(junit.junit)
androidTestImplementation(androidx.test.ext.junit)
androidTestImplementation(androidx.test.espresso.espresso.core)
compileOnly(libs.rovo89.xposed.api)
implementation(libs.yukihookapi)
ksp(libs.yukihookapi.ksp.xposed)
implementation(libs.kavaref.core)
implementation(libs.kavaref.extension)
implementation(libs.betterandroid.ui.extension)
implementation(libs.project.promote)
implementation(libs.microsoft.appcenter.analytics)
implementation(libs.microsoft.appcenter.crashes)
implementation(libs.libsu)
implementation(libs.drawabletoolbox)
implementation(libs.gson)
implementation(libs.okhttp)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.androidx.constraintlayout)
implementation(libs.material)
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.ext.junit)
androidTestImplementation(libs.androidx.test.espresso.core)
}

View File

@@ -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>

View File

@@ -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

View File

@@ -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

View File

@@ -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
@@ -50,6 +50,7 @@ import java.util.Locale
* @param targetSdk 目标 SDK 版本
* @param minSdk 最低 SDK 版本
* @param isNativeCrash 是否为原生层异常
* @param isAnr 是否为 ANR (Application Not Responding)
* @param exceptionClassName 异常类名
* @param exceptionMessage 异常信息
* @param throwClassName 抛出异常的类名
@@ -78,6 +79,8 @@ data class AppErrorsInfoBean(
var minSdk: Int = -1,
@SerializedName("isNativeCrash")
var isNativeCrash: Boolean = false,
@SerializedName("isAnr")
var isAnr: Boolean = false,
@SerializedName("exceptionClassName")
var exceptionClassName: String = "",
@SerializedName("exceptionMessage")
@@ -134,6 +137,37 @@ data class AppErrorsInfoBean(
timestamp = System.currentTimeMillis()
)
}
/**
* 从 [ApplicationErrorReport.AnrInfo] 克隆
* @param context 当前实例
* @param pid APP 进程 ID
* @param userId APP 用户 ID
* @param packageName APP 包名
* @param anrInfo [ApplicationErrorReport.AnrInfo]
* @return [AppErrorsInfoBean]
*/
fun cloneAnr(context: Context, pid: Int, userId: Int, packageName: String?, anrInfo: ApplicationErrorReport.AnrInfo?) =
AppErrorsInfoBean(
pid = pid,
userId = userId,
cpuAbi = packageName?.let { context.appCpuAbiOf(it) } ?: "",
packageName = packageName ?: "unknown",
versionName = packageName?.let { context.appVersionNameOf(it).ifBlank { "unknown" } } ?: "",
versionCode = packageName?.let { context.appVersionCodeOf(it) } ?: -1L,
targetSdk = packageName?.let { context.appTargetSdkOf(it) } ?: -1,
minSdk = packageName?.let { context.appMinSdkOf(it) } ?: -1,
isNativeCrash = false,
isAnr = true,
exceptionClassName = "ANR",
exceptionMessage = anrInfo?.cause ?: "Application Not Responding",
throwFileName = anrInfo?.activity?.flattenToShortString() ?: "unknown",
throwClassName = packageName ?: "unknown",
throwMethodName = "unknown",
throwLineNumber = -1,
stackTrace = anrInfo?.info?.trim() ?: "unknown",
timestamp = System.currentTimeMillis()
)
}
/**
@@ -248,7 +282,11 @@ data class AppErrorsInfoBean(
[Version Code]: ${versionCode.takeIf { it != -1L } ?: "unknown"}
[Target SDK]: ${targetSdk.takeIf { it != -1 } ?: "unknown"}
[Min SDK]: ${minSdk.takeIf { it != -1 } ?: "unknown"}
[Error Type]: ${if (isNativeCrash) "Native" else "JVM"}
[Error Type]: ${when {
isAnr -> "ANR"
isNativeCrash -> "Native"
else -> "JVM"
}}
[Crash Time]: $utcTime
[Stack Trace]:
""".trimIndent() + "\n$stackTrace"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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)
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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() {
@@ -102,47 +98,81 @@ object FrameworkHooker : YukiBaseHooker() {
* @param errors [AppErrorsClass] 实例
* @param proc [ProcessRecordClass] 实例
* @param resultData [AppErrorDialog_DataClass] 实例 - 默认空
* @param isAnr 是否为 ANR - 默认 false
*/
private class AppErrorsProcessData(errors: Any?, proc: Any?, resultData: Any? = null) {
private class AppErrorsProcessData(errors: Any?, proc: Any?, resultData: Any? = null, val isAnr: Boolean = false) {
/**
* 获取当前包列表实例
* @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 +196,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 +301,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() }
@@ -291,7 +331,12 @@ object FrameworkHooker : YukiBaseHooker() {
val appNameWithUserId = if (userId != 0) "$appName (${locale.userId(userId)})" else appName
/** 崩溃标题 */
val errorTitle = if (isRepeatingCrash) locale.aerrRepeatedTitle(appNameWithUserId) else locale.aerrTitle(appNameWithUserId)
val errorTitle = when {
isAnr && isRepeatingCrash -> locale.anrRepeatedTitle(appNameWithUserId)
isAnr -> locale.anrTitle(appNameWithUserId)
isRepeatingCrash -> locale.aerrRepeatedTitle(appNameWithUserId)
else -> locale.aerrTitle(appNameWithUserId)
}
/** 使用通知推送异常信息 */
fun showAppErrorsWithNotify() =
@@ -369,54 +414,70 @@ object FrameworkHooker : YukiBaseHooker() {
YLog.info("Received crash application data${if (userId != 0) " --user $userId" else ""} --pid $pid")
}
/**
* 处理 APP 进程 ANR 数据
* @param context 当前实例
* @param info ANR 错误报告数据实例
*/
private fun AppErrorsProcessData.handleAppAnrInfo(context: Context, info: ApplicationErrorReport.AnrInfo?) {
AppErrorsRecordData.add(AppErrorsInfoBean.cloneAnr(context, pid, userId, appInfo?.packageName, info))
YLog.info("Received ANR application data${if (userId != 0) " --user $userId" else ""} --pid $pid")
}
override fun onHook() {
/** 注册生命周期 */
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,35 +489,60 @@ 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")
/** 创建 APP 进程异常数据类 */
AppErrorsProcessData(instance, proc).handleAppErrorsInfo(context, args(index = 1).cast())
}
/** Hook ANR handling methods */
firstMethodOrNull {
name = "appNotResponding"
}?.hook()?.after {
/** 当前实例 */
val context = appContext ?: firstFieldOrNull { name = "mContext" }?.of(instance)?.get<Context>() ?: return@after
/** 当前进程信息 - 第一个参数是 ProcessRecord */
val proc = args().first().any() ?: return@after YLog.warn("Received ANR but got null ProcessRecord")
/** 创建 APP 进程异常数据类并展示 ANR UI */
AppErrorsProcessData(instance, proc, isAnr = true).handleShowAppErrorUi(context)
}
firstMethodOrNull {
name = "handleAnrInActivityController"
returnType = Boolean::class
}?.hook()?.after {
/** 当前实例 */
val context = appContext ?: firstFieldOrNull { name = "mContext" }?.of(instance)?.get<Context>() ?: return@after
/** 当前进程信息 */
val proc = args().first().any() ?: return@after YLog.warn("Received ANR but got null ProcessRecord")
/** 创建 ANR 数据 - args(1) 应该包含 AnrInfo */
AppErrorsProcessData(instance, proc, isAnr = true).handleAppAnrInfo(context, args(index = 1).cast())
}
}
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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?) {

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
@@ -47,6 +47,7 @@ import com.fankes.apperrorstracking.utils.tool.AppAnalyticsTool.bindAppAnalytics
import com.fankes.apperrorstracking.utils.tool.FrameworkTool
import com.fankes.apperrorstracking.utils.tool.GithubReleaseTool
import com.fankes.projectpromote.ProjectPromote
import com.highcapable.betterandroid.ui.extension.view.isUnderline
import com.highcapable.yukihookapi.YukiHookAPI
class MainActivity : BaseActivity<ActivityMainBinding>() {
@@ -99,10 +100,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
@@ -128,6 +131,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
binding.titleGithubIcon.setOnClickListener { openBrowser(url = "https://github.com/KitsunePie/AppErrorsTracking") }
/** 恰饭! */
binding.paymentFollowingZhCnItem.isVisible = isSystemLanguageSimplifiedChinese
binding.linkWithFollowMe.isUnderline = true
binding.linkWithFollowMe.setOnClickListener {
openBrowser(url = "https://www.coolapk.com/u/876977", packageName = "com.coolapk.market")
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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()
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
@@ -670,24 +718,10 @@
android:layout_marginBottom="10dp"
android:gravity="center"
android:lineSpacingExtra="6dp"
android:text="恰饭时间\n点击前往酷安关注我,获取我的更多应用"
android:text="点击这里前往酷安关注我,获取我的更多应用"
android:textColor="@color/colorTextGray"
android:textSize="16sp" />
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
app:cardCornerRadius="15dp"
app:cardElevation="0dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@mipmap/bg_payment_code" />
</androidx.cardview.widget.CardView>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -728,6 +762,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>

View File

@@ -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>

View File

@@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,158 +1,163 @@
<?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="anr_title">%1$s は応答していません</string>
<string name="anr_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>

View File

@@ -10,6 +10,8 @@
<string name="close_app">关闭应用</string>
<string name="aerr_title">%1$s 已停止运行</string>
<string name="aerr_repeated_title">%1$s 屡次停止运行</string>
<string name="anr_title">%1$s 无响应</string>
<string name="anr_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>
@@ -115,6 +117,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 +159,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>

View File

@@ -10,6 +10,8 @@
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="anr_title">%1$s 無回應</string>
<string name="anr_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>
@@ -155,4 +157,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>

View File

@@ -10,6 +10,8 @@
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="anr_title">%1$s 無回應</string>
<string name="anr_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>
@@ -155,4 +157,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>

View File

@@ -10,6 +10,8 @@
<string name="close_app">結束程式</string>
<string name="aerr_title">%1$s 已停止運作</string>
<string name="aerr_repeated_title">%1$s 屢次停止運作</string>
<string name="anr_title">%1$s 無回應</string>
<string name="anr_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>
@@ -155,4 +157,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>

View File

@@ -10,6 +10,8 @@
<string name="close_app">Close App</string>
<string name="aerr_title">%1$s has stopped</string>
<string name="aerr_repeated_title">%1$s keeps stopping</string>
<string name="anr_title">%1$s isn\'t responding</string>
<string name="anr_repeated_title">%1$s keeps not responding</string>
<string name="mute_if_unlock_tip">Muted errors for \'%1$s\' until device is re-unlocked</string>
<string name="mute_if_restart_tip">Muted errors for \'%1$s\' until device reboots</string>
<string name="back">Back</string>
@@ -113,6 +115,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 +137,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 +162,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>

View 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>

View File

@@ -5,25 +5,41 @@ pluginManagement {
mavenCentral()
}
}
plugins {
id("com.highcapable.sweetdependency") version "1.0.2"
id("com.highcapable.sweetproperty") version "1.0.3"
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven("https://jitpack.io")
maven("https://api.xposed.info/")
maven("https://raw.githubusercontent.com/fankes/maven-repository/main/repository/releases")
}
}
sweetProperty {
plugins {
id("com.highcapable.gropify") version "1.0.1"
}
gropify {
global {
all {
common {
permanentKeyValues(
"GITHUB_CI_COMMIT_ID" to "",
"APP_CENTER_SECRET" to ""
)
generateFrom(ROOT_PROJECT, SYSTEM_ENV)
includeKeys(
"GITHUB_CI_COMMIT_ID",
"APP_CENTER_SECRET",
"^project\\..*\$".toRegex()
)
locations(GropifyLocation.RootProject, GropifyLocation.SystemEnv)
}
sourcesCode {
propertiesFileNames(".secret/secret.properties")
android {
existsPropertyFiles(".secret/secret.properties")
includeKeys("GITHUB_CI_COMMIT_ID", "APP_CENTER_SECRET")
// 手动指定类型,防止一些特殊 "COMMIT ID" 被生成为数值
keyValuesRules("GITHUB_CI_COMMIT_ID" to ValueRule(String::class))
}
}
rootProject { all { isEnable = false } }
rootProject { common { isEnabled = false } }
}
rootProject.name = "AppErrorsTracking"
include(":module-app", ":demo-app")