Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4aeead4a authored by Yan Yan's avatar Yan Yan
Browse files

Conditionally remove VCN jars from non-updatable platform

When the build system flag RELEASE_MOVE_VCN_TO_MAINLINE is true,
VCN framework and service jars will be built into Tethering module.
Otherwise, VCN framework jar will be directly installed on the
device and the service jar will be included into the platform
services.jar

Bug: 375213246
Test: atest CtsVcnTestCases && atest FrameworksVcnTests; verified
      with the flag on and off
Flag: RELEASE_MOVE_VCN_TO_MAINLINE
Change-Id: If2651f1ede34220172c419f8bf4afb0fe09c0789
parent 1adb0dbc
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -29,10 +29,24 @@ aconfig_declarations {
    ],
}

// TODO: b/374174952 Remove this library when VCN modularization is done
java_aconfig_library {
    name: "android.net.vcn.flags-aconfig-java-export",
    aconfig_declarations: "android.net.vcn.flags-aconfig",
    mode: "exported",
    min_sdk_version: "35",
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
    apex_available: [
        "//apex_available:platform",
    ],
}

java_aconfig_library {
    name: "android.net.vcn.flags-aconfig-java",
    aconfig_declarations: "android.net.vcn.flags-aconfig",
    min_sdk_version: "35",
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
    apex_available: [
        "com.android.tethering",
    ],
}
+76 −22
Original line number Diff line number Diff line
@@ -32,9 +32,9 @@ filegroup {
}

java_defaults {
    name: "framework-connectivity-b-defaults",
    name: "framework-connectivity-b-defaults-base",
    sdk_version: "module_current",
    min_sdk_version: "35", // TODO: Make it Android 25Q2 when this is included in mainline

    defaults: ["framework-module-defaults"], // This is a boot jar

    srcs: [
@@ -44,14 +44,10 @@ java_defaults {

    libs: [
        "android.net.ipsec.ike.stubs.module_lib",
        "app-compat-annotations",
        "framework-wifi.stubs.module_lib",
        "unsupportedappusage",
    ],
    static_libs: [
        //TODO:375213246 Use a non-exported flag lib when VCN is in mainline
        "android.net.vcn.flags-aconfig-java-export",
    ],

    aidl: {
        include_dirs: [
            // For connectivity-framework classes such as Network.aidl, NetworkCapabilities.aidl
@@ -60,16 +56,83 @@ java_defaults {
    },
}

soong_config_module_type {
    name: "framework_connectivity_b_defaults_soong_config",
    module_type: "java_defaults",
    config_namespace: "ANDROID",
    bool_variables: [
        "is_vcn_in_mainline",
    ],
    properties: [
        "min_sdk_version",
        "static_libs",
        "apex_available",
    ],
}

framework_connectivity_b_defaults_soong_config {
    name: "framework-connectivity-b-defaults",
    defaults: [
        "framework-connectivity-b-defaults-base",
    ],
    soong_config_variables: {
        is_vcn_in_mainline: {
            //TODO: b/380155299 Make it Baklava when aidl tool can understand it
            min_sdk_version: "current",
            static_libs: ["android.net.vcn.flags-aconfig-java"],
            apex_available: ["com.android.tethering"],

            conditions_default: {
                min_sdk_version: "35",
                static_libs: ["android.net.vcn.flags-aconfig-java-export"],
                apex_available: ["//apex_available:platform"],
            },
        },
    },
}

soong_config_module_type {
    name: "framework_connectivity_b_java_sdk_library_defaults_soong_config",
    module_type: "java_defaults",
    config_namespace: "ANDROID",
    bool_variables: [
        "is_vcn_in_mainline",
    ],
    properties: [
        "aconfig_declarations",
        "jarjar_rules",
    ],
}

framework_connectivity_b_java_sdk_library_defaults_soong_config {
    name: "framework-connectivity-b-java-sdk-library-defaults",
    soong_config_variables: {
        is_vcn_in_mainline: {
            aconfig_declarations: ["android.net.vcn.flags-aconfig-java"],

            // TODO: b/375213246 Use the connectivity jarjar rule generator to create the
            // jarjar rules. In the end state, use "framework-connectivity-jarjar-rules"
            // after VCN code is moved to the Connectivity folder
            jarjar_rules: "framework-vcn-jarjar-rules.txt",

            conditions_default: {
                aconfig_declarations: ["android.net.vcn.flags-aconfig-java-export"],

                // Use "android.net.connectivity" as prefix would trigger
                // "Hidden API flags are inconsistent" build error
                jarjar_rules: "framework-vcn-jarjar-rules-platform.txt",
            },
        },
    },
}

java_sdk_library {
    name: "framework-connectivity-b",
    defaults: [
        "framework-connectivity-b-defaults",
        "framework-connectivity-b-java-sdk-library-defaults",
    ],

    //TODO: b/375213246 Use "framework-connectivity-jarjar-rules" when VCN is
    // in mainline
    jarjar_rules: "framework-vcn-jarjar-rules.txt",

    permitted_packages: [
        "android.net",
        "android.net.vcn",
@@ -92,11 +155,6 @@ java_sdk_library {
        "framework-connectivity-pre-jarjar",
    ],

    aconfig_declarations: [
        //TODO:375213246 Use a non-exported flag lib when VCN is in mainline
        "android.net.vcn.flags-aconfig-java-export",
    ],

    impl_library_visibility: [
        // Using for test only
        "//cts/tests/netlegacy22.api",
@@ -120,17 +178,13 @@ java_sdk_library {
        "//packages/modules/Wifi/service/tests/wifitests",
    ],

    apex_available: [
        // TODO: b/374174952 Remove it when VCN modularization is released
        "//apex_available:platform",

        "com.android.tethering",
    ],
    visibility: ["//packages/modules/Connectivity:__subpackages__"],
}

java_library {
    name: "framework-connectivity-b-pre-jarjar",
    defaults: ["framework-connectivity-b-defaults"],
    installable: false,
    libs: [
        "framework-connectivity-pre-jarjar",
    ],
+2 −0
Original line number Diff line number Diff line
rule android.net.vcn.persistablebundleutils.** android.net.vcn.module.repackaged.persistablebundleutils.@1
rule android.net.vcn.util.** android.net.vcn.module.repackaged.util.@1
 No newline at end of file
+2 −2
Original line number Diff line number Diff line
rule android.net.vcn.persistablebundleutils.** android.net.vcn.module.repackaged.persistablebundleutils.@1
rule android.net.vcn.util.** android.net.vcn.module.repackaged.util.@1
 No newline at end of file
rule android.net.vcn.persistablebundleutils.** android.net.connectivity.android.net.vcn.persistablebundleutils.@1
rule android.net.vcn.util.** android.net.connectivity.android.net.vcn.util.@1
 No newline at end of file
+10 −14
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@ import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.app.SystemServiceRegistry;
import android.compat.Compatibility;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.vcn.IVcnManagementService;
@@ -40,17 +38,15 @@ import android.os.SystemProperties;
@FlaggedApi(FLAG_MAINLINE_VCN_MODULE_API)
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
public final class ConnectivityFrameworkInitializerBaklava {
    /**
     * Starting with {@link VANILLA_ICE_CREAM}, Telephony feature flags (e.g. {@link
     * PackageManager#FEATURE_TELEPHONY_SUBSCRIPTION}) are being checked before returning managers
     * that depend on them. If the feature is missing, {@link Context#getSystemService} will return
     * null.
     *
     * <p>This change is specific to VcnManager.
     */
    @ChangeId
    @EnabledSince(targetSdkVersion = Build.VERSION_CODES.VANILLA_ICE_CREAM)
    private static final long ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN = 330902016;

    // This is a copy of TelephonyFrameworkInitializer.ENABLE_CHECKING_TELEPHONY_FEATURES. This
    // ChangeId will replace ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN to gate VcnManager
    // feature flag enforcement.
    // This replacement is safe because both ChangeIds have been enabled since Android V and serve
    // the same purpose: enforcing telephony feature flag checks before using telephony-based
    // features. This also simplifies VCN modularization by avoiding the need to handle different
    // states, such as: SDK < B vs. SDK >= B; VCN in platform vs. VCN in the apex.
    private static final long ENABLE_CHECKING_TELEPHONY_FEATURES = 330583731;

    /**
     * The corresponding vendor API for Android V
@@ -71,7 +67,7 @@ public final class ConnectivityFrameworkInitializerBaklava {
    private static String getVcnFeatureDependency() {
        // Check SDK version of the client app. Apps targeting pre-V SDK might
        // have not checked for existence of these features.
        if (!Compatibility.isChangeEnabled(ENABLE_CHECKING_TELEPHONY_FEATURES_FOR_VCN)) {
        if (!Compatibility.isChangeEnabled(ENABLE_CHECKING_TELEPHONY_FEATURES)) {
            return null;
        }

Loading