| #!/bin/bash -ex |
| |
| # Usage: |
| # generate_ml_bundle.sh [args] source_tree dest_tree api_level |
| # |
| # Args: |
| # -p Sets prefer=true in generated java_sdk_library_import rules |
| # -a Also update artifects; default behaviour is just to generate build rules. |
| |
| PREFER=false |
| UPDATE_ARTIFACTS=false |
| while getopts "pa" opt; do |
| case ${opt} in |
| p ) PREFER=true;; |
| a ) UPDATE_ARTIFACTS=true;; |
| \? ) echo "Invalid option." |
| exit |
| ;; |
| esac |
| done |
| shift $((OPTIND -1)) |
| |
| SOURCE_TREE=$1 |
| DESTINATION_TREE=$2 |
| API_LEVEL=$3 |
| SOURCE_TREE_TYPE=$(test -e ${DESTINATION_TREE}/vendor/unbundled_google/modules && echo GOOGLE || echo PARTNER) |
| |
| function sdk_lib_bp() { |
| modulename=$1 |
| apexname=$2 |
| shared_library=$(test \( "$apexname" == com.android.ipsec \) -a \( "$API_LEVEL" -lt 31 \) && echo true || echo false) |
| cat << EOF |
| java_sdk_library_import { |
| name: "${modulename}", |
| owner: "google", |
| prefer: ${PREFER}, |
| shared_library: ${shared_library}, |
| apex_available: [ |
| "${apexname}", |
| "test_${apexname}", |
| ], |
| public: { |
| jars: ["current/public/${modulename}.jar"], |
| stub_srcs: ["current/public/${modulename}.srcjar"], |
| current_api: "current/public/${modulename}.txt", |
| removed_api: "current/public/${modulename}-removed.txt", |
| sdk_version: "module_current", |
| }, |
| system: { |
| jars: ["current/system/${modulename}.jar"], |
| stub_srcs: ["current/system/${modulename}.srcjar"], |
| current_api: "current/system/${modulename}.txt", |
| removed_api: "current/system/${modulename}-removed.txt", |
| sdk_version: "module_current", |
| }, |
| module_lib: { |
| jars: ["current/module_lib/${modulename}.jar"], |
| stub_srcs: ["current/module_lib/${modulename}.srcjar"], |
| current_api: "current/module_lib/${modulename}.txt", |
| removed_api: "current/module_lib/${modulename}-removed.txt", |
| sdk_version: "module_current", |
| }, |
| } |
| EOF |
| } |
| |
| function make_sdk_library() { |
| libnames=$1 |
| destdir=$2 |
| apexname=$3 |
| bp=${destdir}/Android.bp |
| |
| #test -e "$bp" |
| mkdir -p "$(dirname "$bp")" |
| |
| # Remove existing java_sdk_library_import and double newlines |
| existing_bp="$(sed -e '/java_sdk_library_import {/,/^}/d' "$bp" | tr -s \\n)" |
| echo "$existing_bp" > "$bp" |
| for libname in $libnames; do |
| echo >> "$bp" |
| echo "$(sdk_lib_bp ${libname} ${apexname})" | grep -v test_com.android.tethering >> "$bp" |
| done |
| #echo >> "$bp" |
| |
| if [ "${UPDATE_ARTIFACTS}" == "true" ] ; then |
| rm -rf "${destdir}/current" |
| mkdir -p "${destdir}/current/"{public,system,module_lib} |
| for libname in $libnames; do |
| cp public/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/current/public" |
| cp system/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/current/system" |
| cp module-lib/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/current/module_lib" |
| done |
| fi |
| } |
| |
| function copy_notices() { |
| destdir=$1 |
| apks=$(find $destdir -name '*.apks' | head -1) |
| if [[ -z "$apks" ]]; then |
| echo "no apks found in $destdir" >&2 |
| exit |
| fi |
| filename=$(zipinfo -1 "$apks" *.apex */base-master.apk | head -1) |
| # com.android.ipsec is not expected to have a LICENSE, so don't fail if it doesn't. |
| unzip -p "$apks" "$filename" | bsdtar -xOf- assets/NOTICE.html.gz > "${destdir}/NOTICE.html.gz" || test "$2" == "com.android.ipsec" |
| } |
| |
| function get_dest_dir() { |
| if [[ "$SOURCE_TREE_TYPE" == "PARTNER" ]]; then |
| echo "${DESTINATION_TREE}/vendor/partner_modules/${1}" |
| elif [[ "$SOURCE_TREE_TYPE" == "GOOGLE" ]]; then |
| echo -n "${DESTINATION_TREE}/prebuilts/module_sdk/" |
| case "$1" in |
| "IKEPrebuilt") echo "IPsec";; |
| "MediaFrameworkPrebuilt") echo "Media";; |
| "MediaProviderPrebuilt") echo "MediaProvider";; |
| "PermissionControllerPrebuilt") echo "Permission";; |
| "SdkExtensionsPrebuilt") echo "SdkExtensions";; |
| "StatsdPrebuilt") echo "StatsD";; |
| "TetheringPrebuilt") echo "Connectivity";; |
| "WiFiPrebuilt") echo "Wifi";; |
| *) exit 1;; |
| esac |
| else |
| # Unknown tree type |
| exit 2 |
| fi |
| #ConscryptPrebuilt ??? |
| } |
| |
| function setup_stub_prebuilts() { |
| destdir=$(get_dest_dir $2) |
| |
| make_sdk_library "$1" "$destdir" "$3" |
| #copy_notices "$destdir" "$3" |
| } |
| |
| cd "$SOURCE_TREE/prebuilts/sdk/$API_LEVEL" |
| setup_stub_prebuilts android.net.ipsec.ike IKEPrebuilt com.android.ipsec |
| setup_stub_prebuilts framework-media MediaFrameworkPrebuilt com.android.media |
| setup_stub_prebuilts framework-mediaprovider MediaProviderPrebuilt com.android.mediaprovider |
| if [[ "$API_LEVEL" -ge 31 ]]; then |
| setup_stub_prebuilts 'framework-permission framework-permission-s' PermissionControllerPrebuilt com.android.permission |
| else |
| setup_stub_prebuilts framework-permission PermissionControllerPrebuilt com.android.permission |
| fi |
| setup_stub_prebuilts framework-sdkextensions SdkExtensionsPrebuilt com.android.sdkext |
| setup_stub_prebuilts framework-statsd StatsdPrebuilt com.android.os.statsd |
| setup_stub_prebuilts framework-tethering TetheringPrebuilt com.android.tethering |
| setup_stub_prebuilts framework-wifi WiFiPrebuilt com.android.wifi |