diff --git a/libwvdrmengine/Android.bp b/libwvdrmengine/Android.bp
index 865b57be..20e7e440 100644
--- a/libwvdrmengine/Android.bp
+++ b/libwvdrmengine/Android.bp
@@ -268,7 +268,6 @@ cc_binary {
init_rc: ["src/android.hardware.drm-service.widevine.rc"],
vintf_fragments: ["manifest_android.hardware.drm-service.widevine.xml"],
-
}
// ----------------------------------------------------------------------------
@@ -290,8 +289,7 @@ cc_binary {
shared_libs: ["libbinder_ndk"],
init_rc: ["src/android.hardware.drm-service-lazy.widevine.rc"],
- vintf_fragments: ["manifest_android.hardware.drm-service.widevine.xml"],
-
+ vintf_fragments: ["manifest_android.hardware.drm-service-lazy.widevine.xml"],
}
// ----------------------------------------------------------------------------
@@ -371,7 +369,6 @@ cc_library_static {
],
srcs: cdm_util_src_files,
-
}
// ----------------------------------------------------------------------------
@@ -537,13 +534,12 @@ cc_library_shared {
owner: "widevine",
proprietary: true,
-
}
phony {
name: "android.hardware.drm@latest-service.widevine",
required: [
- "android.hardware.drm-service.widevine",
+ "com.google.android.widevine",
],
}
diff --git a/libwvdrmengine/apex/Android.bp b/libwvdrmengine/apex/Android.bp
new file mode 100644
index 00000000..9e969b88
--- /dev/null
+++ b/libwvdrmengine/apex/Android.bp
@@ -0,0 +1,74 @@
+// Copyright (C) 2022 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.
+
+soong_config_module_type {
+ name: "widevine_apex_defaults",
+ module_type: "apex_defaults",
+ config_namespace: "ANDROID",
+ bool_variables: ["TARGET_ENABLE_MEDIADRM_64"],
+ properties: ["compile_multilib"],
+}
+
+widevine_apex_defaults {
+ name: "com.google.android.widevine-defaults",
+ compile_multilib: "prefer32",
+ soong_config_variables: {
+ TARGET_ENABLE_MEDIADRM_64: {
+ compile_multilib: "first",
+ },
+ },
+}
+
+apex {
+ name: "com.google.android.widevine",
+ vendor: true,
+ manifest: "apex_manifest.json",
+ prebuilts: [
+ "com.google.android.widevine.rc",
+ "widevine-linker-config",
+ ],
+ defaults: [
+ "com.google.android.widevine-defaults",
+ ],
+ binaries: ["android.hardware.drm-service.widevine"],
+ // TODO(b/239054171) embed vintf_fragment in the apex.
+ vintf_fragments: ["com.google.android.widevine.xml"],
+ file_contexts: "file_contexts",
+ use_vndk_as_stable: true,
+ key: "com.google.android.widevine.key",
+ certificate: ":com.google.android.widevine.certificate",
+ updatable: false,
+}
+
+linker_config {
+ name: "widevine-linker-config",
+ src: "linker.config.json",
+ installable: false,
+}
+
+apex_key {
+ name: "com.google.android.widevine.key",
+ public_key: "com.google.android.widevine.avbpubkey",
+ private_key: "com.google.android.widevine.pem",
+}
+
+android_app_certificate {
+ name: "com.google.android.widevine.certificate",
+ certificate: "com.google.android.widevine",
+}
+
+prebuilt_etc {
+ name: "com.google.android.widevine.rc",
+ src: "com.google.android.widevine.rc",
+}
\ No newline at end of file
diff --git a/libwvdrmengine/apex/apex_manifest.json b/libwvdrmengine/apex/apex_manifest.json
new file mode 100644
index 00000000..c6d18914
--- /dev/null
+++ b/libwvdrmengine/apex/apex_manifest.json
@@ -0,0 +1,4 @@
+{
+ "name": "com.google.android.widevine",
+ "version": 1
+}
\ No newline at end of file
diff --git a/libwvdrmengine/apex/com.google.android.widevine.avbpubkey b/libwvdrmengine/apex/com.google.android.widevine.avbpubkey
new file mode 100644
index 00000000..e748b67d
Binary files /dev/null and b/libwvdrmengine/apex/com.google.android.widevine.avbpubkey differ
diff --git a/libwvdrmengine/apex/com.google.android.widevine.pem b/libwvdrmengine/apex/com.google.android.widevine.pem
new file mode 100644
index 00000000..bb1b4de4
--- /dev/null
+++ b/libwvdrmengine/apex/com.google.android.widevine.pem
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDOOLpUo4QRrwlQ
+VpaIOK8plveqKbSW++kkCvX4DV1w712W6LR9tfX8JMcKlI1KY3j7cH2Yn0R8AYhW
+wRGfB33SQqkoWOQuYKngcTSXpWZsrYgwo8DbShhcbtQIKRs65oK0OLUmzGWKfoKS
+u4dp768WsssZrrKU1qZRXqhEybmKrrgxmJT7/vtrLFdrXzuqTiRBBemTlIgACnca
+TtHvXUipOkN+Fhn83XmW8hSuWciI80srtiyoTM7fUB4WMgq5kP16x5yViu/wbFWt
+v5L0if35fREClFVCLnqqPjROF2YbjB7kucvg6zNNadrP0po7psEKcUX90MW5nojD
+DrYMUkKHidCBDFh1RdmdQslUlCcifbdBFgc2uAwu95J20MxoyggsA1m/JEVN/O7a
+G7pNq5nSLRO9mAli8MBIAAOgtl5R8E28LEQL6vKAHRuLmaSiB7ztaCdzlBwq9fCd
+BI8fe5hH+wVh7RrToRcdZXjDakXa18vwUe8PHbM/ui4x4t1naEaGxPDFI9MzY+Kn
+YjMMQk6YDMt+jAPN1u78cb1Q+Mi6WXZViHou2qU9NI7ubrCXVnMgMmtK5hXTb2HF
+oKI2gP7+cOFK3323xyDaqzgZ65ZI2FlGZy5JkUoZfOCZEXxwme1eTwmzi6a/qHzg
+2zHQJghNTu0ZQsQaF9r3IVBAV3PgGwIDAQABAoICAAXdIBM7CQzVrM6ff61E61oj
+5Evu3qcyZ4kyVJcmjiMhc0hQup0eeO2gABbhbXkRhgWkR7X4xWI/Suiomb8rX90E
+Lzop+OcGsZ3jqiqrtdNeRdKYPWoe2715G0dWH+OXXV0RhbkiM7rx6PWSJoIRIinj
+kJnc2VAZIGaM6fz2vXNfj3Y9j/LwZ6a+/odbkF9B1I8Sw3cCULGrmoJhfl+vh9rk
+ALpLl5aUl5n+rS7d97FJNbh6+B8a/ADmjsxzxNFM+aAtn9qytirgcbk8ismwSMv4
+zeyEWj5FAxDnLuaPjMQ4wkIftFfjaDSJz4J8Sw1qKvAIk4RplM2338yoFO4ZwrF5
+3LIw/AskywUJxR+QjHQ5sy4/v1KK7nUIRr9+U5ytlxa2BuAziuw4VpTMIyphW8HF
+PIVdq3v9pzrAaBpXRzBt9blBTQOPAO4poEOKcz3idxFIf2UekTtsmeA8o464rQSv
+U2Y4pVkOLNehpIHPQx+u51tMDEL1ZtYwG6jItWmw+NYtSYSpyZVTdbDSPR6XMKM5
+nyapKd3VJ6FUNisI3DETjAbtLoY/2pCV5/NYZjCtlBpIdprautaLPA6kUwgwGS/R
+HoUS+56kPvcquoZmbIYVzq4992+CaXE11UgrBnmOIMbafrBZASZtEJ69BaDHHAuN
+ml9A6/UYl6AKgThZuTCFAoIBAQDiEVI1chhl1iHqnaWT5aEdi0awAY9Npc9RejNw
+l93uiVJi49PFRFzsYQWRZdZ4/NNs1kGHomcIKPsEzjMNla/5osf8cR7h19JGd1ZW
+xpb0saZJ9+t/YrXMU1A3vF7VDjxYEkQnX6jdQY0ICzOPrpTHARs3X0NlKyFODWPB
+Fcb96F7b3AxJeauHgETHrmBfKVYDs6sOqikTxHpHjE/L6/y7wJjIvq1nbzxiJy2Y
+P5WhdCcKW+roaAsIhYAjCzji2NcYffHiTQYAGxepL9krENXPLLVkf1Gdqy9cEf1J
+jNnFmKa96HirL1ewCvbFh6UNZitImHa5vO1AZXTbiDgOgOefAoIBAQDphrbRGQlx
+D2NVIE3aRNVcIdG+wdGxSS+sK2Pa3hBKUjrxFp4tU0Mt+tHDRwAW6cVCkeNYM6bs
+M4KbnXTjTT2XCHoxkqc/BpluLVrfb+P2aGJyX2QX+SHviCqXaYqyzSw3Tdi8GvWH
+VY5gBONXZ/SHesiMBrGY03ULpH6tmfZ/UFREENBNXkEs0Mv7CHA5P7boI87GkVmd
+ZI1QYeBoPwq4RydBWnWD2+SYW+eHlTHSAy6nxC/LcQZqwwLhKdgHDYGgvSo2T9yW
+psc9a8OcDvYdm0jeL45DB9pcXE/FGZ16X29Wq6hoVN2aeTjrO+IMXM3uKafr10wW
+e/J9qFGDmmYFAoIBADuolIhULsoZI2Q17C9GhykzyxjBoJ6+JiL7W73X5hKAHMTK
+GOXTL66VwBFpzZqqJeVv+WUg343QusW+4Mwx93mqkpo1BBBXkz9TWO6Xg9jZVOfq
+TDSWySE9z0qWJHSXSCd50pCNdxPEq8I2qom9abfGu/b15eQ56JUfhXa8F4KEIxxk
+Sr3NJQ4iNIR5qScT0oYxkO/SyfpUfGyLQ7et9Elb/zXi1AIa4dWJP0gRZ5xu+aqL
+LUfdxSOfj3wwBvgef00QV5f/+ZhnjevxG5941uPQiaIW02QHe/0RJkWVrRavPTma
+stWCLeLgUdU5Ab6yerOywIotqHK5E4invxtcu0MCggEBAOLqlkaEb5o++6TCKSRI
+8pH+AtO7fkko9nv0BamtUmMFmGSgN7+PQp4xNRbtrPaW3akcHa+dMTwfqXARBn3A
+lnJmOGZnPMCPZxOaWsz26qqLL+43Jwnseb9JrylF0xJ/L9HlgQ73m1GQHzLKTSan
+ywLCmpEGCBiakQdpJfcGvnFj2x3wwJgNWIN1uGAMCRB4CwFzmf91SYEZLf/Hu8lQ
+SNhbu5dTkRE54NzzoP0sSibqFLHMfyzOfQ/MwsWMZXAk/ar1ZUk1PQHeuYfDaWYB
+W8HVHG9aAoC75sEMqi65/z3j8kpjrtcCb/skg9yAadzdaPVd4N/YawUGF9Fmdx7M
+LwkCggEAA7Z1nof0SnAILuaiW4moO368G9wRjIexIZGiooDUQrek5oOLcb7n8EvO
+J1n2BDqILpeusEzCOIoEDBDBPX8i4NnFGj+bwfkoop47zaSMwcWHFciTkkaFnGH6
+AlXc/oDBL8/6YXPSpE5ihw7oNzsoap12niHgUYwC91QLfPdlyCvuiysWDWlGWK5d
+zqglATmt2Wvir+vF4OPnnxGS4DcqYGu6dOSpjF1Pl7QXxNBRKAQJnlLjxw66y1Wm
+jFxf8NXXs1tphpdUdQPuIfmB/g0WzpaGSKpTfL+Ex5+m9FPm+X4Luoe8RfH6lB6P
+NeDaCQSbZnEP9SYC+JZstmKE/Uwqyw==
+-----END PRIVATE KEY-----
diff --git a/libwvdrmengine/apex/com.google.android.widevine.pk8 b/libwvdrmengine/apex/com.google.android.widevine.pk8
new file mode 100644
index 00000000..3048fb53
Binary files /dev/null and b/libwvdrmengine/apex/com.google.android.widevine.pk8 differ
diff --git a/libwvdrmengine/apex/com.google.android.widevine.rc b/libwvdrmengine/apex/com.google.android.widevine.rc
new file mode 100644
index 00000000..381d0d69
--- /dev/null
+++ b/libwvdrmengine/apex/com.google.android.widevine.rc
@@ -0,0 +1,10 @@
+on apex-ready
+ mkdir /data/vendor/mediadrm 0770 media mediadrm
+
+service vendor.drm-widevine-hal /apex/com.google.android.widevine/bin/hw/android.hardware.drm-service.widevine
+ interface aidl android.hardware.drm::IDrmFactory/widevine
+ class hal
+ user media
+ group media mediadrm drmrpc system
+ ioprio rt 4
+ task_profiles ProcessCapacityHigh
\ No newline at end of file
diff --git a/libwvdrmengine/apex/com.google.android.widevine.x509.pem b/libwvdrmengine/apex/com.google.android.widevine.x509.pem
new file mode 100644
index 00000000..cada02c7
--- /dev/null
+++ b/libwvdrmengine/apex/com.google.android.widevine.x509.pem
@@ -0,0 +1,35 @@
+-----BEGIN CERTIFICATE-----
+MIIGJzCCBA+gAwIBAgIUCgS86NBn7DoD3rVyOm1iQAcTfPowDQYJKoZIhvcNAQEL
+BQAwgaExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQH
+DA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQLDAdBbmRy
+b2lkMR0wGwYDVQQDDBRjb20uYW5kcm9pZC53aWRldmluZTEiMCAGCSqGSIb3DQEJ
+ARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAgFw0yMjA4MzAyMDQ0MjhaGA80NzYwMDcy
+NjIwNDQyOFowgaExCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYw
+FAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lkMRAwDgYDVQQL
+DAdBbmRyb2lkMR0wGwYDVQQDDBRjb20uYW5kcm9pZC53aWRldmluZTEiMCAGCSqG
+SIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBALj/ULAiAD/wWpFRG/MjnnCFB5qNaEzIPs9xXtxCtR8P2/q2
+05VXiEK2uXWUoFSsyfdV7q5wX+B9lRnHAdVRWf2odf7G0/aM9h7F/Vtr5H1Yb9JU
+gFArhgcpbFVFxuFyjdTiIdJYFzZxoT/IctDHsGNAFscvcQtzOKk3Plg0Sr6105QE
+AZqw3HqZDmnjijgAq1Sc3dznx0DI7B57d3mMMvL/JTQfiwbqKGK6VHFoMYlKUrmD
+xDJ4g8iEnVG1RIyoxiGgItbNIQQjh44t9nndDFJC+wIcrv++t8wcYEvkI8wFkCuw
+hG8v8/p0lpqo/OPQNBbWSaGOHVMmdQO2dQ5YEwBZOHJ23i654RI8VHgfhm4PH1B7
+b0Qav27Bs0YDJPY6PUrEFgTo2299r4qCfGChxXD6r0WeVqD6lTCkeV76NtQOmBnO
+1ZQ2xOhj1NCn7SCHH7GHbHbgBI84sVerUWETtb9+ZpSLItgzho1Fb3XDp9u244kO
+pUN5qgPFaipSe4LjZf0r9iXGMXYgQTi+OlUqrYcHR7Oz9SaWCQoqk7J92Pskd7dB
+mFZF7ghuKAYSQf6jYCSux60OEtK6jN3sTJW50Zb7Qnz9U0nKoaN2xzmuHR41XKUq
+Z0sh4EFYj3kcLeQhSnWPZ65s2t784uYfV1/0i5eHwxj6rLA+1VWQr4evf0k/AgMB
+AAGjUzBRMB0GA1UdDgQWBBQqjWyCvgqoov7Ko/eidxfa9+TBJzAfBgNVHSMEGDAW
+gBQqjWyCvgqoov7Ko/eidxfa9+TBJzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
+DQEBCwUAA4ICAQA+sElhd7fMrhtWNaxFajWqhtDjfg2lxRjl4txYITyMC6ITtvuD
+3Wi2c9VxDQj3x8M7L1eWEfq5pZOgzrm1wqhgKc0jbpdplm4QdfatdsDWVGPauxmK
+C2ZGpPsHwIXgzZ0Zj9gi8Lk6xVN2HAS2aDsaOWhmT1mwkDwW9oMpEQK2ZGA7YHgH
+/HsvolI5BAO9XDqdBUMi9+VwfMNGeCSfc1iMb+kDZbVThMHI4yKf6ikIuGgjr0En
+G0Q0/ME38vN0c3LWz+Xgy2oHPEEn2NAOAdFSA4NpjR/BEkZk1rJb1jyyfsuFnKbF
+0MkrNxnUfsn1tUxdGBT13+BEOMNGB30PoV4U6PsKkH4juFJ0LraSzWpggFy6YGFi
+qOJ8hgwrmdC5mWxSDmi4GfeoUacsSppBld1H4lUAwbpJykbr1cNI6ZzuaO6o01DB
+u2FmqVEAnItMhTeR0uOsiNJUPX8l/GmpxS7Uh2gzGaTHRPzReCGNVzcGIvez4OEQ
+mRNFjdmNjAVGph+Pa2mqj+n7aItgOmPWKArtrGaNxPTgvWV/8GAQanfhwNN3NgPn
+wtRdQtwXYv365DnRu3RHmOtQkAZcOOeYybFTntSxnylVvaSJds+4+K7mhQulr1oY
+vqbbKP1DY8WOFBVjURDX7BiJDM1EnOOpWdEGbpVL7D1vx/hhvFSWbWm5BQ==
+-----END CERTIFICATE-----
diff --git a/libwvdrmengine/apex/com.google.android.widevine.xml b/libwvdrmengine/apex/com.google.android.widevine.xml
new file mode 100644
index 00000000..cc21f325
--- /dev/null
+++ b/libwvdrmengine/apex/com.google.android.widevine.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ android.hardware.drm
+ 1
+ IDrmFactory/widevine
+
+
\ No newline at end of file
diff --git a/libwvdrmengine/apex/file_contexts b/libwvdrmengine/apex/file_contexts
new file mode 100644
index 00000000..4a6b094a
--- /dev/null
+++ b/libwvdrmengine/apex/file_contexts
@@ -0,0 +1,3 @@
+(/.*)? u:object_r:vendor_file:s0
+/bin/hw/android\.hardware\.drm-service\.widevine u:object_r:hal_drm_widevine_exec:s0
+/etc(/.*)? u:object_r:vendor_configs_file:s0
\ No newline at end of file
diff --git a/libwvdrmengine/apex/linker.config.json b/libwvdrmengine/apex/linker.config.json
new file mode 100644
index 00000000..ccf5e05e
--- /dev/null
+++ b/libwvdrmengine/apex/linker.config.json
@@ -0,0 +1,3 @@
+{
+ "permittedPaths": ["/vendor/${LIB}"]
+}
\ No newline at end of file
diff --git a/libwvdrmengine/cdm/Android.bp b/libwvdrmengine/cdm/Android.bp
index dae4e43e..ca3cb2c8 100644
--- a/libwvdrmengine/cdm/Android.bp
+++ b/libwvdrmengine/cdm/Android.bp
@@ -77,5 +77,4 @@ cc_library_static {
],
proprietary: true,
-
}
diff --git a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp
index af144e1d..ca7bd98a 100644
--- a/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp
+++ b/libwvdrmengine/cdm/core/src/oemcrypto_adapter_dynamic.cpp
@@ -42,6 +42,7 @@ using namespace wvoec3;
using video_widevine::ProvisioningResponse;
using wvcdm::kLevel3;
using wvcdm::kLevelDefault;
+using namespace std;
namespace {
@@ -931,7 +932,19 @@ class Adapter {
return result;
}
if (level1_library_ == nullptr) {
- level1_library_ = dlopen(library_name.c_str(), RTLD_NOW);
+ vector library_paths = {"/vendor/", "/system/", "/odm/"};
+ string sub_dir;
+ #if __LP64__
+ sub_dir = "lib64/";
+ #else
+ sub_dir = "lib/";
+ #endif
+
+ for (auto& path : library_paths) {
+ level1_library_ = dlopen((path + sub_dir + library_name).c_str(), RTLD_NOW);
+ if (level1_library_) break;
+ }
+
if (level1_library_ == nullptr) {
LOGW("Could not load %s. Falling back to L3. %s", library_name.c_str(),
dlerror());
diff --git a/libwvdrmengine/level3/Android.bp b/libwvdrmengine/level3/Android.bp
index 49a179d1..238bab65 100644
--- a/libwvdrmengine/level3/Android.bp
+++ b/libwvdrmengine/level3/Android.bp
@@ -74,5 +74,4 @@ cc_library_static {
proprietary: true,
owner: "widevine",
-
}
diff --git a/libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml b/libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml
new file mode 100644
index 00000000..cc21f325
--- /dev/null
+++ b/libwvdrmengine/manifest_android.hardware.drm-service-lazy.widevine.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ android.hardware.drm
+ 1
+ IDrmFactory/widevine
+
+
\ No newline at end of file