AM Debug v4.0.0-beta02 Run#2836
LogViewer Enable keyword-based message filtering
Apart from considering any non-keyword texts as message query, enable a keyword-
based filtering option: msg. This allows the message filtering to include exact
and regular expression-based filtering along with inverse filtering. E.g., any
logs containing the text "secret" can be filtered out by using -msg:secret.
This is equivalent to Android Studio's
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
LogViewer Enable keyword-based message filtering
Apart from considering any non-keyword texts as message query, enable a keyword-
based filtering option: msg. This allows the message filtering to include exact
and regular expression-based filtering along with inverse filtering. E.g., any
logs containing the text "secret" can be filtered out by using -msg:secret.
This is equivalent to Android Studio's
message keyword filtering.Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
👍4❤1
AM Debug v4.0.0-beta02 Run#2838
LogViewer Add UID and package filtering in Android 7 onwards
UID filtering can be utilized using the
UID and its named owner. For example, to filter logs from the Shell user, either
argument is an non-regex integer, an exact match is performed. Otherwise the
typical rules apply.
Package name filtering can be utilized using the
example,
logs produced by App Manager release variant.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
LogViewer Add UID and package filtering in Android 7 onwards
UID filtering can be utilized using the
uid keyword. It supports both numericUID and its named owner. For example, to filter logs from the Shell user, either
uid:2000 or uid=:shell can be used (equal sign is for exact match). If theargument is an non-regex integer, an exact match is performed. Otherwise the
typical rules apply.
Package name filtering can be utilized using the
pkg keyword (equivalent topackage keyword in Android Studio) which retains all the typical rules. Forexample,
pkg=:io.github.muntashirakon.AppManager can be used to filter thelogs produced by App Manager release variant.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
❤3
AM Debug v4.0.0-beta02 Run#2839
LogViewer Add UID and package filtering options in the "Search by" dialog
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
LogViewer Add UID and package filtering options in the "Search by" dialog
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
❤3
AM Debug v4.0.0-beta02 Run#2840
LogViewer Display UID and package name in the extended log
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
LogViewer Display UID and package name in the extended log
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
❤2
App Manager now supports almost every logcat feature from Android Studio with a few exceptions:
1. It does not support Android Studio's
2. App Manager cannot support uid and package filtering in Android 5, 5.1, and 6.0 due to logcat not returning the UID associated with a log entry. There is, however, a workaround to this issue: retrieve the UID by reading the stat file of the PID. But like the previous point, this has an impact on the speed of the log viewer, hence, not explored. Client-side caching may be explored in the future, but considering the number of users, this may not be implemented at all.
3. Unlike Android Studio, App Manager supports UID based filtering which has many use-cases for our users.
4. App Manager does not support
1. It does not support Android Studio's
process keyword. This is because fetching real time process info has an impact on the overall speed of the log viewer. This is also not that important considering you can perform a PID based filtering from the running apps page.2. App Manager cannot support uid and package filtering in Android 5, 5.1, and 6.0 due to logcat not returning the UID associated with a log entry. There is, however, a workaround to this issue: retrieve the UID by reading the stat file of the PID. But like the previous point, this has an impact on the speed of the log viewer, hence, not explored. Client-side caching may be explored in the future, but considering the number of users, this may not be implemented at all.
3. Unlike Android Studio, App Manager supports UID based filtering which has many use-cases for our users.
4. App Manager does not support
level, is, name keywords as well as any explicit logical operations. The first three keywords aren't applicable to App Manager, because we already provide such options albeit in a different way (as required by a proper GUI viewer). Although explicit logical operations such as &, |, and parenthesis aren't supported, it already supports implicit & operations and explicit not operations.❤11👍7😱1🎉1
AM Debug v4.0.0-beta02 Run#2841
Refactor Use Collator to sort app labels
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
Refactor Use Collator to sort app labels
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
👍4❤2🔥1
AM Debug v4.0.0-beta02 Run#2842
Refactor Use alphanumeric sort instead of alphabetical sort
Alphabetical sort does not understand numerals. Therefore, name1, name2, name10
are sorted as name1, name10, name2 which is not preferable in some cases such as
ordering the files in a directory. Instead, alphanumeric sort is used.
For alphanumeric sort, we have borrowed the implementation by David Koelle1
instead of the traditional, expensive regular expression-based implementation.
1: http://www.davekoelle.com/alphanum.html
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
Refactor Use alphanumeric sort instead of alphabetical sort
Alphabetical sort does not understand numerals. Therefore, name1, name2, name10
are sorted as name1, name10, name2 which is not preferable in some cases such as
ordering the files in a directory. Instead, alphanumeric sort is used.
For alphanumeric sort, we have borrowed the implementation by David Koelle1
instead of the traditional, expensive regular expression-based implementation.
1: http://www.davekoelle.com/alphanum.html
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
❤5🎉2
AM Debug v4.0.0-beta02 Run#2843
Backup Fix restoring app data due to sorting issue
Use alphanumeric sorting for listing the part files.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
Backup Fix restoring app data due to sorting issue
Use alphanumeric sorting for listing the part files.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
❤6👍3
AM Debug v4.0.0-beta02 Run#2845
Settings Improve "About the device" dialog
New items:
- OS Build number
- Graphics model
- Vulkan version
- Battery technology (Li-ion/Li-poly)
- Estimated battery capacity (AKA real battery capacity)
- Battery health
- Battery cycle count (Android 14+)
Fix: Report estimated battery capacity as the default capacity if the vendor
does not provide a battery capacity spec.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
Settings Improve "About the device" dialog
New items:
- OS Build number
- Graphics model
- Vulkan version
- Battery technology (Li-ion/Li-poly)
- Estimated battery capacity (AKA real battery capacity)
- Battery health
- Battery cycle count (Android 14+)
Fix: Report estimated battery capacity as the default capacity if the vendor
does not provide a battery capacity spec.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
❤5👍3
AM Debug v4.0.0-beta02 Run#2846
Settings Add more security properties in "About the device" dialog
- dm-verity
- verified boot
- AVB version
- Bootloader lock/unlock (only when AVB is enabled)
- Debuggable OS
- Android KeyStore features: software, hardware, StrongBox
- Encryption algorithms supported by hardware- and StrongBox-backed keystore.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
Settings Add more security properties in "About the device" dialog
- dm-verity
- verified boot
- AVB version
- Bootloader lock/unlock (only when AVB is enabled)
- Debuggable OS
- Android KeyStore features: software, hardware, StrongBox
- Encryption algorithms supported by hardware- and StrongBox-backed keystore.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
👍7❤4
AM Debug v4.0.0-beta02 Run#2848
[Finder] Add support for logical expressions
Each filter option is assigned a unique ID consisting of its type and a number.
These unique IDs acts as operands or variables in the expression. The expression
supports the following operations in order:
- Brackets: Any operand or expression inside the first bracket will be evaluated
first. Brackets can also be nested.
- And: Logical "and" operation can be performed by separating multiple operands
by & (ampersand) symbol. This is the default behavior when no expression is
explicitly specified.
- Or: Logical "or" operation can be performed using the | (pipe) symbol.
All of above follows the standard Boolean algebraic laws for evaluation. Not
operator is not supported, because it already has implicit support in each
filter.
Example: Consider the following expression:
apk_size_1 & (app_type_2 | bloatware_3)
For each application item, app_type_2 filter will be matched first as it is the
first item inside the brackets. If it returns true (i.e., the filter matched),
it shall skip checking bloatware_3 filter due to short-circuit and collapse the
expression as stated below. If it returns false, it will evaluate bloatware_3
and collapse the expression.
apk_size_1 & true
In this simplified form, first apk_size_1 will be evaluated. If it returns true,
the second operand (i.e., true) will be evaluated and the expression will return
true. If it returns false, the second operand will not be evaluated and the
expression will return false.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
[Finder] Add support for logical expressions
Each filter option is assigned a unique ID consisting of its type and a number.
These unique IDs acts as operands or variables in the expression. The expression
supports the following operations in order:
- Brackets: Any operand or expression inside the first bracket will be evaluated
first. Brackets can also be nested.
- And: Logical "and" operation can be performed by separating multiple operands
by & (ampersand) symbol. This is the default behavior when no expression is
explicitly specified.
- Or: Logical "or" operation can be performed using the | (pipe) symbol.
All of above follows the standard Boolean algebraic laws for evaluation. Not
operator is not supported, because it already has implicit support in each
filter.
Example: Consider the following expression:
apk_size_1 & (app_type_2 | bloatware_3)
For each application item, app_type_2 filter will be matched first as it is the
first item inside the brackets. If it returns true (i.e., the filter matched),
it shall skip checking bloatware_3 filter due to short-circuit and collapse the
expression as stated below. If it returns false, it will evaluate bloatware_3
and collapse the expression.
apk_size_1 & true
In this simplified form, first apk_size_1 will be evaluated. If it returns true,
the second operand (i.e., true) will be evaluated and the expression will return
true. If it returns false, the second operand will not be evaluated and the
expression will return false.
Signed-off-by: Muntashir Al-Islam <muntashirakon@riseup.net>
👍5❤2