Merge "DO NOT MERGE - Merge Android 13"
This commit is contained in:
commit
6ef4fae229
17 changed files with 256 additions and 457 deletions
|
@ -454,6 +454,7 @@ func CheckAvailableForApex(what string, apex_available []string) bool {
|
||||||
}
|
}
|
||||||
return InList(what, apex_available) ||
|
return InList(what, apex_available) ||
|
||||||
(what != AvailableToPlatform && InList(AvailableToAnyApex, apex_available)) ||
|
(what != AvailableToPlatform && InList(AvailableToAnyApex, apex_available)) ||
|
||||||
|
(what == "com.android.btservices" && InList("com.android.bluetooth", apex_available)) ||
|
||||||
(strings.HasPrefix(what, "com.android.gki.") && InList(AvailableToGkiApex, apex_available))
|
(strings.HasPrefix(what, "com.android.gki.") && InList(AvailableToGkiApex, apex_available))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -307,24 +307,25 @@ var finalCodenamesMapKey = NewOnceKey("FinalCodenamesMap")
|
||||||
func getFinalCodenamesMap(config Config) map[string]int {
|
func getFinalCodenamesMap(config Config) map[string]int {
|
||||||
return config.Once(finalCodenamesMapKey, func() interface{} {
|
return config.Once(finalCodenamesMapKey, func() interface{} {
|
||||||
apiLevelsMap := map[string]int{
|
apiLevelsMap := map[string]int{
|
||||||
"G": 9,
|
"G": 9,
|
||||||
"I": 14,
|
"I": 14,
|
||||||
"J": 16,
|
"J": 16,
|
||||||
"J-MR1": 17,
|
"J-MR1": 17,
|
||||||
"J-MR2": 18,
|
"J-MR2": 18,
|
||||||
"K": 19,
|
"K": 19,
|
||||||
"L": 21,
|
"L": 21,
|
||||||
"L-MR1": 22,
|
"L-MR1": 22,
|
||||||
"M": 23,
|
"M": 23,
|
||||||
"N": 24,
|
"N": 24,
|
||||||
"N-MR1": 25,
|
"N-MR1": 25,
|
||||||
"O": 26,
|
"O": 26,
|
||||||
"O-MR1": 27,
|
"O-MR1": 27,
|
||||||
"P": 28,
|
"P": 28,
|
||||||
"Q": 29,
|
"Q": 29,
|
||||||
"R": 30,
|
"R": 30,
|
||||||
"S": 31,
|
"S": 31,
|
||||||
"S-V2": 32,
|
"S-V2": 32,
|
||||||
|
"Tiramisu": 33,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Differentiate "current" and "future".
|
// TODO: Differentiate "current" and "future".
|
||||||
|
@ -351,24 +352,25 @@ var apiLevelsMapKey = NewOnceKey("ApiLevelsMap")
|
||||||
func GetApiLevelsMap(config Config) map[string]int {
|
func GetApiLevelsMap(config Config) map[string]int {
|
||||||
return config.Once(apiLevelsMapKey, func() interface{} {
|
return config.Once(apiLevelsMapKey, func() interface{} {
|
||||||
apiLevelsMap := map[string]int{
|
apiLevelsMap := map[string]int{
|
||||||
"G": 9,
|
"G": 9,
|
||||||
"I": 14,
|
"I": 14,
|
||||||
"J": 16,
|
"J": 16,
|
||||||
"J-MR1": 17,
|
"J-MR1": 17,
|
||||||
"J-MR2": 18,
|
"J-MR2": 18,
|
||||||
"K": 19,
|
"K": 19,
|
||||||
"L": 21,
|
"L": 21,
|
||||||
"L-MR1": 22,
|
"L-MR1": 22,
|
||||||
"M": 23,
|
"M": 23,
|
||||||
"N": 24,
|
"N": 24,
|
||||||
"N-MR1": 25,
|
"N-MR1": 25,
|
||||||
"O": 26,
|
"O": 26,
|
||||||
"O-MR1": 27,
|
"O-MR1": 27,
|
||||||
"P": 28,
|
"P": 28,
|
||||||
"Q": 29,
|
"Q": 29,
|
||||||
"R": 30,
|
"R": 30,
|
||||||
"S": 31,
|
"S": 31,
|
||||||
"S-V2": 32,
|
"S-V2": 32,
|
||||||
|
"Tiramisu": 33,
|
||||||
}
|
}
|
||||||
for i, codename := range config.PlatformVersionActiveCodenames() {
|
for i, codename := range config.PlatformVersionActiveCodenames() {
|
||||||
apiLevelsMap[codename] = previewAPILevelBase + i
|
apiLevelsMap[codename] = previewAPILevelBase + i
|
||||||
|
|
328
apex/apex.go
328
apex/apex.go
|
@ -3015,34 +3015,39 @@ func makeApexAvailableBaseline() map[string][]string {
|
||||||
//
|
//
|
||||||
// Module separator
|
// Module separator
|
||||||
//
|
//
|
||||||
m["com.android.bluetooth"] = []string{
|
m["com.android.btservices"] = []string{
|
||||||
"android.hardware.audio.common@5.0",
|
"bluetooth-protos-lite",
|
||||||
"android.hardware.bluetooth.a2dp@1.0",
|
"internal_include_headers",
|
||||||
"android.hardware.bluetooth.audio@2.0",
|
"libaudio-a2dp-hw-utils",
|
||||||
"android.hardware.bluetooth@1.0",
|
"libaudio-hearing-aid-hw-utils",
|
||||||
"android.hardware.bluetooth@1.1",
|
"libbluetooth",
|
||||||
"android.hardware.graphics.bufferqueue@1.0",
|
"libbluetooth-types",
|
||||||
"android.hardware.graphics.bufferqueue@2.0",
|
"libbluetooth-types-header",
|
||||||
"android.hardware.graphics.common@1.0",
|
"libbluetooth_gd",
|
||||||
"android.hardware.graphics.common@1.1",
|
"libbluetooth_headers",
|
||||||
"android.hardware.graphics.common@1.2",
|
"libbluetooth_jni",
|
||||||
"android.hardware.media@1.0",
|
"libbt-audio-hal-interface",
|
||||||
"android.hidl.safe_union@1.0",
|
"libbt-bta",
|
||||||
"android.hidl.token@1.0",
|
"libbt-common",
|
||||||
"android.hidl.token@1.0-utils",
|
"libbt-hci",
|
||||||
"avrcp-target-service",
|
"libbt-platform-protos-lite",
|
||||||
"avrcp_headers",
|
"libbt-protos-lite",
|
||||||
|
"libbt-sbc-decoder",
|
||||||
|
"libbt-sbc-encoder",
|
||||||
|
"libbt-stack",
|
||||||
|
"libbt-utils",
|
||||||
|
"libbtcore",
|
||||||
|
"libbtdevice",
|
||||||
|
"libbte",
|
||||||
|
"libbtif",
|
||||||
|
"libchrome",
|
||||||
|
}
|
||||||
|
//
|
||||||
|
// Module separator
|
||||||
|
//
|
||||||
|
m["com.android.bluetooth"] = []string{
|
||||||
"bluetooth-protos-lite",
|
"bluetooth-protos-lite",
|
||||||
"bluetooth.mapsapi",
|
|
||||||
"com.android.vcard",
|
|
||||||
"dnsresolver_aidl_interface-V2-java",
|
|
||||||
"ipmemorystore-aidl-interfaces-V5-java",
|
|
||||||
"ipmemorystore-aidl-interfaces-java",
|
|
||||||
"internal_include_headers",
|
"internal_include_headers",
|
||||||
"lib-bt-packets",
|
|
||||||
"lib-bt-packets-avrcp",
|
|
||||||
"lib-bt-packets-base",
|
|
||||||
"libFraunhoferAAC",
|
|
||||||
"libaudio-a2dp-hw-utils",
|
"libaudio-a2dp-hw-utils",
|
||||||
"libaudio-hearing-aid-hw-utils",
|
"libaudio-hearing-aid-hw-utils",
|
||||||
"libbluetooth",
|
"libbluetooth",
|
||||||
|
@ -3066,28 +3071,6 @@ func makeApexAvailableBaseline() map[string][]string {
|
||||||
"libbte",
|
"libbte",
|
||||||
"libbtif",
|
"libbtif",
|
||||||
"libchrome",
|
"libchrome",
|
||||||
"libevent",
|
|
||||||
"libfmq",
|
|
||||||
"libg722codec",
|
|
||||||
"libgui_headers",
|
|
||||||
"libmedia_headers",
|
|
||||||
"libmodpb64",
|
|
||||||
"libosi",
|
|
||||||
"libstagefright_foundation_headers",
|
|
||||||
"libstagefright_headers",
|
|
||||||
"libstatslog",
|
|
||||||
"libstatssocket",
|
|
||||||
"libtinyxml2",
|
|
||||||
"libudrv-uipc",
|
|
||||||
"libz",
|
|
||||||
"media_plugin_headers",
|
|
||||||
"net-utils-services-common",
|
|
||||||
"netd_aidl_interface-unstable-java",
|
|
||||||
"netd_event_listener_interface-java",
|
|
||||||
"netlink-client",
|
|
||||||
"networkstack-client",
|
|
||||||
"sap-api-java-static",
|
|
||||||
"services.net",
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Module separator
|
// Module separator
|
||||||
|
@ -3127,258 +3110,13 @@ func makeApexAvailableBaseline() map[string][]string {
|
||||||
// Module separator
|
// Module separator
|
||||||
//
|
//
|
||||||
m["com.android.media"] = []string{
|
m["com.android.media"] = []string{
|
||||||
"android.frameworks.bufferhub@1.0",
|
// empty
|
||||||
"android.hardware.cas.native@1.0",
|
|
||||||
"android.hardware.cas@1.0",
|
|
||||||
"android.hardware.configstore-utils",
|
|
||||||
"android.hardware.configstore@1.0",
|
|
||||||
"android.hardware.configstore@1.1",
|
|
||||||
"android.hardware.graphics.allocator@2.0",
|
|
||||||
"android.hardware.graphics.allocator@3.0",
|
|
||||||
"android.hardware.graphics.bufferqueue@1.0",
|
|
||||||
"android.hardware.graphics.bufferqueue@2.0",
|
|
||||||
"android.hardware.graphics.common@1.0",
|
|
||||||
"android.hardware.graphics.common@1.1",
|
|
||||||
"android.hardware.graphics.common@1.2",
|
|
||||||
"android.hardware.graphics.mapper@2.0",
|
|
||||||
"android.hardware.graphics.mapper@2.1",
|
|
||||||
"android.hardware.graphics.mapper@3.0",
|
|
||||||
"android.hardware.media.omx@1.0",
|
|
||||||
"android.hardware.media@1.0",
|
|
||||||
"android.hidl.allocator@1.0",
|
|
||||||
"android.hidl.memory.token@1.0",
|
|
||||||
"android.hidl.memory@1.0",
|
|
||||||
"android.hidl.token@1.0",
|
|
||||||
"android.hidl.token@1.0-utils",
|
|
||||||
"bionic_libc_platform_headers",
|
|
||||||
"exoplayer2-extractor",
|
|
||||||
"exoplayer2-extractor-annotation-stubs",
|
|
||||||
"gl_headers",
|
|
||||||
"jsr305",
|
|
||||||
"libEGL",
|
|
||||||
"libEGL_blobCache",
|
|
||||||
"libEGL_getProcAddress",
|
|
||||||
"libFLAC",
|
|
||||||
"libFLAC-config",
|
|
||||||
"libFLAC-headers",
|
|
||||||
"libGLESv2",
|
|
||||||
"libaacextractor",
|
|
||||||
"libamrextractor",
|
|
||||||
"libarect",
|
|
||||||
"libaudio_system_headers",
|
|
||||||
"libaudioclient",
|
|
||||||
"libaudioclient_headers",
|
|
||||||
"libaudiofoundation",
|
|
||||||
"libaudiofoundation_headers",
|
|
||||||
"libaudiomanager",
|
|
||||||
"libaudiopolicy",
|
|
||||||
"libaudioutils",
|
|
||||||
"libaudioutils_fixedfft",
|
|
||||||
"libbluetooth-types-header",
|
|
||||||
"libbufferhub",
|
|
||||||
"libbufferhub_headers",
|
|
||||||
"libbufferhubqueue",
|
|
||||||
"libc_malloc_debug_backtrace",
|
|
||||||
"libcamera_client",
|
|
||||||
"libcamera_metadata",
|
|
||||||
"libdvr_headers",
|
|
||||||
"libexpat",
|
|
||||||
"libfifo",
|
|
||||||
"libflacextractor",
|
|
||||||
"libgrallocusage",
|
|
||||||
"libgraphicsenv",
|
|
||||||
"libgui",
|
|
||||||
"libgui_headers",
|
|
||||||
"libhardware_headers",
|
|
||||||
"libinput",
|
|
||||||
"liblzma",
|
|
||||||
"libmath",
|
|
||||||
"libmedia",
|
|
||||||
"libmedia_codeclist",
|
|
||||||
"libmedia_headers",
|
|
||||||
"libmedia_helper",
|
|
||||||
"libmedia_helper_headers",
|
|
||||||
"libmedia_midiiowrapper",
|
|
||||||
"libmedia_omx",
|
|
||||||
"libmediautils",
|
|
||||||
"libmidiextractor",
|
|
||||||
"libmkvextractor",
|
|
||||||
"libmp3extractor",
|
|
||||||
"libmp4extractor",
|
|
||||||
"libmpeg2extractor",
|
|
||||||
"libnativebase_headers",
|
|
||||||
"libnativewindow_headers",
|
|
||||||
"libnblog",
|
|
||||||
"liboggextractor",
|
|
||||||
"libpackagelistparser",
|
|
||||||
"libpdx",
|
|
||||||
"libpdx_default_transport",
|
|
||||||
"libpdx_headers",
|
|
||||||
"libpdx_uds",
|
|
||||||
"libprocinfo",
|
|
||||||
"libspeexresampler",
|
|
||||||
"libspeexresampler",
|
|
||||||
"libstagefright_esds",
|
|
||||||
"libstagefright_flacdec",
|
|
||||||
"libstagefright_flacdec",
|
|
||||||
"libstagefright_foundation",
|
|
||||||
"libstagefright_foundation_headers",
|
|
||||||
"libstagefright_foundation_without_imemory",
|
|
||||||
"libstagefright_headers",
|
|
||||||
"libstagefright_id3",
|
|
||||||
"libstagefright_metadatautils",
|
|
||||||
"libstagefright_mpeg2extractor",
|
|
||||||
"libstagefright_mpeg2support",
|
|
||||||
"libui",
|
|
||||||
"libui_headers",
|
|
||||||
"libunwindstack",
|
|
||||||
"libvibrator",
|
|
||||||
"libvorbisidec",
|
|
||||||
"libwavextractor",
|
|
||||||
"libwebm",
|
|
||||||
"media_ndk_headers",
|
|
||||||
"media_plugin_headers",
|
|
||||||
"updatable-media",
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Module separator
|
// Module separator
|
||||||
//
|
//
|
||||||
m["com.android.media.swcodec"] = []string{
|
m["com.android.media.swcodec"] = []string{
|
||||||
"android.frameworks.bufferhub@1.0",
|
// empty
|
||||||
"android.hardware.common-ndk_platform",
|
|
||||||
"android.hardware.configstore-utils",
|
|
||||||
"android.hardware.configstore@1.0",
|
|
||||||
"android.hardware.configstore@1.1",
|
|
||||||
"android.hardware.graphics.allocator@2.0",
|
|
||||||
"android.hardware.graphics.allocator@3.0",
|
|
||||||
"android.hardware.graphics.allocator@4.0",
|
|
||||||
"android.hardware.graphics.bufferqueue@1.0",
|
|
||||||
"android.hardware.graphics.bufferqueue@2.0",
|
|
||||||
"android.hardware.graphics.common-ndk_platform",
|
|
||||||
"android.hardware.graphics.common@1.0",
|
|
||||||
"android.hardware.graphics.common@1.1",
|
|
||||||
"android.hardware.graphics.common@1.2",
|
|
||||||
"android.hardware.graphics.mapper@2.0",
|
|
||||||
"android.hardware.graphics.mapper@2.1",
|
|
||||||
"android.hardware.graphics.mapper@3.0",
|
|
||||||
"android.hardware.graphics.mapper@4.0",
|
|
||||||
"android.hardware.media.bufferpool@2.0",
|
|
||||||
"android.hardware.media.c2@1.0",
|
|
||||||
"android.hardware.media.c2@1.1",
|
|
||||||
"android.hardware.media.omx@1.0",
|
|
||||||
"android.hardware.media@1.0",
|
|
||||||
"android.hardware.media@1.0",
|
|
||||||
"android.hidl.memory.token@1.0",
|
|
||||||
"android.hidl.memory@1.0",
|
|
||||||
"android.hidl.safe_union@1.0",
|
|
||||||
"android.hidl.token@1.0",
|
|
||||||
"android.hidl.token@1.0-utils",
|
|
||||||
"libEGL",
|
|
||||||
"libFLAC",
|
|
||||||
"libFLAC-config",
|
|
||||||
"libFLAC-headers",
|
|
||||||
"libFraunhoferAAC",
|
|
||||||
"libLibGuiProperties",
|
|
||||||
"libarect",
|
|
||||||
"libaudio_system_headers",
|
|
||||||
"libaudioutils",
|
|
||||||
"libaudioutils",
|
|
||||||
"libaudioutils_fixedfft",
|
|
||||||
"libavcdec",
|
|
||||||
"libavcenc",
|
|
||||||
"libavservices_minijail",
|
|
||||||
"libavservices_minijail",
|
|
||||||
"libbinderthreadstateutils",
|
|
||||||
"libbluetooth-types-header",
|
|
||||||
"libbufferhub_headers",
|
|
||||||
"libcodec2",
|
|
||||||
"libcodec2_headers",
|
|
||||||
"libcodec2_hidl@1.0",
|
|
||||||
"libcodec2_hidl@1.1",
|
|
||||||
"libcodec2_internal",
|
|
||||||
"libcodec2_soft_aacdec",
|
|
||||||
"libcodec2_soft_aacenc",
|
|
||||||
"libcodec2_soft_amrnbdec",
|
|
||||||
"libcodec2_soft_amrnbenc",
|
|
||||||
"libcodec2_soft_amrwbdec",
|
|
||||||
"libcodec2_soft_amrwbenc",
|
|
||||||
"libcodec2_soft_av1dec_gav1",
|
|
||||||
"libcodec2_soft_avcdec",
|
|
||||||
"libcodec2_soft_avcenc",
|
|
||||||
"libcodec2_soft_common",
|
|
||||||
"libcodec2_soft_flacdec",
|
|
||||||
"libcodec2_soft_flacenc",
|
|
||||||
"libcodec2_soft_g711alawdec",
|
|
||||||
"libcodec2_soft_g711mlawdec",
|
|
||||||
"libcodec2_soft_gsmdec",
|
|
||||||
"libcodec2_soft_h263dec",
|
|
||||||
"libcodec2_soft_h263enc",
|
|
||||||
"libcodec2_soft_hevcdec",
|
|
||||||
"libcodec2_soft_hevcenc",
|
|
||||||
"libcodec2_soft_mp3dec",
|
|
||||||
"libcodec2_soft_mpeg2dec",
|
|
||||||
"libcodec2_soft_mpeg4dec",
|
|
||||||
"libcodec2_soft_mpeg4enc",
|
|
||||||
"libcodec2_soft_opusdec",
|
|
||||||
"libcodec2_soft_opusenc",
|
|
||||||
"libcodec2_soft_rawdec",
|
|
||||||
"libcodec2_soft_vorbisdec",
|
|
||||||
"libcodec2_soft_vp8dec",
|
|
||||||
"libcodec2_soft_vp8enc",
|
|
||||||
"libcodec2_soft_vp9dec",
|
|
||||||
"libcodec2_soft_vp9enc",
|
|
||||||
"libcodec2_vndk",
|
|
||||||
"libdvr_headers",
|
|
||||||
"libfmq",
|
|
||||||
"libfmq",
|
|
||||||
"libgav1",
|
|
||||||
"libgralloctypes",
|
|
||||||
"libgrallocusage",
|
|
||||||
"libgraphicsenv",
|
|
||||||
"libgsm",
|
|
||||||
"libgui_bufferqueue_static",
|
|
||||||
"libgui_headers",
|
|
||||||
"libhardware",
|
|
||||||
"libhardware_headers",
|
|
||||||
"libhevcdec",
|
|
||||||
"libhevcenc",
|
|
||||||
"libion",
|
|
||||||
"libjpeg",
|
|
||||||
"liblzma",
|
|
||||||
"libmath",
|
|
||||||
"libmedia_codecserviceregistrant",
|
|
||||||
"libmedia_headers",
|
|
||||||
"libmpeg2dec",
|
|
||||||
"libnativebase_headers",
|
|
||||||
"libnativewindow_headers",
|
|
||||||
"libpdx_headers",
|
|
||||||
"libscudo_wrapper",
|
|
||||||
"libsfplugin_ccodec_utils",
|
|
||||||
"libspeexresampler",
|
|
||||||
"libstagefright_amrnb_common",
|
|
||||||
"libstagefright_amrnbdec",
|
|
||||||
"libstagefright_amrnbenc",
|
|
||||||
"libstagefright_amrwbdec",
|
|
||||||
"libstagefright_amrwbenc",
|
|
||||||
"libstagefright_bufferpool@2.0.1",
|
|
||||||
"libstagefright_enc_common",
|
|
||||||
"libstagefright_flacdec",
|
|
||||||
"libstagefright_foundation",
|
|
||||||
"libstagefright_foundation_headers",
|
|
||||||
"libstagefright_headers",
|
|
||||||
"libstagefright_m4vh263dec",
|
|
||||||
"libstagefright_m4vh263enc",
|
|
||||||
"libstagefright_mp3dec",
|
|
||||||
"libui",
|
|
||||||
"libui_headers",
|
|
||||||
"libunwindstack",
|
|
||||||
"libvorbisidec",
|
|
||||||
"libvpx",
|
|
||||||
"libyuv",
|
|
||||||
"libyuv_static",
|
|
||||||
"media_ndk_headers",
|
|
||||||
"media_plugin_headers",
|
|
||||||
"mediaswcodec",
|
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// Module separator
|
// Module separator
|
||||||
|
|
|
@ -24,7 +24,6 @@ var PrepareForTestWithApexBuildComponents = android.GroupFixturePreparers(
|
||||||
android.MockFS{
|
android.MockFS{
|
||||||
// Needed by apex.
|
// Needed by apex.
|
||||||
"system/core/rootdir/etc/public.libraries.android.txt": nil,
|
"system/core/rootdir/etc/public.libraries.android.txt": nil,
|
||||||
"build/soong/scripts/gen_java_usedby_apex.sh": nil,
|
|
||||||
"build/soong/scripts/gen_ndk_backedby_apex.sh": nil,
|
"build/soong/scripts/gen_ndk_backedby_apex.sh": nil,
|
||||||
// Needed by prebuilt_apex.
|
// Needed by prebuilt_apex.
|
||||||
"build/soong/scripts/unpack-prebuilt-apex.sh": nil,
|
"build/soong/scripts/unpack-prebuilt-apex.sh": nil,
|
||||||
|
|
|
@ -702,10 +702,8 @@ func transformSourceToObj(ctx ModuleContext, subdir string, srcFiles, noTidySrcs
|
||||||
sAbiDumpFile := android.ObjPathWithExt(ctx, subdir, srcFile, "sdump")
|
sAbiDumpFile := android.ObjPathWithExt(ctx, subdir, srcFile, "sdump")
|
||||||
sAbiDumpFiles = append(sAbiDumpFiles, sAbiDumpFile)
|
sAbiDumpFiles = append(sAbiDumpFiles, sAbiDumpFile)
|
||||||
|
|
||||||
|
// TODO(b/226497964): dumpRule = sAbiDumpRE if USE_RBE and RBE_ABI_DUMPER are true.
|
||||||
dumpRule := sAbiDump
|
dumpRule := sAbiDump
|
||||||
if ctx.Config().UseRBE() && ctx.Config().IsEnvTrue("RBE_ABI_DUMPER") {
|
|
||||||
dumpRule = sAbiDumpRE
|
|
||||||
}
|
|
||||||
ctx.Build(pctx, android.BuildParams{
|
ctx.Build(pctx, android.BuildParams{
|
||||||
Rule: dumpRule,
|
Rule: dumpRule,
|
||||||
Description: "header-abi-dumper " + srcFile.Rel(),
|
Description: "header-abi-dumper " + srcFile.Rel(),
|
||||||
|
|
|
@ -419,7 +419,15 @@ func (app *AndroidApp) AndroidMkEntries() []android.AndroidMkEntries {
|
||||||
entries.SetOptionalPaths("LOCAL_SOONG_LINT_REPORTS", app.linter.reports)
|
entries.SetOptionalPaths("LOCAL_SOONG_LINT_REPORTS", app.linter.reports)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}
|
ExtraFooters: []android.AndroidMkExtraFootersFunc{
|
||||||
|
func(w io.Writer, name, prefix, moduleDir string) {
|
||||||
|
if app.javaApiUsedByOutputFile.String() != "" {
|
||||||
|
fmt.Fprintf(w, "$(call dist-for-goals,%s,%s:%s/$(notdir %s))\n",
|
||||||
|
app.installApkName, app.javaApiUsedByOutputFile.String(), "java_apis_used_by_apex", app.javaApiUsedByOutputFile.String())
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidApp) getOverriddenPackages() []string {
|
func (a *AndroidApp) getOverriddenPackages() []string {
|
||||||
|
|
13
java/app.go
13
java/app.go
|
@ -117,6 +117,9 @@ type overridableAppProperties struct {
|
||||||
// Name of the signing certificate lineage file or filegroup module.
|
// Name of the signing certificate lineage file or filegroup module.
|
||||||
Lineage *string `android:"path"`
|
Lineage *string `android:"path"`
|
||||||
|
|
||||||
|
// For overriding the --rotation-min-sdk-version property of apksig
|
||||||
|
RotationMinSdkVersion *string
|
||||||
|
|
||||||
// the package name of this app. The package name in the manifest file is used if one was not given.
|
// the package name of this app. The package name in the manifest file is used if one was not given.
|
||||||
Package_name *string
|
Package_name *string
|
||||||
|
|
||||||
|
@ -165,6 +168,8 @@ type AndroidApp struct {
|
||||||
overriddenManifestPackageName string
|
overriddenManifestPackageName string
|
||||||
|
|
||||||
android.ApexBundleDepsInfo
|
android.ApexBundleDepsInfo
|
||||||
|
|
||||||
|
javaApiUsedByOutputFile android.ModuleOutPath
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidApp) IsInstallable() bool {
|
func (a *AndroidApp) IsInstallable() bool {
|
||||||
|
@ -273,6 +278,7 @@ func (a *AndroidTestHelperApp) GenerateAndroidBuildActions(ctx android.ModuleCon
|
||||||
func (a *AndroidApp) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
func (a *AndroidApp) GenerateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
a.checkAppSdkVersions(ctx)
|
a.checkAppSdkVersions(ctx)
|
||||||
a.generateAndroidBuildActions(ctx)
|
a.generateAndroidBuildActions(ctx)
|
||||||
|
a.generateJavaUsedByApex(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *AndroidApp) checkAppSdkVersions(ctx android.ModuleContext) {
|
func (a *AndroidApp) checkAppSdkVersions(ctx android.ModuleContext) {
|
||||||
|
@ -661,7 +667,10 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
if lineage := String(a.overridableAppProperties.Lineage); lineage != "" {
|
if lineage := String(a.overridableAppProperties.Lineage); lineage != "" {
|
||||||
lineageFile = android.PathForModuleSrc(ctx, lineage)
|
lineageFile = android.PathForModuleSrc(ctx, lineage)
|
||||||
}
|
}
|
||||||
CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps, v4SignatureFile, lineageFile)
|
|
||||||
|
rotationMinSdkVersion := String(a.overridableAppProperties.RotationMinSdkVersion)
|
||||||
|
|
||||||
|
CreateAndSignAppPackage(ctx, packageFile, a.exportPackage, jniJarFile, dexJarFile, certificates, apkDeps, v4SignatureFile, lineageFile, rotationMinSdkVersion)
|
||||||
a.outputFile = packageFile
|
a.outputFile = packageFile
|
||||||
if v4SigningRequested {
|
if v4SigningRequested {
|
||||||
a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile)
|
a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile)
|
||||||
|
@ -690,7 +699,7 @@ func (a *AndroidApp) generateAndroidBuildActions(ctx android.ModuleContext) {
|
||||||
if v4SigningRequested {
|
if v4SigningRequested {
|
||||||
v4SignatureFile = android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk.idsig")
|
v4SignatureFile = android.PathForModuleOut(ctx, a.installApkName+"_"+split.suffix+".apk.idsig")
|
||||||
}
|
}
|
||||||
CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps, v4SignatureFile, lineageFile)
|
CreateAndSignAppPackage(ctx, packageFile, split.path, nil, nil, certificates, apkDeps, v4SignatureFile, lineageFile, rotationMinSdkVersion)
|
||||||
a.extraOutputFiles = append(a.extraOutputFiles, packageFile)
|
a.extraOutputFiles = append(a.extraOutputFiles, packageFile)
|
||||||
if v4SigningRequested {
|
if v4SigningRequested {
|
||||||
a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile)
|
a.extraOutputFiles = append(a.extraOutputFiles, v4SignatureFile)
|
||||||
|
|
|
@ -52,7 +52,7 @@ var combineApk = pctx.AndroidStaticRule("combineApk",
|
||||||
})
|
})
|
||||||
|
|
||||||
func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.WritablePath,
|
func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.WritablePath,
|
||||||
packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths, v4SignatureFile android.WritablePath, lineageFile android.Path) {
|
packageFile, jniJarFile, dexJarFile android.Path, certificates []Certificate, deps android.Paths, v4SignatureFile android.WritablePath, lineageFile android.Path, rotationMinSdkVersion string) {
|
||||||
|
|
||||||
unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk"
|
unsignedApkName := strings.TrimSuffix(outputFile.Base(), ".apk") + "-unsigned.apk"
|
||||||
unsignedApk := android.PathForModuleOut(ctx, unsignedApkName)
|
unsignedApk := android.PathForModuleOut(ctx, unsignedApkName)
|
||||||
|
@ -73,10 +73,10 @@ func CreateAndSignAppPackage(ctx android.ModuleContext, outputFile android.Writa
|
||||||
Implicits: deps,
|
Implicits: deps,
|
||||||
})
|
})
|
||||||
|
|
||||||
SignAppPackage(ctx, outputFile, unsignedApk, certificates, v4SignatureFile, lineageFile)
|
SignAppPackage(ctx, outputFile, unsignedApk, certificates, v4SignatureFile, lineageFile, rotationMinSdkVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate, v4SignatureFile android.WritablePath, lineageFile android.Path) {
|
func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, unsignedApk android.Path, certificates []Certificate, v4SignatureFile android.WritablePath, lineageFile android.Path, rotationMinSdkVersion string) {
|
||||||
|
|
||||||
var certificateArgs []string
|
var certificateArgs []string
|
||||||
var deps android.Paths
|
var deps android.Paths
|
||||||
|
@ -97,6 +97,10 @@ func SignAppPackage(ctx android.ModuleContext, signedApk android.WritablePath, u
|
||||||
deps = append(deps, lineageFile)
|
deps = append(deps, lineageFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if rotationMinSdkVersion != "" {
|
||||||
|
flags = append(flags, "--rotation-min-sdk-version", rotationMinSdkVersion)
|
||||||
|
}
|
||||||
|
|
||||||
rule := Signapk
|
rule := Signapk
|
||||||
args := map[string]string{
|
args := map[string]string{
|
||||||
"certificates": strings.Join(certificateArgs, " "),
|
"certificates": strings.Join(certificateArgs, " "),
|
||||||
|
@ -267,6 +271,18 @@ func TransformJniLibsToJar(
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *AndroidApp) generateJavaUsedByApex(ctx android.ModuleContext) {
|
||||||
|
javaApiUsedByOutputFile := android.PathForModuleOut(ctx, a.installApkName+"_using.xml")
|
||||||
|
javaUsedByRule := android.NewRuleBuilder(pctx, ctx)
|
||||||
|
javaUsedByRule.Command().
|
||||||
|
Tool(android.PathForSource(ctx, "build/soong/scripts/gen_java_usedby_apex.sh")).
|
||||||
|
BuiltTool("dexdeps").
|
||||||
|
Output(javaApiUsedByOutputFile).
|
||||||
|
Input(a.Library.Module.outputFile)
|
||||||
|
javaUsedByRule.Build("java_usedby_list", "Generate Java APIs used by Apex")
|
||||||
|
a.javaApiUsedByOutputFile = javaApiUsedByOutputFile
|
||||||
|
}
|
||||||
|
|
||||||
func targetToJniDir(target android.Target) string {
|
func targetToJniDir(target android.Target) string {
|
||||||
return filepath.Join("lib", target.Arch.Abi[0])
|
return filepath.Join("lib", target.Arch.Abi[0])
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,9 @@ type AndroidAppImportProperties struct {
|
||||||
// Name of the signing certificate lineage file or filegroup module.
|
// Name of the signing certificate lineage file or filegroup module.
|
||||||
Lineage *string `android:"path"`
|
Lineage *string `android:"path"`
|
||||||
|
|
||||||
|
// For overriding the --rotation-min-sdk-version property of apksig
|
||||||
|
RotationMinSdkVersion *string
|
||||||
|
|
||||||
// Sign with the default system dev certificate. Must be used judiciously. Most imported apps
|
// Sign with the default system dev certificate. Must be used judiciously. Most imported apps
|
||||||
// need to either specify a specific certificate or be presigned.
|
// need to either specify a specific certificate or be presigned.
|
||||||
Default_dev_cert *bool
|
Default_dev_cert *bool
|
||||||
|
@ -333,7 +336,10 @@ func (a *AndroidAppImport) generateAndroidBuildActions(ctx android.ModuleContext
|
||||||
if lineage := String(a.properties.Lineage); lineage != "" {
|
if lineage := String(a.properties.Lineage); lineage != "" {
|
||||||
lineageFile = android.PathForModuleSrc(ctx, lineage)
|
lineageFile = android.PathForModuleSrc(ctx, lineage)
|
||||||
}
|
}
|
||||||
SignAppPackage(ctx, signed, jnisUncompressed, certificates, nil, lineageFile)
|
|
||||||
|
rotationMinSdkVersion := String(a.properties.RotationMinSdkVersion)
|
||||||
|
|
||||||
|
SignAppPackage(ctx, signed, jnisUncompressed, certificates, nil, lineageFile, rotationMinSdkVersion)
|
||||||
a.outputFile = signed
|
a.outputFile = signed
|
||||||
} else {
|
} else {
|
||||||
alignedApk := android.PathForModuleOut(ctx, "zip-aligned", apkFilename)
|
alignedApk := android.PathForModuleOut(ctx, "zip-aligned", apkFilename)
|
||||||
|
|
|
@ -129,6 +129,7 @@ func TestAndroidAppImport_SigningLineage(t *testing.T) {
|
||||||
certificate: "platform",
|
certificate: "platform",
|
||||||
additional_certificates: [":additional_certificate"],
|
additional_certificates: [":additional_certificate"],
|
||||||
lineage: "lineage.bin",
|
lineage: "lineage.bin",
|
||||||
|
rotationMinSdkVersion: "32",
|
||||||
}
|
}
|
||||||
|
|
||||||
android_app_certificate {
|
android_app_certificate {
|
||||||
|
@ -148,11 +149,12 @@ func TestAndroidAppImport_SigningLineage(t *testing.T) {
|
||||||
if expected != certificatesFlag {
|
if expected != certificatesFlag {
|
||||||
t.Errorf("Incorrect certificates flags, expected: %q, got: %q", expected, certificatesFlag)
|
t.Errorf("Incorrect certificates flags, expected: %q, got: %q", expected, certificatesFlag)
|
||||||
}
|
}
|
||||||
// Check cert signing lineage flag.
|
|
||||||
signingFlag := signedApk.Args["flags"]
|
// Check cert signing flags.
|
||||||
expected = "--lineage lineage.bin"
|
actualCertSigningFlags := signedApk.Args["flags"]
|
||||||
if expected != signingFlag {
|
expectedCertSigningFlags := "--lineage lineage.bin --rotation-min-sdk-version 32"
|
||||||
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expected, signingFlag)
|
if expectedCertSigningFlags != actualCertSigningFlags {
|
||||||
|
t.Errorf("Incorrect signing flags, expected: %q, got: %q", expectedCertSigningFlags, actualCertSigningFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
rule := variant.Rule("genProvenanceMetaData")
|
rule := variant.Rule("genProvenanceMetaData")
|
||||||
|
|
205
java/app_test.go
205
java/app_test.go
|
@ -1488,11 +1488,11 @@ func TestJNISDK(t *testing.T) {
|
||||||
|
|
||||||
func TestCertificates(t *testing.T) {
|
func TestCertificates(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
bp string
|
bp string
|
||||||
certificateOverride string
|
certificateOverride string
|
||||||
expectedLineage string
|
expectedCertSigningFlags string
|
||||||
expectedCertificate string
|
expectedCertificate string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "default",
|
name: "default",
|
||||||
|
@ -1503,9 +1503,9 @@ func TestCertificates(t *testing.T) {
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
certificateOverride: "",
|
certificateOverride: "",
|
||||||
expectedLineage: "",
|
expectedCertSigningFlags: "",
|
||||||
expectedCertificate: "build/make/target/product/security/testkey.x509.pem build/make/target/product/security/testkey.pk8",
|
expectedCertificate: "build/make/target/product/security/testkey.x509.pem build/make/target/product/security/testkey.pk8",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "module certificate property",
|
name: "module certificate property",
|
||||||
|
@ -1522,9 +1522,9 @@ func TestCertificates(t *testing.T) {
|
||||||
certificate: "cert/new_cert",
|
certificate: "cert/new_cert",
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
certificateOverride: "",
|
certificateOverride: "",
|
||||||
expectedLineage: "",
|
expectedCertSigningFlags: "",
|
||||||
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "path certificate property",
|
name: "path certificate property",
|
||||||
|
@ -1536,9 +1536,9 @@ func TestCertificates(t *testing.T) {
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
certificateOverride: "",
|
certificateOverride: "",
|
||||||
expectedLineage: "",
|
expectedCertSigningFlags: "",
|
||||||
expectedCertificate: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
expectedCertificate: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "certificate overrides",
|
name: "certificate overrides",
|
||||||
|
@ -1555,18 +1555,19 @@ func TestCertificates(t *testing.T) {
|
||||||
certificate: "cert/new_cert",
|
certificate: "cert/new_cert",
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
certificateOverride: "foo:new_certificate",
|
certificateOverride: "foo:new_certificate",
|
||||||
expectedLineage: "",
|
expectedCertSigningFlags: "",
|
||||||
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "certificate lineage",
|
name: "certificate signing flags",
|
||||||
bp: `
|
bp: `
|
||||||
android_app {
|
android_app {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
srcs: ["a.java"],
|
srcs: ["a.java"],
|
||||||
certificate: ":new_certificate",
|
certificate: ":new_certificate",
|
||||||
lineage: "lineage.bin",
|
lineage: "lineage.bin",
|
||||||
|
rotationMinSdkVersion: "32",
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1575,18 +1576,19 @@ func TestCertificates(t *testing.T) {
|
||||||
certificate: "cert/new_cert",
|
certificate: "cert/new_cert",
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
certificateOverride: "",
|
certificateOverride: "",
|
||||||
expectedLineage: "--lineage lineage.bin",
|
expectedCertSigningFlags: "--lineage lineage.bin --rotation-min-sdk-version 32",
|
||||||
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "lineage from filegroup",
|
name: "cert signing flags from filegroup",
|
||||||
bp: `
|
bp: `
|
||||||
android_app {
|
android_app {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
srcs: ["a.java"],
|
srcs: ["a.java"],
|
||||||
certificate: ":new_certificate",
|
certificate: ":new_certificate",
|
||||||
lineage: ":lineage_bin",
|
lineage: ":lineage_bin",
|
||||||
|
rotationMinSdkVersion: "32",
|
||||||
sdk_version: "current",
|
sdk_version: "current",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1600,9 +1602,9 @@ func TestCertificates(t *testing.T) {
|
||||||
srcs: ["lineage.bin"],
|
srcs: ["lineage.bin"],
|
||||||
}
|
}
|
||||||
`,
|
`,
|
||||||
certificateOverride: "",
|
certificateOverride: "",
|
||||||
expectedLineage: "--lineage lineage.bin",
|
expectedCertSigningFlags: "--lineage lineage.bin --rotation-min-sdk-version 32",
|
||||||
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
expectedCertificate: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1623,8 +1625,8 @@ func TestCertificates(t *testing.T) {
|
||||||
signCertificateFlags := signapk.Args["certificates"]
|
signCertificateFlags := signapk.Args["certificates"]
|
||||||
android.AssertStringEquals(t, "certificates flags", test.expectedCertificate, signCertificateFlags)
|
android.AssertStringEquals(t, "certificates flags", test.expectedCertificate, signCertificateFlags)
|
||||||
|
|
||||||
signFlags := signapk.Args["flags"]
|
certSigningFlags := signapk.Args["flags"]
|
||||||
android.AssertStringEquals(t, "signing flags", test.expectedLineage, signFlags)
|
android.AssertStringEquals(t, "cert signing flags", test.expectedCertSigningFlags, certSigningFlags)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1819,6 +1821,7 @@ func TestOverrideAndroidApp(t *testing.T) {
|
||||||
base: "foo",
|
base: "foo",
|
||||||
certificate: ":new_certificate",
|
certificate: ":new_certificate",
|
||||||
lineage: "lineage.bin",
|
lineage: "lineage.bin",
|
||||||
|
rotationMinSdkVersion: "32",
|
||||||
logging_parent: "bah",
|
logging_parent: "bah",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1864,89 +1867,89 @@ func TestOverrideAndroidApp(t *testing.T) {
|
||||||
`)
|
`)
|
||||||
|
|
||||||
expectedVariants := []struct {
|
expectedVariants := []struct {
|
||||||
name string
|
name string
|
||||||
moduleName string
|
moduleName string
|
||||||
variantName string
|
variantName string
|
||||||
apkName string
|
apkName string
|
||||||
apkPath string
|
apkPath string
|
||||||
certFlag string
|
certFlag string
|
||||||
lineageFlag string
|
certSigningFlags string
|
||||||
overrides []string
|
overrides []string
|
||||||
packageFlag string
|
packageFlag string
|
||||||
renameResources bool
|
renameResources bool
|
||||||
logging_parent string
|
logging_parent string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "foo",
|
name: "foo",
|
||||||
moduleName: "foo",
|
moduleName: "foo",
|
||||||
variantName: "android_common",
|
variantName: "android_common",
|
||||||
apkPath: "out/soong/target/product/test_device/system/app/foo/foo.apk",
|
apkPath: "out/soong/target/product/test_device/system/app/foo/foo.apk",
|
||||||
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
||||||
lineageFlag: "",
|
certSigningFlags: "",
|
||||||
overrides: []string{"qux"},
|
overrides: []string{"qux"},
|
||||||
packageFlag: "",
|
packageFlag: "",
|
||||||
renameResources: false,
|
renameResources: false,
|
||||||
logging_parent: "",
|
logging_parent: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "foo",
|
name: "foo",
|
||||||
moduleName: "bar",
|
moduleName: "bar",
|
||||||
variantName: "android_common_bar",
|
variantName: "android_common_bar",
|
||||||
apkPath: "out/soong/target/product/test_device/system/app/bar/bar.apk",
|
apkPath: "out/soong/target/product/test_device/system/app/bar/bar.apk",
|
||||||
certFlag: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
certFlag: "cert/new_cert.x509.pem cert/new_cert.pk8",
|
||||||
lineageFlag: "--lineage lineage.bin",
|
certSigningFlags: "--lineage lineage.bin --rotation-min-sdk-version 32",
|
||||||
overrides: []string{"qux", "foo"},
|
overrides: []string{"qux", "foo"},
|
||||||
packageFlag: "",
|
packageFlag: "",
|
||||||
renameResources: false,
|
renameResources: false,
|
||||||
logging_parent: "bah",
|
logging_parent: "bah",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "foo",
|
name: "foo",
|
||||||
moduleName: "baz",
|
moduleName: "baz",
|
||||||
variantName: "android_common_baz",
|
variantName: "android_common_baz",
|
||||||
apkPath: "out/soong/target/product/test_device/system/app/baz/baz.apk",
|
apkPath: "out/soong/target/product/test_device/system/app/baz/baz.apk",
|
||||||
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
||||||
lineageFlag: "",
|
certSigningFlags: "",
|
||||||
overrides: []string{"qux", "foo"},
|
overrides: []string{"qux", "foo"},
|
||||||
packageFlag: "org.dandroid.bp",
|
packageFlag: "org.dandroid.bp",
|
||||||
renameResources: true,
|
renameResources: true,
|
||||||
logging_parent: "",
|
logging_parent: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "foo",
|
name: "foo",
|
||||||
moduleName: "baz_no_rename_resources",
|
moduleName: "baz_no_rename_resources",
|
||||||
variantName: "android_common_baz_no_rename_resources",
|
variantName: "android_common_baz_no_rename_resources",
|
||||||
apkPath: "out/soong/target/product/test_device/system/app/baz_no_rename_resources/baz_no_rename_resources.apk",
|
apkPath: "out/soong/target/product/test_device/system/app/baz_no_rename_resources/baz_no_rename_resources.apk",
|
||||||
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
||||||
lineageFlag: "",
|
certSigningFlags: "",
|
||||||
overrides: []string{"qux", "foo"},
|
overrides: []string{"qux", "foo"},
|
||||||
packageFlag: "org.dandroid.bp",
|
packageFlag: "org.dandroid.bp",
|
||||||
renameResources: false,
|
renameResources: false,
|
||||||
logging_parent: "",
|
logging_parent: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "foo_no_rename_resources",
|
name: "foo_no_rename_resources",
|
||||||
moduleName: "baz_base_no_rename_resources",
|
moduleName: "baz_base_no_rename_resources",
|
||||||
variantName: "android_common_baz_base_no_rename_resources",
|
variantName: "android_common_baz_base_no_rename_resources",
|
||||||
apkPath: "out/soong/target/product/test_device/system/app/baz_base_no_rename_resources/baz_base_no_rename_resources.apk",
|
apkPath: "out/soong/target/product/test_device/system/app/baz_base_no_rename_resources/baz_base_no_rename_resources.apk",
|
||||||
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
||||||
lineageFlag: "",
|
certSigningFlags: "",
|
||||||
overrides: []string{"qux", "foo_no_rename_resources"},
|
overrides: []string{"qux", "foo_no_rename_resources"},
|
||||||
packageFlag: "org.dandroid.bp",
|
packageFlag: "org.dandroid.bp",
|
||||||
renameResources: false,
|
renameResources: false,
|
||||||
logging_parent: "",
|
logging_parent: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "foo_no_rename_resources",
|
name: "foo_no_rename_resources",
|
||||||
moduleName: "baz_override_base_rename_resources",
|
moduleName: "baz_override_base_rename_resources",
|
||||||
variantName: "android_common_baz_override_base_rename_resources",
|
variantName: "android_common_baz_override_base_rename_resources",
|
||||||
apkPath: "out/soong/target/product/test_device/system/app/baz_override_base_rename_resources/baz_override_base_rename_resources.apk",
|
apkPath: "out/soong/target/product/test_device/system/app/baz_override_base_rename_resources/baz_override_base_rename_resources.apk",
|
||||||
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
certFlag: "build/make/target/product/security/expiredkey.x509.pem build/make/target/product/security/expiredkey.pk8",
|
||||||
lineageFlag: "",
|
certSigningFlags: "",
|
||||||
overrides: []string{"qux", "foo_no_rename_resources"},
|
overrides: []string{"qux", "foo_no_rename_resources"},
|
||||||
packageFlag: "org.dandroid.bp",
|
packageFlag: "org.dandroid.bp",
|
||||||
renameResources: true,
|
renameResources: true,
|
||||||
logging_parent: "",
|
logging_parent: "",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, expected := range expectedVariants {
|
for _, expected := range expectedVariants {
|
||||||
|
@ -1960,9 +1963,9 @@ func TestOverrideAndroidApp(t *testing.T) {
|
||||||
certFlag := signapk.Args["certificates"]
|
certFlag := signapk.Args["certificates"]
|
||||||
android.AssertStringEquals(t, "certificates flags", expected.certFlag, certFlag)
|
android.AssertStringEquals(t, "certificates flags", expected.certFlag, certFlag)
|
||||||
|
|
||||||
// Check the lineage flags
|
// Check the cert signing flags
|
||||||
lineageFlag := signapk.Args["flags"]
|
certSigningFlags := signapk.Args["flags"]
|
||||||
android.AssertStringEquals(t, "signing flags", expected.lineageFlag, lineageFlag)
|
android.AssertStringEquals(t, "cert signing flags", expected.certSigningFlags, certSigningFlags)
|
||||||
|
|
||||||
// Check if the overrides field values are correctly aggregated.
|
// Check if the overrides field values are correctly aggregated.
|
||||||
mod := variant.Module().(*AndroidApp)
|
mod := variant.Module().(*AndroidApp)
|
||||||
|
|
|
@ -723,6 +723,10 @@ func (b *BootclasspathFragmentModule) configuredJars(ctx android.ModuleContext)
|
||||||
} else if global.ApexBootJars.Len() != 0 && !android.IsModuleInVersionedSdk(ctx.Module()) {
|
} else if global.ApexBootJars.Len() != 0 && !android.IsModuleInVersionedSdk(ctx.Module()) {
|
||||||
unknown = android.RemoveListFromList(unknown, b.properties.Coverage.Contents)
|
unknown = android.RemoveListFromList(unknown, b.properties.Coverage.Contents)
|
||||||
_, unknown = android.RemoveFromList("core-icu4j", unknown)
|
_, unknown = android.RemoveFromList("core-icu4j", unknown)
|
||||||
|
// This module only exists in car products.
|
||||||
|
// So ignore it even if it is not in PRODUCT_APEX_BOOT_JARS.
|
||||||
|
// TODO(b/202896428): Add better way to handle this.
|
||||||
|
_, unknown = android.RemoveFromList("android.car-module", unknown)
|
||||||
if len(unknown) > 0 {
|
if len(unknown) > 0 {
|
||||||
ctx.ModuleErrorf("%s in contents must also be declared in PRODUCT_APEX_BOOT_JARS", unknown)
|
ctx.ModuleErrorf("%s in contents must also be declared in PRODUCT_APEX_BOOT_JARS", unknown)
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,14 +131,14 @@ func configuredJarListToClasspathJars(ctx android.ModuleContext, configuredJars
|
||||||
// TODO(208456999): instead of mapping "current" to latest, min_sdk_version should never be set to "current"
|
// TODO(208456999): instead of mapping "current" to latest, min_sdk_version should never be set to "current"
|
||||||
if s.minSdkVersion.Specified() {
|
if s.minSdkVersion.Specified() {
|
||||||
if s.minSdkVersion.ApiLevel.IsCurrent() {
|
if s.minSdkVersion.ApiLevel.IsCurrent() {
|
||||||
jar.minSdkVersion = ctx.Config().LatestPreviewApiLevel().String()
|
jar.minSdkVersion = ctx.Config().DefaultAppTargetSdk(ctx).String()
|
||||||
} else {
|
} else {
|
||||||
jar.minSdkVersion = s.minSdkVersion.ApiLevel.String()
|
jar.minSdkVersion = s.minSdkVersion.ApiLevel.String()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if s.maxSdkVersion.Specified() {
|
if s.maxSdkVersion.Specified() {
|
||||||
if s.maxSdkVersion.ApiLevel.IsCurrent() {
|
if s.maxSdkVersion.ApiLevel.IsCurrent() {
|
||||||
jar.maxSdkVersion = ctx.Config().LatestPreviewApiLevel().String()
|
jar.maxSdkVersion = ctx.Config().DefaultAppTargetSdk(ctx).String()
|
||||||
} else {
|
} else {
|
||||||
jar.maxSdkVersion = s.maxSdkVersion.ApiLevel.String()
|
jar.maxSdkVersion = s.maxSdkVersion.ApiLevel.String()
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,9 @@ type RuntimeResourceOverlayProperties struct {
|
||||||
// Name of the signing certificate lineage file.
|
// Name of the signing certificate lineage file.
|
||||||
Lineage *string
|
Lineage *string
|
||||||
|
|
||||||
|
// For overriding the --rotation-min-sdk-version property of apksig
|
||||||
|
RotationMinSdkVersion *string
|
||||||
|
|
||||||
// optional theme name. If specified, the overlay package will be applied
|
// optional theme name. If specified, the overlay package will be applied
|
||||||
// only when the ro.boot.vendor.overlay.theme system property is set to the same value.
|
// only when the ro.boot.vendor.overlay.theme system property is set to the same value.
|
||||||
Theme *string
|
Theme *string
|
||||||
|
@ -149,7 +152,10 @@ func (r *RuntimeResourceOverlay) GenerateAndroidBuildActions(ctx android.ModuleC
|
||||||
if lineage := String(r.properties.Lineage); lineage != "" {
|
if lineage := String(r.properties.Lineage); lineage != "" {
|
||||||
lineageFile = android.PathForModuleSrc(ctx, lineage)
|
lineageFile = android.PathForModuleSrc(ctx, lineage)
|
||||||
}
|
}
|
||||||
SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates, nil, lineageFile)
|
|
||||||
|
rotationMinSdkVersion := String(r.properties.RotationMinSdkVersion)
|
||||||
|
|
||||||
|
SignAppPackage(ctx, signed, r.aapt.exportPackage, certificates, nil, lineageFile, rotationMinSdkVersion)
|
||||||
r.certificate = certificates[0]
|
r.certificate = certificates[0]
|
||||||
|
|
||||||
r.outputFile = signed
|
r.outputFile = signed
|
||||||
|
|
|
@ -33,6 +33,7 @@ func TestRuntimeResourceOverlay(t *testing.T) {
|
||||||
name: "foo",
|
name: "foo",
|
||||||
certificate: "platform",
|
certificate: "platform",
|
||||||
lineage: "lineage.bin",
|
lineage: "lineage.bin",
|
||||||
|
rotationMinSdkVersion: "32",
|
||||||
product_specific: true,
|
product_specific: true,
|
||||||
static_libs: ["bar"],
|
static_libs: ["bar"],
|
||||||
resource_libs: ["baz"],
|
resource_libs: ["baz"],
|
||||||
|
@ -89,13 +90,14 @@ func TestRuntimeResourceOverlay(t *testing.T) {
|
||||||
t.Errorf("Resource lib flag %q missing in aapt2 link flags: %q", resourceLibFlag, aapt2Flags)
|
t.Errorf("Resource lib flag %q missing in aapt2 link flags: %q", resourceLibFlag, aapt2Flags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check cert signing flag.
|
// Check cert signing flags.
|
||||||
signedApk := m.Output("signed/foo.apk")
|
signedApk := m.Output("signed/foo.apk")
|
||||||
lineageFlag := signedApk.Args["flags"]
|
actualCertSigningFlags := signedApk.Args["flags"]
|
||||||
expectedLineageFlag := "--lineage lineage.bin"
|
expectedCertSigningFlags := "--lineage lineage.bin --rotation-min-sdk-version 32"
|
||||||
if expectedLineageFlag != lineageFlag {
|
if expectedCertSigningFlags != actualCertSigningFlags {
|
||||||
t.Errorf("Incorrect signing lineage flags, expected: %q, got: %q", expectedLineageFlag, lineageFlag)
|
t.Errorf("Incorrect cert signing flags, expected: %q, got: %q", expectedCertSigningFlags, actualCertSigningFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
signingFlag := signedApk.Args["certificates"]
|
signingFlag := signedApk.Args["certificates"]
|
||||||
expected := "build/make/target/product/security/platform.x509.pem build/make/target/product/security/platform.pk8"
|
expected := "build/make/target/product/security/platform.x509.pem build/make/target/product/security/platform.pk8"
|
||||||
if expected != signingFlag {
|
if expected != signingFlag {
|
||||||
|
|
|
@ -2700,7 +2700,10 @@ func formattedOptionalSdkLevelAttribute(ctx android.ModuleContext, attrName stri
|
||||||
`"current" is not an allowed value for this attribute`)
|
`"current" is not an allowed value for this attribute`)
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return formattedOptionalAttribute(attrName, value)
|
// "safeValue" is safe because it translates finalized codenames to a string
|
||||||
|
// with their SDK int.
|
||||||
|
safeValue := apiLevel.String()
|
||||||
|
return formattedOptionalAttribute(attrName, &safeValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
// formats an attribute for the xml permissions file if the value is not null
|
// formats an attribute for the xml permissions file if the value is not null
|
||||||
|
|
|
@ -54,6 +54,8 @@ var PrepareForTestWithJavaBuildComponents = android.GroupFixturePreparers(
|
||||||
"build/soong/java/lint_defaults.txt": nil,
|
"build/soong/java/lint_defaults.txt": nil,
|
||||||
// Needed for apps that do not provide their own.
|
// Needed for apps that do not provide their own.
|
||||||
"build/make/target/product/security": nil,
|
"build/make/target/product/security": nil,
|
||||||
|
// Required to generate Java used-by API coverage
|
||||||
|
"build/soong/scripts/gen_java_usedby_apex.sh": nil,
|
||||||
}.AddToFixture(),
|
}.AddToFixture(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue