10/20/2024 Note - This is getting super messy, I know. As of 2.15 I am trying to get a nicer
interface (with a white background, to match my page stylesheet). At some
point I'm going to clean this up further. Right now I'm sacrificing styling to
remain as comprehensive as possible. So instead of complaining, just remember no other APress/Wiley/AW/No
Starch/etc books try to stay half as up to date as I do.
(Thanks to my good friend _@bazad who wrote about the
Exynos NPU vulnerability before being taken by the spaceship)
Chapter 3:
Table 3/4-1 - (Linux pseudo filesystems actively
used by Android 11) - Added BinderFS and filled in missing description for FunctionFS:
/dev/binderfs
binderfs
Linux 5.0+: Dynamic Binder devices (q.v. II/8)
/dev/usb-ffs
functionfs
USB functions (Gadget driver)
Chapter 4:
Table 4/2-2 (Qualcomm /vendor/bin) - Added spdaemon which eluded me
because it's not used in Google devices..
spdaemon
Secure Processing Unit (SPU)
manager (on non-Google devices)
Table 4/2-5 (MTK /vendor/bin) - this was left woefully incomplete. Sorry
about that (versioning problem). Here's what it should look like:
… (will add this soon)
Chapter 8:
Added copy_per_lineinit directive (new in
12.0), and that 'critical' (for services) now takes arguments
Table 8/7-1 (cont):
Added snapuserd.rc under "System & Volume Management" right after snapshotctl.rc (which it apparently replaces)
Filled cppreopts.rc in the table (I had omitted that, sorry)
cppreopts.rc
Copy preoptimized files
Chapter 9:
Update of Table 9/5-1 with system_server_dumper
Added:
Android 12 adds the system_server_dumper service. As its name implies, this is a dumpsys only service with no clients, listing the properties of SystemServer (start count and elapsed time), SystemServiceManager (started service classes) and the SystemServerInitThreadPool.
before Figure 9/4-3
Added (Before Table 9/3-3, to expand on "dynamic" service lookup):
The client API of a.os.ServiceManager allows (as of Android 11.0)
the waitFor[Declared]Service(svcName) methods.
Chapter 10:
Table 10/3-6 had some missing fields. Here's all of it:
Table 10/3-6: The elements in
/etc/sysconfig/ and /etc/permissions/
files
Element
Meaning
group
Global group IDs given to packages
(III/2)
permission
Built-in UID to permission mappings
(III/2)
assign-permission
Assign name
permission to uid (III/2)
split-permission
Split name
permission for targetSdk version (III/2)
library
Built-in shared libraries
[unavailable-]feature
Indicate or hide a platform
feature (for <uses-feature>)
allow-in-power-save[-except-idle]
Allow package to operate even device is in different
power modes
allow-in-data-usage-save
allow-unthrottled-location
Allow
continuous location updates
allow-ignore-location-settings
Override location
settings
allow-implicit-broadcast
Exempt broadcast from
8.0 background delivery restrictions
Non-platform apps
allowed access to full private API
allow-association
Allow target
package to interact with allowed package
app-data-isolation-whitelisted-app
Apps enabled
for data isolation
bugreport-whitelisted
Allow package
to generate bug report
install-in-user-type
Install package
in user-type (FULL/PROFILE)
named-actor
Named actors (used by Overlay
service, q.v. II/3)
overlay-config-signature
Package capable of
validating config_signature for overlays (q.v. II/3)
rollback-whitelisted-app
Apps eligible for
enabling rollback
whitelisted-staged-installer
Installers allowed
to commit staged install (II/2)
Chapter 13: Thanks to the wonder of writing in HTML,
the Google Pixel Powerstats coverage wasn't printed:
Google documents the
IPowerStats.hal in the Source
site[psh], and its AIDL is similar. The implementation of
the service for Pixel devices
(android.hardware.power.stats@1.0-service.pixel) can be found
in
open source.[psp] Rails data is collected from
/sys/bus/iio/devices/iio:device#, and the service
recognizes the following power entities:
Table 13/5-3:: The power entities defined by the
Google Pixel powerstats implementation
References: As an appendix (which somehow got omitted
from the first print batch). Now in print and also online at this link
(11/09/2021)
v2.1
Preface:
BTC is down to $38k$50k$47k$55k $66k. Sheesh
Added a GREAT tip for starting ADB with env/startup options specified for
shell - Thanks to @KingOfPhp:
Chapter 1:
Added note: Bionic is also used outside Android (notably in the hardened GrapheneOS),
though Fuchsia's libc is derived from musl[musl].
Updated Figure 1-3/10 to reflect cases where HIDL server doesn't access
hardware directly, but rather through yet another vendor daemon (very popular,
and I discuss it in II/8, but somehow illustration didn't reflect it). So now
it looks like this:
Chapter 2:
Updated Table 2/1-1 for ARMv9 launch (happened after v2.0.1 came out...)
Also adding /dev/rpmsg_ctrl# - for Linux Remote Processor
Messaging, used by QCom
2/4.1.1 - Google Devices (up to but not including Pixel 6) use
Qualcomm Chipsets
Added footnote for Huawei -
* - The US imposed ban, along with a worldwide chip shortage in 2021, continue
to take its toll on Huawei - it's P50 line of phones not only uses the
Qualcomm SnapDragon 888 chipset, but further ships without 5G capabilities.
The phones ship with HarmonyOS 2.0.
Chapter 3:
Android 11 mandates kernels not support
debugfs. Somehow I missed that in the A11 release notes, but learned this the hard way trying to run bindump on a redfin
(Pixel 5), which comes with A11 as stock. This breaks my bindump
tool.
Note that packages.xml is now ABX! (also, @@TODO no <perms>
element)
Changed Table 5/4-1 (Standard directories created by Android on
SD-Cards) to an output
Output 5/1-2: The loop mounts of apexd - added ls -l
/sys/devices
(Thanks, Woody!)
Output 5/1-2: The loop mounts of
apexd
Chapter 6: Pixel 6[XL] and onward use FBPKv2
Chapter 9:
Added a table of the Binder default transactions I had originally set for
Volume II/7 in place of the paragraph listing them (it made sense, now that 11.0 and 12.0 add even more):
Table 9/1-2-b: Default Transaction Codes supported by
(almost) all Binder objects
Constant
Value
Default Behavior
DUMP_TRANSACTION
_DMP
(1598311760)
Requests full dump of service state to specified
fd according to optional arguments. Used by
dumpsys
INTERFACE_TRANSACTION
_NTF
(1598968902)
Requests interface of service object behind handle.
Expects UTF-16 interface name as reply
SHELL_COMMAND_TRANSACTION
_CMD
(1598246212)
Command interface for
/system/bin/cmd
SYSPROPS_TRANSACTION
_SPR
(1599295570)
Deprecated: Calls libutils's
report_sysprop_change() and any property callbacks
PING_TRANSACTION
_PNG
(1599098439)
Null transaction ensuring service object is alive.
EXTENSION_TRANSACTION
_EXT (1598380116)
11.0: Pass
an extension BBinder for object
DEBUG_PID_TRANSACTION
_PID
(1599097156)
11.0: Return service's process
identifier (i.e. getpid())
SET_RPC_CLIENT_TRANSACTION
_RPC
(1599230019)
12.0 (debug builds, #if
BINDER_RPC_DEV_SERVERS,) set socket FD
Also emphasized webview_zygotedoes not randomize its
address space relative to other Zygote[64] instances.
Also added a footnote:
* - Using interfaces could ostensibly enable a design in which a single service endpoint could support multiple interfaces or
"personalities", though in practice Binder associates a single interface name
with an endpoint.
@TODO: I'll update Output 9/4-4 (Threads of system_server for
new service threads in 12 once the dust settles)
Added NativeTombstoneManager to LocalServices table (9/5-4)
(realized I had missed it earlier since it came into 11.0 but I now discuss tombstones now in II/1):
c.a.s.os.NativeTombstoneManager
11.0:
Manage tombstones and parse protobuf (.pb) tombstones (II/1)
Chapter 10: Added people service
Chapter 11:
In 2.4 (Task profiles), after 11/2-16:
On kernels which support it, libprocessgroup also adjust
/proc/pid/timerslack_ns, which helps coalesce task wakeups, conserving battery life.
In lmkd:
The daemon can thus adjust the "killability" of processes based on the activity state, or other factors (background threads, application services, etc). Google describes the considerations in the ActivityManagerService's
OOMAdjuster documentation.[ooma]
Added performance_hint details (IHintSession,
etc. and dumpsys performance_hint from a Pixel 6)
Chapter 12:android.hardware.dumpstate@1.1:IDumpstateDevice.hal is version 1.1
Chapter 13: (before 13/4-5, after mention of
msm_adreno_tz) added "… and other governors
in /sys/kernel/gpu/gpu_available_governor"
(thankfully very few) typos found by James H (thank you! - see below)
on page 291 paragraph 3, it is stated that "ps -t" on Android will list
Thread. Should be "-T"... (Thanks, John Zou!)
v2.2
10/25/2022
Book-wide: All refs to II/.. corrected with final chapter
numbers and some moved to "IV" (sorry...)
Chapter 1::
Android 13 , obviously
Table 1/1-1 updated for September 2022, with statistics from Statista
Chapter 2:
Expanded with ARMv8.6/8.7 and ARMv9.x
Table 2/1-3 now has snapdragon 8 Gen 1. Under ARM Cortex, three rows:
CPU part
Core Type
0xD46
Cortex-A510
0xD47
Cortex-A710
0xD48
Cortex-X2
Also made note under ARMv8.3 ARMv8.5 and ARMv8.6 that the first chipsets to
support MTE, when enabled in kernel) is the 8Gen1 and Dimensity 9000
Make note of
/vendor/bin/rebalance_interrupts-vendor in Pixel 6
Note Dimensity 9000 (just announced) and SnapDragon 8 Gen 1. Wen eta
Exynos? :-P
Chapter 3: EROFS - noted that some vendors (notably,
XiaoMi with the Mi 12 filesystem images) have begun to follow in adoption, as
well as Google's adoption in 13.0 native phones for r/o filesystems
Chapter 4: Table 4/1-8
: Added
uinput
11.0: Simulate input events with UHID
Chapter 5: Made note that several APEX bundles come from
AOSP's packages/modules. Tie to II/1. Also noted "capex" in
Android 13 DP1 (WHY, GOOGL, WHY? Unzipping a double signed payload wasn't
enough??):
Android 12 (practically, 13) adds support for compressed
APEX files[capex], identified by their .capex
extension. As with normal APEX, these are ZIP files containing the manifest (in
protobuf and XML form) as well as the apex_pubkey, with the
original (i.e. normally archived but otherwise uncompressed) APEX deflated
inside. This aims to reduce the space taken for /system/apex,
under the
assumption that the APEXes within it will inevitably be updated (and thus,
loaded from /data/apex, obviating the need for the
pre-installed versions).
Chapter 9: Table 9/5-1 - added "attention" under
Application Services (yes, I know, it slipped my attention. meh). Also
corrected binder_calls_stats (erroneously listed as
"…call_stats" and mentioned twice in table..)
Chapter 10: Table 10/3-6 accidentally omitted "feature" - that's where PMS
gets its getSystemAvailableFeatures() AIDL method (which is noted below table)
Chapter 12: mention dumpstate logs in (/data/user_de/0/com.android.shell/files/bugreports)
Android 13 changes (ongoing list before I integrate it into next book
update:
ARMv9 devices (SD 8Gen1, and 2022+ chipsets) - can also support
ARMv8.5 MTE. Made note about support in hw and :
Android 13 native devices (late 2022) are expected to offer MTE
(through ARMv9, and thus v8.5 compatible chipsets), and AOSP supports
setting it
through the bootloader, android:memtagMode Manifest tag,
and arm64.memtag.process.* properties,
as
documented by Google [amte] and discussed in III.
Chapter 7: Added, after Listing 7/3-4:
Android 13 extends the misc_system_space_layout with a
misc_memtag_message, identifiable by its magic of 0x5afefe5a, to provide the ARMv8.5 MTE hint for the
OS, as discussed in III.
safety_center: [android.safetycenter.ISafetyCenterManager]
virtualdevice: [android.companion.virtual.IVirtualDeviceManager]
(EXCITING! - Either for Vol III or IV, not sure)
selection_toolbar: [android.view.selectiontoolbar.ISelectionToolbarManager]
ambient_context: snore/cough detection, really????
IGameService... (will go into IV)
IAttestationVerification[Manager]Service.aidl (will go into III)
Chapter 10: Added ISystemConfig to Table 10/3-7:
Table 10/3-7: The methods exposed by the
android.os.ISystemConfig AIDL
Method
Notes
...
...
int[] getSystemPermissionUids(perm)
12.0:
Get UIDs holding perm
ListgetEnabledComponentOverrides(pkgName)
13.0:
Get enabled component overrides (in pkgName)
Chapter 11: Added description of the tare ("The Android
Resource Economy") service with dumpsys and link to very detailed README.md in
sources
Chapter 12: ILogcatManagerService detail (too long to list
here)
2.3
Chapter
Updates
Chapter 2
Updated ARM processor table IDs to include Cortex
X4, A520, A720
Updated QCom chipset table to include SD8650 (8
Gen 3)
Chapter 10
Table 10/3-6: The elements in /etc/sysconfig/
and /etc/permissions/ files - updates:
allow-adas-location-settings
13.0:
package and attributionTag
bg-restriction-exemption
13.0: allow
package bg
automatic-rollback-denylisted-app
14.0:
Prevent apps from being rolled back
install-constraints-allowed
14.0: impose
installation constraints
update-ownership
14.0: Set
packageinstaller
initial-package-state
14.0: Set
package to stopped
asl-file
14.0: package
and path
2.15
Soon (When V comes out officially, in Sept)
Cover
No longer has fish - just birds (Pixel 6) felines (Pixel 7), canines (Pixel
8), and lizards (Pixel 9) since all pre Pixel 6 are dead..
Chapter 2, on MTE:
MTE is supported by Bionic
as of 12. As v2.2 of this book goes to print, Android 13 makes MTE support
formal, adding it as a bootloader provided option and/or configurable system
property. This remarkably not only catches up with Apple Silicon (which
adopted ARMv8.3 PAC three years earlier), but also leaves it behind, as iOS18
on the latest Apple chipset (A18) does not use MTE (although likely does
support it, and AAPL chooses to disable it).
Versioning now follows that of Android, so it's easier to see which
version of book supports what.
New Daemon: aconfigd - Does nothing, still. But's the first written in Rust.
New Daemon: uprobestats
Chapter 3: Updated MISC partition discussion since
it's not expanded by misctrl.rc and kcmdlinectrl:
Chapter 8:
Added netbpfload.rc (TBD in Vol IV)
Added misctrl.rc (expanded misc listing 3/2-9-b)
Added kcmdlinectl.rc (to read from misc under MISC_KCMDLINE_MESSAGE_VERSION)
Chapter 12: Android 15 profiling service (ProfilingManager)
Retrieve file
descriptor with results of profiling
but the Manager sugarcoats requestProfiling to add an
executor, cancellationSignal, and listener. Applications
are expected to call the Manager's requestProfiling(…)
specifying one the currently supported profilingTypes
PROFILING_TYPE_* constants: …HEAP_PROFILE,
…_JAVA_HEAP_DUMP, …_STACK_SAMPLING and
…_SYSTEM_TRACE. The cancellationSignal allows the
app to abort a profiling session, and the listener is passed in a call
to registerResultsCallback(…).
handleTraceResult(…) calls on
/system/bin/trace_redactor, and - through another
Runnable - calls checkRedactionStatus(…). The
same rescheduling logic applies, until the redaction process times out or
completes successfully. If the latter occurs,
beginMoveFileToAppStorage(…) moves the trace file from the
perfetto-traces directory to the Application path, so it may be
read by the app.
Throughout all this lifecycle, the registered listener is a
Consumer<ProfilingResult> may be called (through the
Manager) to process any error conditions. On success, and once the file is
moved to the app directory, the app can use the listener's
getResultFilePath() to obtain the file path.
*Sigh* Typos: (These don't get you the BTC bounty, but I still
appreciate them!)
Fixed in v2.0.2 (thanks to James H!):
Page 24, 3.9.2 (Androidisms), ASHMem bullet, second sentence, 'created' to 'create'
Page 24. 3.9.2 (Androidisms), ASHMem bullet, third sentence, 'require' to 'required'
page 87, 4.4 (debugfs), First paragraph, second sentence, sentence terminates without a complete thought: which (as with the other pseudo-filesystems)
page 113, 3 (/data), third bullet point, first sentence, 'but would greatly mitigating' to 'but would greatly mitigate'
page 164, 1 (Android Device Images), second paragraph, second sentence, 'OTA images are arrive at' to 'OTA images arrive at' page 165, 1.1 (Factory Images), first paragraph, second sentence, 'All are all Qualcomm' to 'All are Qualcomm'
page 197, 1.3 (TrustZone/Hypervisor), second paragraph, first sentence, 'ennvironment' to 'environment'
page 198, 1.4.1 (Little Kernel), Apps bullet, first sentence, 'in a full kernel-drive OS' to 'in a full kernel driven OS'
page 214, 1 (The roles and responsibilities of init), first paragraph, second sentence, 'which read' to 'which reads'
page 236, 6 (Zygote), third paragraph, second sentence, 'suchlrequests' to 'such requests'
page 239, 7 (Android Daemons, at a glance), third paragraph, last sentence, 'so that the daemon be able to connect' to 'so that the daemon is able to connect'
page 250, 3 (The servicemanager), fourth paragraph, third sentence, 'to establishes' to 'to establish'
page 259, 5 (A bird's eye view of framework services), last paragraph, 'aims to tackles' to 'aims to tackle'
page 268, 1.2 (The user service), second paragraph, first line, 'inintially' to 'initially'
page 278, 3.3 (The settings service), last paragraph, first line, missing a parethesis
page 280, 3.5 (Server Configurable Flags), first paragraph, first line, 'especciallyl' to 'especially'
page 286, 1.2 (The cmdline and comm), second to last paragraph in experiment, second line, Mentions /lib64 for 32-bit apps.
page 293, 1.5.2 (Thread states and context switches), last paragraph, last
sentence, 'The Zombies are also find peace' to 'The Zombies also find peace' [Aside: your description of Zombies
was rather amusing] page 339, 1.2 (DropBox), first paragraph, last sentence, extra comma at
beginning of sentence and 'logs' to 'log' later in the sentence.
page 343, 2.13 (The shell interface), second paragraph, last sentence, 'manny' to 'many'
page 345, 2.16 (Output files), table 12/2-9, first row, @TODO entry? Intentional?
page 347, 2.4 (dumpstate/bugreport), second paragraph, second sentence, 'onsists' to 'consists'
page 391, 4.4 (Idle Governors), first paragraph of experiment section, missing a parenthesis
Volume II:
v2.0.1
Chapter 4 - AMS
Output 4/3-2 (detailing app spawning by jtraceing Zygote)
somehow had the red-on-black misprinted, thus missing the Zygote arguments. Sorry about that. Here is
what it should look like:
Updated all APEX packages in 14.0: *-I'll need to update Vol I for mgmt
and config - new full chapter coming soon, from the looks of things..
ConfigInfrastructure
14.0: Device
configuration support (I*)
CrashRecovery
14.0: currently
empty
DeviceLock
14.0: Device locking
(III)
HealthFitness
14.0: Health &
Fitness (OOS)
ImsMedia
14.0: IMS Media
(IV)
OnDevicePersonalization
14.0:
User-oriented feature customization (I*)
RemoteKeyProvisioning
14.0: Remote
Key
Provisioning (III)
ThreadNetwork
14.0: Thread
(networking) protocol support (IV)
Added Output 1/1-13: Demonstrating new API calls in Bionic, for API level
34, after mention of the
__INTRODUCED_IN[/_ARM/_x86/_32/_64](apiLevel) note.
M_PURGE_ALL (-104)
(Not in book but still noted here , from their md documentation)
* `close_range` and `copy_file_range` (Linux-specific GNU extensions).
* `memset_explicit` in (C23 addition).
* `__freadahead` in (in musl but not glibc).
* `posix_spawn_file_actions_addchdir_np` and
`posix_spawn_file_actions_addfchdir_np` in (in musl/glibc and macOS,
but not iOS).
Added artd section to Volume II (note: artd was technically introduced in
13.0, but its AIDL then only had “isAlive()”, so wasn’t worth a mention in the
book. The book considers it to be officially introduced in 14.0.
Android 14 introduces artd as a helper daemon to facilitate
ART profiling and general maintenance, including invoking dex2oat
(still referred to as dexopt). The main aim is to outsource the
tasks requiring elevated permissions from system_server to this
daemon. The documentation states this is method is the default from 14.0
onwards, but refers to the previous method of invocation directly from the
PackageManager (in 4.1) as a "legacy implementation", which will
be removed in 15.0
Note in DEX/ART Management (3/3.3.4) about eventual deprecation
Note "safer" DCL (ensure read only)
Added in 1.4, after note on VDEX:
Overall, there are some 14 ART/OAT files, making up the full runtime and
Android framework support. Although they are separate files, they are rife
with cross file links - from ARTs to OATs (and vice versa), and to other
ARTs/OATs (notably, back references to boot.art and
boot.oat). The system_server additionally loads
services.[art/oat], with code from f/b/services.
All ARTs are loaded and decompressed (i.e, into a read/write
anonymous mapping) at fixed addresses in the 0x7xxxxxxx range (but adjusted by
a runtime slide), next to their corresponding OATs. The ARTs are also
mmap(2)ed (in a read-only, uncompressed mapping) at a higher
address. Table 7/1-1 shows the ARTs, by their usual load order:
Table 7/1-1: The ART files loaded into
Zygote
ART file
Contains
/system/framework/boot.art
Main runtime
/system/framework/boot-core-libart.art
Core
support classes
/system/framework/boot-okhttp.art
OK
HTTP
/system/framework/boot-bouncycastle.art
Bouncy
Castle crytpo support
/system/framework/boot-apache-xml.art
Apache XML
support
/system/framework/boot-framework.art
Runtime
frameworks
/system/framework/boot-framework-graphics.art
Runtime
Graphics support
/system/framework/boot-ext.art
Boot
extensions
/system/framework/boot-telephony-common.art
Telephony
support (See IV)
/system/framework/boot-voip-common.art
VoIP/SIP
(see IV)
/system/framework/boot-ims-common.art
Internet
Multimedia Services (see IV)
/system/framework/boot-core-icu4j.art
Unicode
support classes
/system/framework/boot-framework-adservices.art
14.0:
Ad services
Chapter 8
(btw, JTrace is now up
to date with these changes)
Added BINDER_GET_EXTENDED_ERROR to Table 8/5-2: Binder
ioctl(2) codes
Updated Figure 8/5-7: The binder_transaction_data structure to shown
TF_UPDATE_TXN flag (0x40), and emphasized sender_* fields are set/overwritten
by driver (a major tenet for Binder security..)
Chapter 1: Profiling Manager APEX module (in table)
Chapter 2:
At end of 4.2 (Engraving Tombstones):
Android 15 extends tombstones
using APIs from Bionic's crash_detail.h. Using
android_crash_detail_register(…) and other calls, a
process can add an extra detail buffer to both the textual and protobuf tombstones.
Dropbox service changed from 4.4.1 (an h4) to 4.5 (an h3)...
Chapter 4:
ActivityManagerService:
Table 4/2-10: Process and UID state
observation methods of ActivityManager
The above methods funnel to
requestBugReportWithDescription(…) which requires the
caller to have the DUMP permission. If the permission is held,
the routine broadcast an Intent of
INTENT_BUGREPORT_REQUESTED directed at the
SHELL_APP_PACKAGE (com.android.shell) with whatever
EXTRA_BUGREPORT_TYPE was requested.
The Intent is received by the
BugreportHandlerResponseBroadcastReceiver. This eventually causes
the device to vibrate (if possible), and generates the dumpstate
-w bug report (as root, which starts a binder service,
and waits for a call to startBugReport(…) (I/12/2-14).
This runs all the various commands (shown in I/12/2-4), with the output
directed to /data/user_de/0/com.android.shell/files/bugreports,
so that they are readable by the shell user.
The interested reader may want to follow the flow of this using
bdsm(j) (specifying call acitivty requestBugReport).
If using service, note that AIDL numbering is inconsistent across
Android versions.
After Table 4/4-7, (mAppProfiler), added:
AMS also offers
[set/clear]ApplicationStartInfoCompleteListener(listener,
userId) to get callbacks on application startup. In Android 15.0
these are renamed to [add/remove]…, as mo
re than one listener can be added.
Updates for ART 111/OAT 225: New JniStubSection in ART header. GOOGL must've been reading my book and now the diagram on the ART header is simpler, since section ordering in file matches the section ordering in the header :-)
Extension of "Finding Objects in Memory" experiment to show arbitrary
object finding, not just Strings (in line with experiment from The debugging book)
Chapter 8: No changes. Nihil Sub Sole Novum
.
Android 13 Changes for Vol II (again, running list, not yet in book)
@TODO: AMS's internal services (cacheinfo, processinfo, etc maybe need
their own detail? Not sure about that since they're really so basic)
@JavaDerive(equals = true, toString = true) AIDL annotation -
e.g. Identity.aid l
Chapter 5: Added update_lock (really minor service, but.. in the interest
of catching 'em all..)
IPMS:
request[Package]Checksums (renamed),
getLaunchIntentSenderForPackage
make[Provider/Uid]Visible
grantImplicitAccess(removed)
canPackageQuery/code>
boolean runBackgroundDexoptJob(in List packageNames); - removed
String getSdkSandboxPackageName();
Running list of Android 14 changes
(The tables look a lot better in book, with shading for 13.0 and 14.0 rows..)
Volume I:
10
String[] getUpdatableNames(apexName)
14.0:
Get all instances updatable by the apexName
(Google preaches Stable AIDL, but their own AIDLs aren’t so stable, after
all..)
11/2.7. - TARE: Service responds to getEnabledMode() as of 14