Add generate_ml_bundle.sh.

This is based on Anton's script and modified to support
framework-permission-s.

Bug: 177884752
Test: manual
Test: prebuilts/sdk/update_prebuilts/update_prebuilts.py -f 31 7126175
Test: packages/modules/common/generate_ml_bundle.sh ../../../ ../../../ 31
Change-Id: Ie32aa820b3589d68545c1a11c098dbd3be4f92ff
diff --git a/generate_ml_bundle.sh b/generate_ml_bundle.sh
new file mode 100755
index 0000000..05aaea8
--- /dev/null
+++ b/generate_ml_bundle.sh
@@ -0,0 +1,125 @@
+#!/bin/bash -ex
+
+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: true,
+    shared_library: ${shared_library},
+    apex_available: [
+        "${apexname}",
+        "test_${apexname}",
+    ],
+    public: {
+        jars: ["sdk_library/public/${modulename}.jar"],
+        current_api: "sdk_library/public/${modulename}.txt",
+        removed_api: "sdk_library/public/${modulename}-removed.txt",
+        sdk_version: "module_current",
+    },
+    system: {
+        jars: ["sdk_library/system/${modulename}.jar"],
+        current_api: "sdk_library/system/${modulename}.txt",
+        removed_api: "sdk_library/system/${modulename}-removed.txt",
+        sdk_version: "module_current",
+    },
+    module_lib: {
+        jars: ["sdk_library/module_lib/${modulename}.jar"],
+        current_api: "sdk_library/module_lib/${modulename}.txt",
+        removed_api: "sdk_library/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"
+
+    rm -rf "${destdir}/sdk_library"
+    mkdir -p "${destdir}/sdk_library/"{public,system,module_lib}
+    for libname in $libnames; do
+        cp public/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/sdk_library/public"
+        cp system/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/sdk_library/system"
+        cp module-lib/{${libname}.jar,api/${libname}.txt,api/${libname}-removed.txt} "${destdir}/sdk_library/module_lib"
+    done
+}
+
+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}/vendor/unbundled_google/modules/"
+        case "$1" in
+            "IKEPrebuilt") echo "IpSecGooglePrebuilt";;
+            "MediaFrameworkPrebuilt") echo "MediaFrameworkPrebuilt";;
+            "MediaProviderPrebuilt") echo "MediaProviderGooglePrebuilt";;
+            "PermissionControllerPrebuilt") echo "PermissionControllerPrebuilt";;
+            "SdkExtensionsPrebuilt") echo "SdkExtensionsGooglePrebuilt";;
+            "StatsdPrebuilt") echo "StatsdGooglePrebuilt";;
+            "TetheringPrebuilt") echo "TetheringGooglePrebuilt";;
+            "WiFiPrebuilt") echo "WifiGooglePrebuilt";;
+            *) 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