From 87743c6d55fb0ffe5b3a72c067e95e0feb4f7881 Mon Sep 17 00:00:00 2001 From: Anton Hansson Date: Wed, 8 Jan 2020 09:48:18 +0000 Subject: Rename sdkext module to sdkextensions It's a better name. Bug: 137191822 Test: presubmit Change-Id: Icc39779d49bf31f911f9f72bd7610e84c5f49466 Merged-In: Icc39779d49bf31f911f9f72bd7610e84c5f49466 (cherry picked from commit 5b97269cffa587d1c1d73163a9cabb0cc8c7ec05) --- Android.bp | 4 +- apex/sdkext/Android.bp | 84 --------------------- apex/sdkext/OWNERS | 1 - apex/sdkext/TEST_MAPPING | 7 -- apex/sdkext/com.android.sdkext.avbpubkey | Bin 1032 -> 0 bytes apex/sdkext/com.android.sdkext.pem | 51 ------------- apex/sdkext/com.android.sdkext.pk8 | Bin 2375 -> 0 bytes apex/sdkext/com.android.sdkext.x509.pem | 35 --------- apex/sdkext/derive_sdk/Android.bp | 37 --------- apex/sdkext/derive_sdk/derive_sdk.cpp | 79 ------------------- apex/sdkext/derive_sdk/derive_sdk.rc | 3 - apex/sdkext/derive_sdk/sdk.proto | 25 ------ apex/sdkext/framework/Android.bp | 71 ----------------- .../java/android/os/ext/SdkExtensions.java | 68 ----------------- .../framework/java/android/os/ext/package.html | 5 -- apex/sdkext/gen_sdkinfo.py | 19 ----- apex/sdkext/ld.config.txt | 31 -------- apex/sdkext/manifest.json | 4 - apex/sdkext/sdk.proto | 25 ------ apex/sdkextensions/Android.bp | 84 +++++++++++++++++++++ apex/sdkextensions/OWNERS | 1 + apex/sdkextensions/TEST_MAPPING | 7 ++ apex/sdkextensions/com.android.sdkext.avbpubkey | Bin 0 -> 1032 bytes apex/sdkextensions/com.android.sdkext.pem | 51 +++++++++++++ apex/sdkextensions/com.android.sdkext.pk8 | Bin 0 -> 2375 bytes apex/sdkextensions/com.android.sdkext.x509.pem | 35 +++++++++ apex/sdkextensions/derive_sdk/Android.bp | 37 +++++++++ apex/sdkextensions/derive_sdk/derive_sdk.cpp | 79 +++++++++++++++++++ apex/sdkextensions/derive_sdk/derive_sdk.rc | 3 + apex/sdkextensions/derive_sdk/sdk.proto | 25 ++++++ apex/sdkextensions/framework/Android.bp | 71 +++++++++++++++++ .../java/android/os/ext/SdkExtensions.java | 68 +++++++++++++++++ .../framework/java/android/os/ext/package.html | 5 ++ apex/sdkextensions/gen_sdkinfo.py | 19 +++++ apex/sdkextensions/ld.config.txt | 31 ++++++++ apex/sdkextensions/manifest.json | 4 + apex/sdkextensions/sdk.proto | 25 ++++++ core/jni/fd_utils.cpp | 34 ++++----- 38 files changed, 564 insertions(+), 564 deletions(-) delete mode 100644 apex/sdkext/Android.bp delete mode 100644 apex/sdkext/OWNERS delete mode 100644 apex/sdkext/TEST_MAPPING delete mode 100644 apex/sdkext/com.android.sdkext.avbpubkey delete mode 100644 apex/sdkext/com.android.sdkext.pem delete mode 100644 apex/sdkext/com.android.sdkext.pk8 delete mode 100644 apex/sdkext/com.android.sdkext.x509.pem delete mode 100644 apex/sdkext/derive_sdk/Android.bp delete mode 100644 apex/sdkext/derive_sdk/derive_sdk.cpp delete mode 100644 apex/sdkext/derive_sdk/derive_sdk.rc delete mode 100644 apex/sdkext/derive_sdk/sdk.proto delete mode 100644 apex/sdkext/framework/Android.bp delete mode 100644 apex/sdkext/framework/java/android/os/ext/SdkExtensions.java delete mode 100644 apex/sdkext/framework/java/android/os/ext/package.html delete mode 100644 apex/sdkext/gen_sdkinfo.py delete mode 100644 apex/sdkext/ld.config.txt delete mode 100644 apex/sdkext/manifest.json delete mode 100644 apex/sdkext/sdk.proto create mode 100644 apex/sdkextensions/Android.bp create mode 100644 apex/sdkextensions/OWNERS create mode 100644 apex/sdkextensions/TEST_MAPPING create mode 100644 apex/sdkextensions/com.android.sdkext.avbpubkey create mode 100644 apex/sdkextensions/com.android.sdkext.pem create mode 100644 apex/sdkextensions/com.android.sdkext.pk8 create mode 100644 apex/sdkextensions/com.android.sdkext.x509.pem create mode 100644 apex/sdkextensions/derive_sdk/Android.bp create mode 100644 apex/sdkextensions/derive_sdk/derive_sdk.cpp create mode 100644 apex/sdkextensions/derive_sdk/derive_sdk.rc create mode 100644 apex/sdkextensions/derive_sdk/sdk.proto create mode 100644 apex/sdkextensions/framework/Android.bp create mode 100644 apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java create mode 100644 apex/sdkextensions/framework/java/android/os/ext/package.html create mode 100644 apex/sdkextensions/gen_sdkinfo.py create mode 100644 apex/sdkextensions/ld.config.txt create mode 100644 apex/sdkextensions/manifest.json create mode 100644 apex/sdkextensions/sdk.proto diff --git a/Android.bp b/Android.bp index 27f22bde9a3a..f776bcda8104 100644 --- a/Android.bp +++ b/Android.bp @@ -265,7 +265,7 @@ filegroup { filegroup { name: "framework-updatable-sources", srcs: [ - ":framework-sdkext-sources", + ":framework-sdkextensions-sources", ":framework-tethering-srcs", ":updatable-media-srcs", ] @@ -463,7 +463,7 @@ java_library { static_libs: [ "framework-minus-apex", "updatable_media_stubs", - "framework-sdkext-stubs-systemapi", + "framework-sdkextensions-stubs-systemapi", // TODO(jiyong): add more stubs for APEXes here ], sdk_version: "core_platform", diff --git a/apex/sdkext/Android.bp b/apex/sdkext/Android.bp deleted file mode 100644 index f62f167cdcfa..000000000000 --- a/apex/sdkext/Android.bp +++ /dev/null @@ -1,84 +0,0 @@ -// Copyright (C) 2019 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package { - default_visibility: [":__subpackages__"], -} - -apex { - name: "com.android.sdkext", - manifest: "manifest.json", - binaries: [ "derive_sdk" ], - java_libs: [ "framework-sdkext" ], - prebuilts: [ - "com.android.sdkext.ldconfig", - "cur_sdkinfo", - "derive_sdk.rc", - ], - key: "com.android.sdkext.key", - certificate: ":com.android.sdkext.certificate", -} - -sdk { - name: "sdkext-sdk", - java_header_libs: [ "framework-sdkext-stubs-systemapi" ], -} - -apex_key { - name: "com.android.sdkext.key", - public_key: "com.android.sdkext.avbpubkey", - private_key: "com.android.sdkext.pem", -} - -android_app_certificate { - name: "com.android.sdkext.certificate", - certificate: "com.android.sdkext", -} - -prebuilt_etc { - name: "com.android.sdkext.ldconfig", - src: "ld.config.txt", - filename: "ld.config.txt", - installable: false, -} - -python_binary_host { - name: "gen_sdkinfo", - srcs: [ - "sdk.proto", - "gen_sdkinfo.py", - ], - proto: { - canonical_path_from_root: false, - }, - version: { - py3: { - embedded_launcher: true, - }, - }, -} - -gensrcs { - name: "cur_sdkinfo_src", - srcs: [""], - tools: [ "gen_sdkinfo" ], - cmd: "$(location) -v 0 -o $(out)", -} - -prebuilt_etc { - name: "cur_sdkinfo", - src: ":cur_sdkinfo_src", - filename: "sdkinfo.binarypb", - installable: false, -} diff --git a/apex/sdkext/OWNERS b/apex/sdkext/OWNERS deleted file mode 100644 index feb274262bef..000000000000 --- a/apex/sdkext/OWNERS +++ /dev/null @@ -1 +0,0 @@ -hansson@google.com diff --git a/apex/sdkext/TEST_MAPPING b/apex/sdkext/TEST_MAPPING deleted file mode 100644 index 91947f39980a..000000000000 --- a/apex/sdkext/TEST_MAPPING +++ /dev/null @@ -1,7 +0,0 @@ -{ - "presubmit": [ - { - "name": "CtsSdkExtTestCases" - } - ] -} diff --git a/apex/sdkext/com.android.sdkext.avbpubkey b/apex/sdkext/com.android.sdkext.avbpubkey deleted file mode 100644 index 8f47741ed3b8..000000000000 Binary files a/apex/sdkext/com.android.sdkext.avbpubkey and /dev/null differ diff --git a/apex/sdkext/com.android.sdkext.pem b/apex/sdkext/com.android.sdkext.pem deleted file mode 100644 index 816460183aa3..000000000000 --- a/apex/sdkext/com.android.sdkext.pem +++ /dev/null @@ -1,51 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -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 ------END RSA PRIVATE KEY----- diff --git a/apex/sdkext/com.android.sdkext.pk8 b/apex/sdkext/com.android.sdkext.pk8 deleted file mode 100644 index ccc0bf438cd1..000000000000 Binary files a/apex/sdkext/com.android.sdkext.pk8 and /dev/null differ diff --git a/apex/sdkext/com.android.sdkext.x509.pem b/apex/sdkext/com.android.sdkext.x509.pem deleted file mode 100644 index 45d2ade354d4..000000000000 --- a/apex/sdkext/com.android.sdkext.x509.pem +++ /dev/null @@ -1,35 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIGIzCCBAugAwIBAgIUXuDL7QvzQh7S6rihWz2KRvCFVT0wDQYJKoZIhvcNAQEL -BQAwgZ8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQH -DA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQLDAdBbmRy -b2lkMRswGQYDVQQDDBJjb20uYW5kcm9pZC5zZGtleHQxIjAgBgkqhkiG9w0BCQEW -E2FuZHJvaWRAYW5kcm9pZC5jb20wIBcNMTkxMjAyMTQyNDM0WhgPNDc1NzEwMjgx -NDI0MzRaMIGfMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQG -A1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwH -QW5kcm9pZDEbMBkGA1UEAwwSY29tLmFuZHJvaWQuc2RrZXh0MSIwIAYJKoZIhvcN -AQkBFhNhbmRyb2lkQGFuZHJvaWQuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxFvZZ6ES1oqAu1K74/ZxnC3SOhHnLISLBgJEe7DqtdpuNFAwvdVO -RL/HULhDbjYlOhpU2x3SavDIZZ2lRfiS9Q+M25WftxTRHVjBcpgwbV77TVxPKlAa -tVN2lUVOY+s4QAVMNIXjC4kCKK/pCQtacH715EtdV47fWdg/Nx4iP/Aord8k3KGI -9iI2ZOUjaugTRxu5lKRNDrv0bw5rEzyYmDyMud+kR/iS3/5oog57wPE0ffAkZXWE -p3L2Cejre3ekCizsvVh6EmH6ForKLtL6f0z5Zir1f4R9+YcENspTlJR3pDhg7y3I -uTQT/iDCtV0l+g2PjGZPEeAQHND3+kDQR7Sno/WC1Nhws6vcu1MdrC+kIh1ewx4y -8moy/yqb5M98PJDzTSi/AOTB/OiqLXo/T8rjLBmirs9y3fTT6gJ6qXxOWgt8dle9 -7TBfa84Xi8uVY61c+A+YI0nLal7QDPsP3RPv5sJSQ9x9YnweVfD9Q0EOi52sSNu+ -QuN/kcUrMgPgha20VhfH/CkkPDyIp6aZyHHM69MIl+cYEm8vPa5uy3dosuRomT0f -I4HOBjULDIuj+rIi+Rg3qHvmpuejwZXI/FBNWIhLEUG3ytgksjMaBoYAYflGdrcj -BQexuF3EO+j4uo7JGjNcaT7wRoCH9gt29VHckDg2qz6VWXrlpmME4UkCAwEAAaNT -MFEwHQYDVR0OBBYEFISN2nmUHllgPZMZ62U7mU3ZxzlXMB8GA1UdIwQYMBaAFISN -2nmUHllgPZMZ62U7mU3ZxzlXMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggIBAFHIwyBNIVyHXUsDUdcjxfojXQsF/BCL9ehE3pgdkvDfQanaIREWn0nc -oCFDFkYMRqaXOGC5TKq4OCjXOLsdfODt8HQ3F9J1B0ghQ5tfOdw7xDugNAszqP/Q -h7kpvqLTycjrqOeZ5KjxEEYtP/KlUmALgOKcTcSH+XhWyxhjF4j24T9F2yJRr3/A -r1NGU/djH953bHKC8OpJ2teUpDLA4TxVp/EhslH2eVigF80c/w74QPLEWkD9zv/4 -YeRg/R5N83zHs99NtlWMIeHfK6fUbzMyaSZtvm+jK20tkByQb/OQRed+drk25MtL -68IRvxqri367qRScdpTZbu0ByLO4X8gFdubRUWr+tcO4pZX+DJRVriExbOkU2xhS -Vtslq23V/hwTuUNm1CXjR70mPS13BTmHrIQDqLoIw/WTQlGh+vxnlAFRIHM3KB2c -OdzUBu+NcB4aZEd0KKtct600A0DKPr1MQPb5jDq9wEtPSQYwMF0nRFNnXltbrXMd -4hhwnhKr74fVMUmb+7eQP56XE/Nk4D+npMO54vv1pav+DI2/nxCND9BOLBweY38p -Tvd2RjesMok0zXuVXiCIu4GEpwo7WkSnv25xrb0Ey2M8QWnGNnCcX7Kv6ip3RdWy -HiN0G8RJrs/yNEVSDRx8ZhtwTpXVPQxbARbmhNF4/fnolElkmrMP ------END CERTIFICATE----- diff --git a/apex/sdkext/derive_sdk/Android.bp b/apex/sdkext/derive_sdk/Android.bp deleted file mode 100644 index c4e3c296f210..000000000000 --- a/apex/sdkext/derive_sdk/Android.bp +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (C) 2019 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -cc_binary { - name: "derive_sdk", - srcs: [ - "derive_sdk.cpp", - "sdk.proto", - ], - proto: { - type: "lite", - }, - sdk_version: "current", - stl: "c++_static", - shared_libs: [ "liblog" ], - static_libs: [ - "libbase_ndk", - "libprotobuf-cpp-lite-ndk", - ], -} - -prebuilt_etc { - name: "derive_sdk.rc", - src: "derive_sdk.rc", - installable: false, -} diff --git a/apex/sdkext/derive_sdk/derive_sdk.cpp b/apex/sdkext/derive_sdk/derive_sdk.cpp deleted file mode 100644 index 0a9711677015..000000000000 --- a/apex/sdkext/derive_sdk/derive_sdk.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "derive_sdk" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "frameworks/base/apex/sdkext/derive_sdk/sdk.pb.h" - -using com::android::sdkext::proto::SdkVersion; - -int main(int, char**) { - std::unique_ptr apex(opendir("/apex"), closedir); - if (!apex) { - LOG(ERROR) << "Could not read /apex"; - return EXIT_FAILURE; - } - struct dirent* de; - std::vector paths; - while ((de = readdir(apex.get()))) { - std::string name = de->d_name; - if (name[0] == '.' || name.find('@') != std::string::npos) { - // Skip @ dirs, as they are bind-mounted to - continue; - } - std::string path = "/apex/" + name + "/etc/sdkinfo.binarypb"; - struct stat statbuf; - if (stat(path.c_str(), &statbuf) == 0) { - paths.push_back(path); - } - } - - std::vector versions; - for (const auto& path : paths) { - std::string contents; - if (!android::base::ReadFileToString(path, &contents, true)) { - LOG(ERROR) << "failed to read " << path; - continue; - } - SdkVersion sdk_version; - if (!sdk_version.ParseFromString(contents)) { - LOG(ERROR) << "failed to parse " << path; - continue; - } - LOG(INFO) << "Read version " << sdk_version.version() << " from " << path; - versions.push_back(sdk_version.version()); - } - auto itr = std::min_element(versions.begin(), versions.end()); - std::string prop_value = itr == versions.end() ? "0" : std::to_string(*itr); - - if (!android::base::SetProperty("ro.build.version.extensions.r", prop_value)) { - LOG(ERROR) << "failed to set sdk_info prop"; - return EXIT_FAILURE; - } - - LOG(INFO) << "R extension version is " << prop_value; - return EXIT_SUCCESS; -} diff --git a/apex/sdkext/derive_sdk/derive_sdk.rc b/apex/sdkext/derive_sdk/derive_sdk.rc deleted file mode 100644 index 1b667949eeaa..000000000000 --- a/apex/sdkext/derive_sdk/derive_sdk.rc +++ /dev/null @@ -1,3 +0,0 @@ -service derive_sdk /apex/com.android.sdkext/bin/derive_sdk - oneshot - disabled diff --git a/apex/sdkext/derive_sdk/sdk.proto b/apex/sdkext/derive_sdk/sdk.proto deleted file mode 100644 index d15b93552ff4..000000000000 --- a/apex/sdkext/derive_sdk/sdk.proto +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -syntax = "proto3"; -package com.android.sdkext.proto; - -option java_outer_classname = "SdkProto"; -option optimize_for = LITE_RUNTIME; - -message SdkVersion { - int32 version = 1; -} diff --git a/apex/sdkext/framework/Android.bp b/apex/sdkext/framework/Android.bp deleted file mode 100644 index a50dc3d4f349..000000000000 --- a/apex/sdkext/framework/Android.bp +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (C) 2019 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package { - default_visibility: [ ":__pkg__" ] -} - -filegroup { - name: "framework-sdkext-sources", - srcs: [ - "java/**/*.java", - ], - path: "java", - visibility: [ "//frameworks/base:__pkg__" ] // For the "global" stubs. -} - -java_library { - name: "framework-sdkext", - srcs: [ ":framework-sdkext-sources" ], - sdk_version: "system_current", - libs: [ "framework-annotations-lib" ], - permitted_packages: [ "android.os.ext" ], - installable: true, - visibility: [ "//frameworks/base/apex/sdkext:__pkg__" ], -} - -droidstubs { - name: "framework-sdkext-droidstubs-publicapi", - defaults: [ - "framework-sdkext-stubs-defaults", - "framework-module-stubs-defaults-publicapi", - ] -} - -droidstubs { - name: "framework-sdkext-droidstubs-systemapi", - defaults: [ - "framework-sdkext-stubs-defaults", - "framework-module-stubs-defaults-systemapi", - ] -} - -stubs_defaults { - name: "framework-sdkext-stubs-defaults", - srcs: [ - ":framework-sdkext-sources", - ":framework-annotations", - ], - sdk_version: "system_current", -} - -java_library { - name: "framework-sdkext-stubs-systemapi", - srcs: [":framework-sdkext-droidstubs-systemapi"], - sdk_version: "system_current", - visibility: [ - "//frameworks/base:__pkg__", // Framework - "//frameworks/base/apex/sdkext:__pkg__", // sdkext SDK - ] -} diff --git a/apex/sdkext/framework/java/android/os/ext/SdkExtensions.java b/apex/sdkext/framework/java/android/os/ext/SdkExtensions.java deleted file mode 100644 index a8a7effa9b6c..000000000000 --- a/apex/sdkext/framework/java/android/os/ext/SdkExtensions.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.os.ext; - -import android.annotation.IntDef; -import android.annotation.SystemApi; -import android.os.Build.VERSION_CODES; -import android.os.SystemProperties; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -/** - * Methods for interacting with the extension SDK. - * - * This class provides information about the extension SDK version present - * on this device. Use the {@link #getExtensionVersion(int) getExtension} to - * query for the extension version for the given SDK version. - - * @hide - */ -@SystemApi -public class SdkExtensions { - - private static final int R_EXTENSION_INT; - static { - R_EXTENSION_INT = SystemProperties.getInt("ro.build.version.extensions.r", 0); - } - - /** - * Values suitable as parameters for {@link #getExtensionVersion(int)}. - * @hide - */ - @IntDef(value = { VERSION_CODES.R }) - @Retention(RetentionPolicy.SOURCE) - public @interface SdkVersion {} - - private SdkExtensions() { } - - /** - * Return the version of the extension to the given SDK. - * - * @param sdk the SDK version to get the extension version of. - * @see SdkVersion - * @throws IllegalArgumentException if sdk is not an sdk version with extensions - */ - public static int getExtensionVersion(@SdkVersion int sdk) { - if (sdk < VERSION_CODES.R) { - throw new IllegalArgumentException(String.valueOf(sdk) + " does not have extensions"); - } - return R_EXTENSION_INT; - } - -} diff --git a/apex/sdkext/framework/java/android/os/ext/package.html b/apex/sdkext/framework/java/android/os/ext/package.html deleted file mode 100644 index 34c1697c01fd..000000000000 --- a/apex/sdkext/framework/java/android/os/ext/package.html +++ /dev/null @@ -1,5 +0,0 @@ - - -Provides APIs to interface with the SDK extensions. - - diff --git a/apex/sdkext/gen_sdkinfo.py b/apex/sdkext/gen_sdkinfo.py deleted file mode 100644 index 5af478ba7fe6..000000000000 --- a/apex/sdkext/gen_sdkinfo.py +++ /dev/null @@ -1,19 +0,0 @@ -import sdk_pb2 -import sys - -if __name__ == '__main__': - argv = sys.argv[1:] - if not len(argv) == 4 or sorted([argv[0], argv[2]]) != ['-o', '-v']: - print('usage: gen_sdkinfo -v -o ') - sys.exit(1) - - for i in range(len(argv)): - if sys.argv[i] == '-o': - filename = sys.argv[i+1] - if sys.argv[i] == '-v': - version = int(sys.argv[i+1]) - - proto = sdk_pb2.SdkVersion() - proto.version = version - with open(filename, 'wb') as f: - f.write(proto.SerializeToString()) diff --git a/apex/sdkext/ld.config.txt b/apex/sdkext/ld.config.txt deleted file mode 100644 index b4470685f4fc..000000000000 --- a/apex/sdkext/ld.config.txt +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2019 The Android Open Source Project -# -# Bionic loader config file for the sdkext apex. - -dir.sdkext = /apex/com.android.sdkext/bin/ - -[sdkext] -additional.namespaces = platform - -namespace.default.isolated = true -namespace.default.links = platform -namespace.default.link.platform.allow_all_shared_libs = true - -############################################################################### -# "platform" namespace: used for NDK libraries -############################################################################### -namespace.platform.isolated = true -namespace.platform.search.paths = /system/${LIB} -namespace.platform.asan.search.paths = /data/asan/system/${LIB} - -# /system/lib/libc.so, etc are symlinks to /apex/com.android.lib/lib/bionic/libc.so, etc. -# Add /apex/... path to the permitted paths because linker uses realpath(3) -# to check the accessibility of the lib. We could add this to search.paths -# instead but that makes the resolution of bionic libs be dependent on -# the order of /system/lib and /apex/... in search.paths. If /apex/... -# is after /system/lib, then /apex/... is never tried because libc.so -# is always found in /system/lib but fails to pass the accessibility test -# because of its realpath. It's better to not depend on the ordering if -# possible. -namespace.platform.permitted.paths = /apex/com.android.runtime/${LIB}/bionic -namespace.platform.asan.permitted.paths = /apex/com.android.runtime/${LIB}/bionic diff --git a/apex/sdkext/manifest.json b/apex/sdkext/manifest.json deleted file mode 100644 index 048f5c4f177b..000000000000 --- a/apex/sdkext/manifest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "com.android.sdkext", - "version": 1 -} diff --git a/apex/sdkext/sdk.proto b/apex/sdkext/sdk.proto deleted file mode 100644 index d15b93552ff4..000000000000 --- a/apex/sdkext/sdk.proto +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -syntax = "proto3"; -package com.android.sdkext.proto; - -option java_outer_classname = "SdkProto"; -option optimize_for = LITE_RUNTIME; - -message SdkVersion { - int32 version = 1; -} diff --git a/apex/sdkextensions/Android.bp b/apex/sdkextensions/Android.bp new file mode 100644 index 000000000000..f3e20189639f --- /dev/null +++ b/apex/sdkextensions/Android.bp @@ -0,0 +1,84 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + default_visibility: [":__subpackages__"], +} + +apex { + name: "com.android.sdkext", + manifest: "manifest.json", + binaries: [ "derive_sdk" ], + java_libs: [ "framework-sdkextensions" ], + prebuilts: [ + "com.android.sdkext.ldconfig", + "cur_sdkinfo", + "derive_sdk.rc", + ], + key: "com.android.sdkext.key", + certificate: ":com.android.sdkext.certificate", +} + +sdk { + name: "sdkextensions-sdk", + java_header_libs: [ "framework-sdkextensions-stubs-systemapi" ], +} + +apex_key { + name: "com.android.sdkext.key", + public_key: "com.android.sdkext.avbpubkey", + private_key: "com.android.sdkext.pem", +} + +android_app_certificate { + name: "com.android.sdkext.certificate", + certificate: "com.android.sdkext", +} + +prebuilt_etc { + name: "com.android.sdkext.ldconfig", + src: "ld.config.txt", + filename: "ld.config.txt", + installable: false, +} + +python_binary_host { + name: "gen_sdkinfo", + srcs: [ + "sdk.proto", + "gen_sdkinfo.py", + ], + proto: { + canonical_path_from_root: false, + }, + version: { + py3: { + embedded_launcher: true, + }, + }, +} + +gensrcs { + name: "cur_sdkinfo_src", + srcs: [""], + tools: [ "gen_sdkinfo" ], + cmd: "$(location) -v 0 -o $(out)", +} + +prebuilt_etc { + name: "cur_sdkinfo", + src: ":cur_sdkinfo_src", + filename: "sdkinfo.binarypb", + installable: false, +} diff --git a/apex/sdkextensions/OWNERS b/apex/sdkextensions/OWNERS new file mode 100644 index 000000000000..feb274262bef --- /dev/null +++ b/apex/sdkextensions/OWNERS @@ -0,0 +1 @@ +hansson@google.com diff --git a/apex/sdkextensions/TEST_MAPPING b/apex/sdkextensions/TEST_MAPPING new file mode 100644 index 000000000000..91947f39980a --- /dev/null +++ b/apex/sdkextensions/TEST_MAPPING @@ -0,0 +1,7 @@ +{ + "presubmit": [ + { + "name": "CtsSdkExtTestCases" + } + ] +} diff --git a/apex/sdkextensions/com.android.sdkext.avbpubkey b/apex/sdkextensions/com.android.sdkext.avbpubkey new file mode 100644 index 000000000000..8f47741ed3b8 Binary files /dev/null and b/apex/sdkextensions/com.android.sdkext.avbpubkey differ diff --git a/apex/sdkextensions/com.android.sdkext.pem b/apex/sdkextensions/com.android.sdkext.pem new file mode 100644 index 000000000000..816460183aa3 --- /dev/null +++ b/apex/sdkextensions/com.android.sdkext.pem @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/apex/sdkextensions/com.android.sdkext.pk8 b/apex/sdkextensions/com.android.sdkext.pk8 new file mode 100644 index 000000000000..ccc0bf438cd1 Binary files /dev/null and b/apex/sdkextensions/com.android.sdkext.pk8 differ diff --git a/apex/sdkextensions/com.android.sdkext.x509.pem b/apex/sdkextensions/com.android.sdkext.x509.pem new file mode 100644 index 000000000000..45d2ade354d4 --- /dev/null +++ b/apex/sdkextensions/com.android.sdkext.x509.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIGIzCCBAugAwIBAgIUXuDL7QvzQh7S6rihWz2KRvCFVT0wDQYJKoZIhvcNAQEL +BQAwgZ8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQH +DA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQLDAdBbmRy +b2lkMRswGQYDVQQDDBJjb20uYW5kcm9pZC5zZGtleHQxIjAgBgkqhkiG9w0BCQEW +E2FuZHJvaWRAYW5kcm9pZC5jb20wIBcNMTkxMjAyMTQyNDM0WhgPNDc1NzEwMjgx +NDI0MzRaMIGfMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQG +A1UEBwwNTW91bnRhaW4gVmlldzEQMA4GA1UECgwHQW5kcm9pZDEQMA4GA1UECwwH +QW5kcm9pZDEbMBkGA1UEAwwSY29tLmFuZHJvaWQuc2RrZXh0MSIwIAYJKoZIhvcN +AQkBFhNhbmRyb2lkQGFuZHJvaWQuY29tMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxFvZZ6ES1oqAu1K74/ZxnC3SOhHnLISLBgJEe7DqtdpuNFAwvdVO +RL/HULhDbjYlOhpU2x3SavDIZZ2lRfiS9Q+M25WftxTRHVjBcpgwbV77TVxPKlAa +tVN2lUVOY+s4QAVMNIXjC4kCKK/pCQtacH715EtdV47fWdg/Nx4iP/Aord8k3KGI +9iI2ZOUjaugTRxu5lKRNDrv0bw5rEzyYmDyMud+kR/iS3/5oog57wPE0ffAkZXWE +p3L2Cejre3ekCizsvVh6EmH6ForKLtL6f0z5Zir1f4R9+YcENspTlJR3pDhg7y3I +uTQT/iDCtV0l+g2PjGZPEeAQHND3+kDQR7Sno/WC1Nhws6vcu1MdrC+kIh1ewx4y +8moy/yqb5M98PJDzTSi/AOTB/OiqLXo/T8rjLBmirs9y3fTT6gJ6qXxOWgt8dle9 +7TBfa84Xi8uVY61c+A+YI0nLal7QDPsP3RPv5sJSQ9x9YnweVfD9Q0EOi52sSNu+ +QuN/kcUrMgPgha20VhfH/CkkPDyIp6aZyHHM69MIl+cYEm8vPa5uy3dosuRomT0f +I4HOBjULDIuj+rIi+Rg3qHvmpuejwZXI/FBNWIhLEUG3ytgksjMaBoYAYflGdrcj +BQexuF3EO+j4uo7JGjNcaT7wRoCH9gt29VHckDg2qz6VWXrlpmME4UkCAwEAAaNT +MFEwHQYDVR0OBBYEFISN2nmUHllgPZMZ62U7mU3ZxzlXMB8GA1UdIwQYMBaAFISN +2nmUHllgPZMZ62U7mU3ZxzlXMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL +BQADggIBAFHIwyBNIVyHXUsDUdcjxfojXQsF/BCL9ehE3pgdkvDfQanaIREWn0nc +oCFDFkYMRqaXOGC5TKq4OCjXOLsdfODt8HQ3F9J1B0ghQ5tfOdw7xDugNAszqP/Q +h7kpvqLTycjrqOeZ5KjxEEYtP/KlUmALgOKcTcSH+XhWyxhjF4j24T9F2yJRr3/A +r1NGU/djH953bHKC8OpJ2teUpDLA4TxVp/EhslH2eVigF80c/w74QPLEWkD9zv/4 +YeRg/R5N83zHs99NtlWMIeHfK6fUbzMyaSZtvm+jK20tkByQb/OQRed+drk25MtL +68IRvxqri367qRScdpTZbu0ByLO4X8gFdubRUWr+tcO4pZX+DJRVriExbOkU2xhS +Vtslq23V/hwTuUNm1CXjR70mPS13BTmHrIQDqLoIw/WTQlGh+vxnlAFRIHM3KB2c +OdzUBu+NcB4aZEd0KKtct600A0DKPr1MQPb5jDq9wEtPSQYwMF0nRFNnXltbrXMd +4hhwnhKr74fVMUmb+7eQP56XE/Nk4D+npMO54vv1pav+DI2/nxCND9BOLBweY38p +Tvd2RjesMok0zXuVXiCIu4GEpwo7WkSnv25xrb0Ey2M8QWnGNnCcX7Kv6ip3RdWy +HiN0G8RJrs/yNEVSDRx8ZhtwTpXVPQxbARbmhNF4/fnolElkmrMP +-----END CERTIFICATE----- diff --git a/apex/sdkextensions/derive_sdk/Android.bp b/apex/sdkextensions/derive_sdk/Android.bp new file mode 100644 index 000000000000..c4e3c296f210 --- /dev/null +++ b/apex/sdkextensions/derive_sdk/Android.bp @@ -0,0 +1,37 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +cc_binary { + name: "derive_sdk", + srcs: [ + "derive_sdk.cpp", + "sdk.proto", + ], + proto: { + type: "lite", + }, + sdk_version: "current", + stl: "c++_static", + shared_libs: [ "liblog" ], + static_libs: [ + "libbase_ndk", + "libprotobuf-cpp-lite-ndk", + ], +} + +prebuilt_etc { + name: "derive_sdk.rc", + src: "derive_sdk.rc", + installable: false, +} diff --git a/apex/sdkextensions/derive_sdk/derive_sdk.cpp b/apex/sdkextensions/derive_sdk/derive_sdk.cpp new file mode 100644 index 000000000000..6fb7ef43416e --- /dev/null +++ b/apex/sdkextensions/derive_sdk/derive_sdk.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "derive_sdk" + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "frameworks/base/apex/sdkextensions/derive_sdk/sdk.pb.h" + +using com::android::sdkext::proto::SdkVersion; + +int main(int, char**) { + std::unique_ptr apex(opendir("/apex"), closedir); + if (!apex) { + LOG(ERROR) << "Could not read /apex"; + return EXIT_FAILURE; + } + struct dirent* de; + std::vector paths; + while ((de = readdir(apex.get()))) { + std::string name = de->d_name; + if (name[0] == '.' || name.find('@') != std::string::npos) { + // Skip @ dirs, as they are bind-mounted to + continue; + } + std::string path = "/apex/" + name + "/etc/sdkinfo.binarypb"; + struct stat statbuf; + if (stat(path.c_str(), &statbuf) == 0) { + paths.push_back(path); + } + } + + std::vector versions; + for (const auto& path : paths) { + std::string contents; + if (!android::base::ReadFileToString(path, &contents, true)) { + LOG(ERROR) << "failed to read " << path; + continue; + } + SdkVersion sdk_version; + if (!sdk_version.ParseFromString(contents)) { + LOG(ERROR) << "failed to parse " << path; + continue; + } + LOG(INFO) << "Read version " << sdk_version.version() << " from " << path; + versions.push_back(sdk_version.version()); + } + auto itr = std::min_element(versions.begin(), versions.end()); + std::string prop_value = itr == versions.end() ? "0" : std::to_string(*itr); + + if (!android::base::SetProperty("ro.build.version.extensions.r", prop_value)) { + LOG(ERROR) << "failed to set sdk_info prop"; + return EXIT_FAILURE; + } + + LOG(INFO) << "R extension version is " << prop_value; + return EXIT_SUCCESS; +} diff --git a/apex/sdkextensions/derive_sdk/derive_sdk.rc b/apex/sdkextensions/derive_sdk/derive_sdk.rc new file mode 100644 index 000000000000..1b667949eeaa --- /dev/null +++ b/apex/sdkextensions/derive_sdk/derive_sdk.rc @@ -0,0 +1,3 @@ +service derive_sdk /apex/com.android.sdkext/bin/derive_sdk + oneshot + disabled diff --git a/apex/sdkextensions/derive_sdk/sdk.proto b/apex/sdkextensions/derive_sdk/sdk.proto new file mode 100644 index 000000000000..d15b93552ff4 --- /dev/null +++ b/apex/sdkextensions/derive_sdk/sdk.proto @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; +package com.android.sdkext.proto; + +option java_outer_classname = "SdkProto"; +option optimize_for = LITE_RUNTIME; + +message SdkVersion { + int32 version = 1; +} diff --git a/apex/sdkextensions/framework/Android.bp b/apex/sdkextensions/framework/Android.bp new file mode 100644 index 000000000000..2845612934b6 --- /dev/null +++ b/apex/sdkextensions/framework/Android.bp @@ -0,0 +1,71 @@ +// Copyright (C) 2019 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package { + default_visibility: [ ":__pkg__" ] +} + +filegroup { + name: "framework-sdkextensions-sources", + srcs: [ + "java/**/*.java", + ], + path: "java", + visibility: [ "//frameworks/base:__pkg__" ] // For the "global" stubs. +} + +java_library { + name: "framework-sdkextensions", + srcs: [ ":framework-sdkextensions-sources" ], + sdk_version: "system_current", + libs: [ "framework-annotations-lib" ], + permitted_packages: [ "android.os.ext" ], + installable: true, + visibility: [ "//frameworks/base/apex/sdkextensions:__pkg__" ], +} + +droidstubs { + name: "framework-sdkextensions-droidstubs-publicapi", + defaults: [ + "framework-sdkextensions-stubs-defaults", + "framework-module-stubs-defaults-publicapi", + ] +} + +droidstubs { + name: "framework-sdkextensions-droidstubs-systemapi", + defaults: [ + "framework-sdkextensions-stubs-defaults", + "framework-module-stubs-defaults-systemapi", + ] +} + +stubs_defaults { + name: "framework-sdkextensions-stubs-defaults", + srcs: [ + ":framework-sdkextensions-sources", + ":framework-annotations", + ], + sdk_version: "system_current", +} + +java_library { + name: "framework-sdkextensions-stubs-systemapi", + srcs: [":framework-sdkextensions-droidstubs-systemapi"], + sdk_version: "system_current", + visibility: [ + "//frameworks/base:__pkg__", // Framework + "//frameworks/base/apex/sdkextensions:__pkg__", // sdkextensions SDK + ] +} diff --git a/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java b/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java new file mode 100644 index 000000000000..a8a7effa9b6c --- /dev/null +++ b/apex/sdkextensions/framework/java/android/os/ext/SdkExtensions.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.os.ext; + +import android.annotation.IntDef; +import android.annotation.SystemApi; +import android.os.Build.VERSION_CODES; +import android.os.SystemProperties; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Methods for interacting with the extension SDK. + * + * This class provides information about the extension SDK version present + * on this device. Use the {@link #getExtensionVersion(int) getExtension} to + * query for the extension version for the given SDK version. + + * @hide + */ +@SystemApi +public class SdkExtensions { + + private static final int R_EXTENSION_INT; + static { + R_EXTENSION_INT = SystemProperties.getInt("ro.build.version.extensions.r", 0); + } + + /** + * Values suitable as parameters for {@link #getExtensionVersion(int)}. + * @hide + */ + @IntDef(value = { VERSION_CODES.R }) + @Retention(RetentionPolicy.SOURCE) + public @interface SdkVersion {} + + private SdkExtensions() { } + + /** + * Return the version of the extension to the given SDK. + * + * @param sdk the SDK version to get the extension version of. + * @see SdkVersion + * @throws IllegalArgumentException if sdk is not an sdk version with extensions + */ + public static int getExtensionVersion(@SdkVersion int sdk) { + if (sdk < VERSION_CODES.R) { + throw new IllegalArgumentException(String.valueOf(sdk) + " does not have extensions"); + } + return R_EXTENSION_INT; + } + +} diff --git a/apex/sdkextensions/framework/java/android/os/ext/package.html b/apex/sdkextensions/framework/java/android/os/ext/package.html new file mode 100644 index 000000000000..34c1697c01fd --- /dev/null +++ b/apex/sdkextensions/framework/java/android/os/ext/package.html @@ -0,0 +1,5 @@ + + +Provides APIs to interface with the SDK extensions. + + diff --git a/apex/sdkextensions/gen_sdkinfo.py b/apex/sdkextensions/gen_sdkinfo.py new file mode 100644 index 000000000000..5af478ba7fe6 --- /dev/null +++ b/apex/sdkextensions/gen_sdkinfo.py @@ -0,0 +1,19 @@ +import sdk_pb2 +import sys + +if __name__ == '__main__': + argv = sys.argv[1:] + if not len(argv) == 4 or sorted([argv[0], argv[2]]) != ['-o', '-v']: + print('usage: gen_sdkinfo -v -o ') + sys.exit(1) + + for i in range(len(argv)): + if sys.argv[i] == '-o': + filename = sys.argv[i+1] + if sys.argv[i] == '-v': + version = int(sys.argv[i+1]) + + proto = sdk_pb2.SdkVersion() + proto.version = version + with open(filename, 'wb') as f: + f.write(proto.SerializeToString()) diff --git a/apex/sdkextensions/ld.config.txt b/apex/sdkextensions/ld.config.txt new file mode 100644 index 000000000000..dcc69b892760 --- /dev/null +++ b/apex/sdkextensions/ld.config.txt @@ -0,0 +1,31 @@ +# Copyright (C) 2019 The Android Open Source Project +# +# Bionic loader config file for the sdkextensions apex. + +dir.sdkextensions = /apex/com.android.sdkext/bin/ + +[sdkextensions] +additional.namespaces = platform + +namespace.default.isolated = true +namespace.default.links = platform +namespace.default.link.platform.allow_all_shared_libs = true + +############################################################################### +# "platform" namespace: used for NDK libraries +############################################################################### +namespace.platform.isolated = true +namespace.platform.search.paths = /system/${LIB} +namespace.platform.asan.search.paths = /data/asan/system/${LIB} + +# /system/lib/libc.so, etc are symlinks to /apex/com.android.lib/lib/bionic/libc.so, etc. +# Add /apex/... path to the permitted paths because linker uses realpath(3) +# to check the accessibility of the lib. We could add this to search.paths +# instead but that makes the resolution of bionic libs be dependent on +# the order of /system/lib and /apex/... in search.paths. If /apex/... +# is after /system/lib, then /apex/... is never tried because libc.so +# is always found in /system/lib but fails to pass the accessibility test +# because of its realpath. It's better to not depend on the ordering if +# possible. +namespace.platform.permitted.paths = /apex/com.android.runtime/${LIB}/bionic +namespace.platform.asan.permitted.paths = /apex/com.android.runtime/${LIB}/bionic diff --git a/apex/sdkextensions/manifest.json b/apex/sdkextensions/manifest.json new file mode 100644 index 000000000000..048f5c4f177b --- /dev/null +++ b/apex/sdkextensions/manifest.json @@ -0,0 +1,4 @@ +{ + "name": "com.android.sdkext", + "version": 1 +} diff --git a/apex/sdkextensions/sdk.proto b/apex/sdkextensions/sdk.proto new file mode 100644 index 000000000000..d15b93552ff4 --- /dev/null +++ b/apex/sdkextensions/sdk.proto @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +syntax = "proto3"; +package com.android.sdkext.proto; + +option java_outer_classname = "SdkProto"; +option optimize_for = LITE_RUNTIME; + +message SdkVersion { + int32 version = 1; +} diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp index ee74f6d7ab94..1b6d622e917e 100644 --- a/core/jni/fd_utils.cpp +++ b/core/jni/fd_utils.cpp @@ -33,23 +33,23 @@ // Static whitelist of open paths that the zygote is allowed to keep open. static const char* kPathWhitelist[] = { - "/apex/com.android.conscrypt/javalib/conscrypt.jar", - "/apex/com.android.ipsec/javalib/ike.jar", - "/apex/com.android.media/javalib/updatable-media.jar", - "/apex/com.android.sdkext/javalib/framework-sdkext.jar", - "/apex/com.android.tethering/javalib/framework-tethering.jar", - "/dev/null", - "/dev/socket/zygote", - "/dev/socket/zygote_secondary", - "/dev/socket/usap_pool_primary", - "/dev/socket/usap_pool_secondary", - "/dev/socket/webview_zygote", - "/dev/socket/heapprofd", - "/sys/kernel/debug/tracing/trace_marker", - "/system/framework/framework-res.apk", - "/dev/urandom", - "/dev/ion", - "/dev/dri/renderD129", // Fixes b/31172436 + "/apex/com.android.conscrypt/javalib/conscrypt.jar", + "/apex/com.android.ipsec/javalib/ike.jar", + "/apex/com.android.media/javalib/updatable-media.jar", + "/apex/com.android.sdkext/javalib/framework-sdkextensions.jar", + "/apex/com.android.tethering/javalib/framework-tethering.jar", + "/dev/null", + "/dev/socket/zygote", + "/dev/socket/zygote_secondary", + "/dev/socket/usap_pool_primary", + "/dev/socket/usap_pool_secondary", + "/dev/socket/webview_zygote", + "/dev/socket/heapprofd", + "/sys/kernel/debug/tracing/trace_marker", + "/system/framework/framework-res.apk", + "/dev/urandom", + "/dev/ion", + "/dev/dri/renderD129", // Fixes b/31172436 }; static const char kFdPath[] = "/proc/self/fd"; -- cgit v1.2.3-59-g8ed1b