1*9e94795aSAndroid Build Coastguard Worker#!/bin/bash 2*9e94795aSAndroid Build Coastguard Worker 3*9e94795aSAndroid Build Coastguard Workerset -ex 4*9e94795aSAndroid Build Coastguard Worker 5*9e94795aSAndroid Build Coastguard Workerfunction apply_droidstubs_hack() { 6*9e94795aSAndroid Build Coastguard Worker if ! grep -q 'STOPSHIP: RESTORE THIS LOGIC WHEN DECLARING "REL" BUILD' "$top/build/soong/java/droidstubs.go" ; then 7*9e94795aSAndroid Build Coastguard Worker local build_soong_git_root="$(readlink -f $top/build/soong)" 8*9e94795aSAndroid Build Coastguard Worker patch --strip=1 --no-backup-if-mismatch --directory="$build_soong_git_root" --input=../../build/make/tools/finalization/build_soong_java_droidstubs.go.apply_hack.diff 9*9e94795aSAndroid Build Coastguard Worker fi 10*9e94795aSAndroid Build Coastguard Worker} 11*9e94795aSAndroid Build Coastguard Worker 12*9e94795aSAndroid Build Coastguard Workerfunction finalize_bionic_ndk() { 13*9e94795aSAndroid Build Coastguard Worker # Adding __ANDROID_API_<>__. 14*9e94795aSAndroid Build Coastguard Worker # If this hasn't done then it's not used and not really needed. Still, let's check and add this. 15*9e94795aSAndroid Build Coastguard Worker local api_level="$top/bionic/libc/include/android/api-level.h" 16*9e94795aSAndroid Build Coastguard Worker if ! grep -q "\__.*$((${FINAL_PLATFORM_SDK_VERSION}))" $api_level ; then 17*9e94795aSAndroid Build Coastguard Worker local tmpfile=$(mktemp /tmp/finalization.XXXXXX) 18*9e94795aSAndroid Build Coastguard Worker echo " 19*9e94795aSAndroid Build Coastguard Worker/** Names the \"${FINAL_PLATFORM_CODENAME:0:1}\" API level ($FINAL_PLATFORM_SDK_VERSION), for comparison against \`__ANDROID_API__\`. */ 20*9e94795aSAndroid Build Coastguard Worker#define __ANDROID_API_${FINAL_PLATFORM_CODENAME:0:1}__ $FINAL_PLATFORM_SDK_VERSION" > "$tmpfile" 21*9e94795aSAndroid Build Coastguard Worker 22*9e94795aSAndroid Build Coastguard Worker local api_level="$top/bionic/libc/include/android/api-level.h" 23*9e94795aSAndroid Build Coastguard Worker sed -i -e "/__.*$((${FINAL_PLATFORM_SDK_VERSION}-1))/r""$tmpfile" $api_level 24*9e94795aSAndroid Build Coastguard Worker 25*9e94795aSAndroid Build Coastguard Worker rm "$tmpfile" 26*9e94795aSAndroid Build Coastguard Worker fi 27*9e94795aSAndroid Build Coastguard Worker} 28*9e94795aSAndroid Build Coastguard Worker 29*9e94795aSAndroid Build Coastguard Workerfunction finalize_modules_utils() { 30*9e94795aSAndroid Build Coastguard Worker local shortCodename="${FINAL_PLATFORM_CODENAME:0:1}" 31*9e94795aSAndroid Build Coastguard Worker local methodPlaceholder="INSERT_NEW_AT_LEAST_${shortCodename}_METHOD_HERE" 32*9e94795aSAndroid Build Coastguard Worker 33*9e94795aSAndroid Build Coastguard Worker local tmpfile=$(mktemp /tmp/finalization.XXXXXX) 34*9e94795aSAndroid Build Coastguard Worker echo " /** Checks if the device is running on a release version of Android $FINAL_PLATFORM_CODENAME or newer */ 35*9e94795aSAndroid Build Coastguard Worker @ChecksSdkIntAtLeast(api = $FINAL_PLATFORM_SDK_VERSION /* BUILD_VERSION_CODES.$FINAL_PLATFORM_CODENAME */) 36*9e94795aSAndroid Build Coastguard Worker public static boolean isAtLeast${FINAL_PLATFORM_CODENAME:0:1}() { 37*9e94795aSAndroid Build Coastguard Worker return SDK_INT >= $FINAL_PLATFORM_SDK_VERSION || 38*9e94795aSAndroid Build Coastguard Worker (SDK_INT == $(($FINAL_PLATFORM_SDK_VERSION - 1)) && isAtLeastPreReleaseCodename(\"$FINAL_PLATFORM_CODENAME\")); 39*9e94795aSAndroid Build Coastguard Worker }" > "$tmpfile" 40*9e94795aSAndroid Build Coastguard Worker 41*9e94795aSAndroid Build Coastguard Worker local javaFuncRegex='\/\*\*[^{]*isAtLeast'"${shortCodename}"'() {[^{}]*}' 42*9e94795aSAndroid Build Coastguard Worker local javaFuncReplace="N;N;N;N;N;N;N;N; s/$javaFuncRegex/$methodPlaceholder/; /$javaFuncRegex/!{P;D};" 43*9e94795aSAndroid Build Coastguard Worker 44*9e94795aSAndroid Build Coastguard Worker local javaSdkLevel="$top/frameworks/libs/modules-utils/java/com/android/modules/utils/build/SdkLevel.java" 45*9e94795aSAndroid Build Coastguard Worker sed -i "$javaFuncReplace" $javaSdkLevel 46*9e94795aSAndroid Build Coastguard Worker 47*9e94795aSAndroid Build Coastguard Worker sed -i "/${methodPlaceholder}"'/{ 48*9e94795aSAndroid Build Coastguard Worker r '"$tmpfile"' 49*9e94795aSAndroid Build Coastguard Worker d}' $javaSdkLevel 50*9e94795aSAndroid Build Coastguard Worker 51*9e94795aSAndroid Build Coastguard Worker echo "// Checks if the device is running on release version of Android ${FINAL_PLATFORM_CODENAME:0:1} or newer. 52*9e94795aSAndroid Build Coastguard Workerinline bool IsAtLeast${FINAL_PLATFORM_CODENAME:0:1}() { 53*9e94795aSAndroid Build Coastguard Worker return android_get_device_api_level() >= $FINAL_PLATFORM_SDK_VERSION || 54*9e94795aSAndroid Build Coastguard Worker (android_get_device_api_level() == $(($FINAL_PLATFORM_SDK_VERSION - 1)) && 55*9e94795aSAndroid Build Coastguard Worker detail::IsAtLeastPreReleaseCodename(\"$FINAL_PLATFORM_CODENAME\")); 56*9e94795aSAndroid Build Coastguard Worker}" > "$tmpfile" 57*9e94795aSAndroid Build Coastguard Worker 58*9e94795aSAndroid Build Coastguard Worker local cppFuncRegex='\/\/[^{]*IsAtLeast'"${shortCodename}"'() {[^{}]*}' 59*9e94795aSAndroid Build Coastguard Worker local cppFuncReplace="N;N;N;N;N;N; s/$cppFuncRegex/$methodPlaceholder/; /$cppFuncRegex/!{P;D};" 60*9e94795aSAndroid Build Coastguard Worker 61*9e94795aSAndroid Build Coastguard Worker local cppSdkLevel="$top/frameworks/libs/modules-utils/build/include/android-modules-utils/sdk_level.h" 62*9e94795aSAndroid Build Coastguard Worker sed -i "$cppFuncReplace" $cppSdkLevel 63*9e94795aSAndroid Build Coastguard Worker sed -i "/${methodPlaceholder}"'/{ 64*9e94795aSAndroid Build Coastguard Worker r '"$tmpfile"' 65*9e94795aSAndroid Build Coastguard Worker d}' $cppSdkLevel 66*9e94795aSAndroid Build Coastguard Worker 67*9e94795aSAndroid Build Coastguard Worker rm "$tmpfile" 68*9e94795aSAndroid Build Coastguard Worker} 69*9e94795aSAndroid Build Coastguard Worker 70*9e94795aSAndroid Build Coastguard Workerfunction bumpSdkExtensionsVersion() { 71*9e94795aSAndroid Build Coastguard Worker local SDKEXT="packages/modules/SdkExtensions/" 72*9e94795aSAndroid Build Coastguard Worker 73*9e94795aSAndroid Build Coastguard Worker # This used to call bump_sdk.sh utility. 74*9e94795aSAndroid Build Coastguard Worker # However due to TS, we have to build the gen_sdk with a correct set of settings. 75*9e94795aSAndroid Build Coastguard Worker 76*9e94795aSAndroid Build Coastguard Worker # "$top/packages/modules/SdkExtensions/gen_sdk/bump_sdk.sh" ${FINAL_MAINLINE_EXTENSION} 77*9e94795aSAndroid Build Coastguard Worker # Leave the last commit as a set of modified files. 78*9e94795aSAndroid Build Coastguard Worker # The code to create a finalization topic will pick it up later. 79*9e94795aSAndroid Build Coastguard Worker # git -C ${SDKEXT} reset HEAD~1 80*9e94795aSAndroid Build Coastguard Worker 81*9e94795aSAndroid Build Coastguard Worker local sdk="${FINAL_MAINLINE_EXTENSION}" 82*9e94795aSAndroid Build Coastguard Worker local modules_arg= 83*9e94795aSAndroid Build Coastguard Worker 84*9e94795aSAndroid Build Coastguard Worker TARGET_PRODUCT=aosp_arm64 \ 85*9e94795aSAndroid Build Coastguard Worker TARGET_RELEASE=fina_1 \ 86*9e94795aSAndroid Build Coastguard Worker TARGET_BUILD_VARIANT=userdebug \ 87*9e94795aSAndroid Build Coastguard Worker DIST_DIR=out/dist \ 88*9e94795aSAndroid Build Coastguard Worker $top/build/soong/soong_ui.bash --make-mode --soong-only gen_sdk 89*9e94795aSAndroid Build Coastguard Worker 90*9e94795aSAndroid Build Coastguard Worker ANDROID_BUILD_TOP="$top" out/soong/host/linux-x86/bin/gen_sdk \ 91*9e94795aSAndroid Build Coastguard Worker --database ${SDKEXT}/gen_sdk/extensions_db.textpb \ 92*9e94795aSAndroid Build Coastguard Worker --action new_sdk \ 93*9e94795aSAndroid Build Coastguard Worker --sdk "$sdk" \ 94*9e94795aSAndroid Build Coastguard Worker $modules_arg 95*9e94795aSAndroid Build Coastguard Worker} 96*9e94795aSAndroid Build Coastguard Worker 97*9e94795aSAndroid Build Coastguard Workerfunction finalize_sdk_resources() { 98*9e94795aSAndroid Build Coastguard Worker local top="$(dirname "$0")"/../../../.. 99*9e94795aSAndroid Build Coastguard Worker source $top/build/make/tools/finalization/environment.sh 100*9e94795aSAndroid Build Coastguard Worker 101*9e94795aSAndroid Build Coastguard Worker local SDK_CODENAME="public static final int $FINAL_PLATFORM_CODENAME_JAVA = CUR_DEVELOPMENT;" 102*9e94795aSAndroid Build Coastguard Worker local SDK_VERSION="public static final int $FINAL_PLATFORM_CODENAME_JAVA = $FINAL_PLATFORM_SDK_VERSION;" 103*9e94795aSAndroid Build Coastguard Worker 104*9e94795aSAndroid Build Coastguard Worker # The full process can be found at (INTERNAL) go/android-sdk-finalization. 105*9e94795aSAndroid Build Coastguard Worker 106*9e94795aSAndroid Build Coastguard Worker # apply droidstubs hack to prevent tools from incrementing an API version 107*9e94795aSAndroid Build Coastguard Worker apply_droidstubs_hack 108*9e94795aSAndroid Build Coastguard Worker 109*9e94795aSAndroid Build Coastguard Worker # bionic/NDK 110*9e94795aSAndroid Build Coastguard Worker finalize_bionic_ndk 111*9e94795aSAndroid Build Coastguard Worker 112*9e94795aSAndroid Build Coastguard Worker # Finalize SDK 113*9e94795aSAndroid Build Coastguard Worker 114*9e94795aSAndroid Build Coastguard Worker # frameworks/libs/modules-utils 115*9e94795aSAndroid Build Coastguard Worker finalize_modules_utils 116*9e94795aSAndroid Build Coastguard Worker 117*9e94795aSAndroid Build Coastguard Worker # development/sdk 118*9e94795aSAndroid Build Coastguard Worker local platform_source="$top/development/sdk/platform_source.prop_template" 119*9e94795aSAndroid Build Coastguard Worker sed -i -e 's/Pkg\.Revision.*/Pkg\.Revision=1/g' $platform_source 120*9e94795aSAndroid Build Coastguard Worker local build_tools_source="$top/development/sdk/build_tools_source.prop_template" 121*9e94795aSAndroid Build Coastguard Worker sed -i -e 's/Pkg\.Revision.*/Pkg\.Revision=${PLATFORM_SDK_VERSION}.0.0/g' $build_tools_source 122*9e94795aSAndroid Build Coastguard Worker 123*9e94795aSAndroid Build Coastguard Worker # build/soong 124*9e94795aSAndroid Build Coastguard Worker local codename_version="\"${FINAL_PLATFORM_CODENAME}\": ${FINAL_PLATFORM_SDK_VERSION}" 125*9e94795aSAndroid Build Coastguard Worker if ! grep -q "$codename_version" "$top/build/soong/android/api_levels.go" ; then 126*9e94795aSAndroid Build Coastguard Worker sed -i -e "/:.*$((${FINAL_PLATFORM_SDK_VERSION}-1)),/a \\\t\t$codename_version," "$top/build/soong/android/api_levels.go" 127*9e94795aSAndroid Build Coastguard Worker fi 128*9e94795aSAndroid Build Coastguard Worker 129*9e94795aSAndroid Build Coastguard Worker # cts 130*9e94795aSAndroid Build Coastguard Worker if ! grep -q "${FINAL_PLATFORM_VERSION}" "$top/cts/tests/tests/os/assets/platform_releases.txt" ; then 131*9e94795aSAndroid Build Coastguard Worker echo ${FINAL_PLATFORM_VERSION} >> "$top/cts/tests/tests/os/assets/platform_releases.txt" 132*9e94795aSAndroid Build Coastguard Worker fi 133*9e94795aSAndroid Build Coastguard Worker if ! grep -q "$((${FINAL_PLATFORM_SDK_VERSION}-1)), ${FINAL_PLATFORM_VERSION}" "$top/cts/tests/tests/os/src/android/os/cts/BuildVersionTest.java" ; then 134*9e94795aSAndroid Build Coastguard Worker sed -i -e "s/.*EXPECTED_SDKS = List.of(.*$((${FINAL_PLATFORM_SDK_VERSION}-1))/&, $FINAL_PLATFORM_SDK_VERSION/" "$top/cts/tests/tests/os/src/android/os/cts/BuildVersionTest.java" 135*9e94795aSAndroid Build Coastguard Worker fi 136*9e94795aSAndroid Build Coastguard Worker 137*9e94795aSAndroid Build Coastguard Worker # libcore 138*9e94795aSAndroid Build Coastguard Worker sed -i "s%$SDK_CODENAME%$SDK_VERSION%g" "$top/libcore/dalvik/src/main/java/dalvik/annotation/compat/VersionCodes.java" 139*9e94795aSAndroid Build Coastguard Worker 140*9e94795aSAndroid Build Coastguard Worker # platform_testing 141*9e94795aSAndroid Build Coastguard Worker local version_codes="$top/platform_testing/libraries/compatibility-common-util/src/com/android/compatibility/common/util/VersionCodes.java" 142*9e94795aSAndroid Build Coastguard Worker sed -i -e "/=.*$((${FINAL_PLATFORM_SDK_VERSION}-1));/a \\ ${SDK_VERSION}" $version_codes 143*9e94795aSAndroid Build Coastguard Worker 144*9e94795aSAndroid Build Coastguard Worker # tools/platform-compat 145*9e94795aSAndroid Build Coastguard Worker local class2nonsdklist="$top/tools/platform-compat/java/com/android/class2nonsdklist/Class2NonSdkList.java" 146*9e94795aSAndroid Build Coastguard Worker if ! grep -q "\.*map.put($((${FINAL_PLATFORM_SDK_VERSION}))" $class2nonsdklist ; then 147*9e94795aSAndroid Build Coastguard Worker local sdk_version="map.put(${FINAL_PLATFORM_SDK_VERSION}, FLAG_UNSUPPORTED);" 148*9e94795aSAndroid Build Coastguard Worker sed -i -e "/.*map.put($((${FINAL_PLATFORM_SDK_VERSION}-1))/a \\ ${sdk_version}" $class2nonsdklist 149*9e94795aSAndroid Build Coastguard Worker fi 150*9e94795aSAndroid Build Coastguard Worker 151*9e94795aSAndroid Build Coastguard Worker # Finalize resources 152*9e94795aSAndroid Build Coastguard Worker "$top/frameworks/base/tools/aapt2/tools/finalize_res.py" \ 153*9e94795aSAndroid Build Coastguard Worker "$top/frameworks/base/core/res/res/values/public-staging.xml" \ 154*9e94795aSAndroid Build Coastguard Worker "$top/frameworks/base/core/res/res/values/public-final.xml" 155*9e94795aSAndroid Build Coastguard Worker 156*9e94795aSAndroid Build Coastguard Worker # frameworks/base 157*9e94795aSAndroid Build Coastguard Worker sed -i "s%$SDK_CODENAME%$SDK_VERSION%g" "$top/frameworks/base/core/java/android/os/Build.java" 158*9e94795aSAndroid Build Coastguard Worker sed -i -e "/=.*$((${FINAL_PLATFORM_SDK_VERSION}-1)),/a \\ SDK_${FINAL_PLATFORM_CODENAME_JAVA} = ${FINAL_PLATFORM_SDK_VERSION}," "$top/frameworks/base/tools/aapt/SdkConstants.h" 159*9e94795aSAndroid Build Coastguard Worker sed -i -e "/=.*$((${FINAL_PLATFORM_SDK_VERSION}-1)),/a \\ SDK_${FINAL_PLATFORM_CODENAME_JAVA} = ${FINAL_PLATFORM_SDK_VERSION}," "$top/frameworks/base/tools/aapt2/SdkConstants.h" 160*9e94795aSAndroid Build Coastguard Worker 161*9e94795aSAndroid Build Coastguard Worker # Bump Mainline SDK extension version. 162*9e94795aSAndroid Build Coastguard Worker bumpSdkExtensionsVersion 163*9e94795aSAndroid Build Coastguard Worker 164*9e94795aSAndroid Build Coastguard Worker # target to build SDK 165*9e94795aSAndroid Build Coastguard Worker local sdk_m="$top/build/soong/soong_ui.bash --make-mode TARGET_PRODUCT=aosp_arm64 TARGET_RELEASE=fina_1 TARGET_BUILD_VARIANT=userdebug DIST_DIR=out/dist" 166*9e94795aSAndroid Build Coastguard Worker 167*9e94795aSAndroid Build Coastguard Worker # Force update current.txt 168*9e94795aSAndroid Build Coastguard Worker $sdk_m clobber 169*9e94795aSAndroid Build Coastguard Worker $sdk_m update-api 170*9e94795aSAndroid Build Coastguard Worker} 171*9e94795aSAndroid Build Coastguard Worker 172*9e94795aSAndroid Build Coastguard Workerfinalize_sdk_resources 173*9e94795aSAndroid Build Coastguard Worker 174