Loading Android.mk +79 −6 Original line number Diff line number Diff line Loading @@ -28,7 +28,32 @@ recovery_common_cflags := \ -Werror \ -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION) # librecovery_ui (static library) # librecovery_ui_ext (shared library) # =================================== include $(CLEAR_VARS) LOCAL_MODULE := librecovery_ui_ext # LOCAL_MODULE_PATH for shared libraries is unsupported in multiarch builds. LOCAL_MULTILIB := first ifeq ($(TARGET_IS_64_BIT),true) LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib64 else LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib endif LOCAL_WHOLE_STATIC_LIBRARIES := \ $(TARGET_RECOVERY_UI_LIB) LOCAL_SHARED_LIBRARIES := \ libbase \ liblog \ librecovery_ui include $(BUILD_SHARED_LIBRARY) # librecovery_ui (shared library) # =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := \ Loading @@ -40,21 +65,56 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := librecovery_ui LOCAL_CFLAGS := $(recovery_common_cflags) LOCAL_MULTILIB := first ifeq ($(TARGET_IS_64_BIT),true) LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib64 else LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib endif LOCAL_STATIC_LIBRARIES := \ libminui \ libotautil \ libbase LOCAL_SHARED_LIBRARIES := \ libbase \ libpng \ libz \ include $(BUILD_SHARED_LIBRARY) # librecovery_ui (static library) # =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := \ device.cpp \ screen_ui.cpp \ ui.cpp \ vr_ui.cpp \ wear_ui.cpp LOCAL_MODULE := librecovery_ui LOCAL_CFLAGS := $(recovery_common_cflags) LOCAL_STATIC_LIBRARIES := \ libminui \ libotautil \ LOCAL_SHARED_LIBRARIES := \ libbase \ libpng \ libz \ include $(BUILD_STATIC_LIBRARY) librecovery_static_libraries := \ $(TARGET_RECOVERY_UI_LIB) \ libbootloader_message \ libfusesideload \ libminadbd \ librecovery_ui \ libminui \ libverifier \ libotautil \ Loading Loading @@ -112,8 +172,6 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := recovery LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/bin # Cannot link with LLD: undefined symbol: UsbNoPermissionsLongHelpText Loading @@ -124,8 +182,12 @@ LOCAL_CFLAGS := $(recovery_common_cflags) LOCAL_STATIC_LIBRARIES := \ librecovery \ librecovery_ui_default \ $(librecovery_static_libraries) LOCAL_SHARED_LIBRARIES := \ librecovery_ui \ LOCAL_HAL_STATIC_LIBRARIES := libhealthd LOCAL_REQUIRED_MODULES := \ Loading Loading @@ -154,6 +216,17 @@ LOCAL_REQUIRED_MODULES += \ recovery-refresh endif LOCAL_REQUIRED_MODULES += \ librecovery_ui_ext # TODO(b/110380063): Explicitly install the following shared libraries to recovery, until `recovery` # module is built with Soong (with `recovery: true` flag). LOCAL_REQUIRED_MODULES += \ libbase.recovery \ liblog.recovery \ libpng.recovery \ libz.recovery \ include $(BUILD_EXECUTABLE) include \ Loading device.h +4 −0 Original line number Diff line number Diff line Loading @@ -119,8 +119,12 @@ class Device { std::unique_ptr<RecoveryUI> ui_; }; // Disable name mangling, as this function will be loaded via dlsym(3). extern "C" { // The device-specific library must define this function (or the default one will be used, if there // is no device-specific library). It returns the Device object that recovery should use. Device* make_device(); } #endif // _DEVICE_H recovery_main.cpp +27 −1 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ * limitations under the License. */ #include <dlfcn.h> #include <errno.h> #include <fcntl.h> #include <getopt.h> Loading Loading @@ -329,7 +330,32 @@ int main(int argc, char** argv) { printf("locale is [%s]\n", locale.c_str()); Device* device = make_device(); static constexpr const char* kDefaultLibRecoveryUIExt = "librecovery_ui_ext.so"; // Intentionally not calling dlclose(3) to avoid potential gotchas (e.g. `make_device` may have // handed out pointers to code or static [or thread-local] data and doesn't collect them all back // in on dlclose). void* librecovery_ui_ext = dlopen(kDefaultLibRecoveryUIExt, RTLD_NOW); using MakeDeviceType = decltype(&make_device); MakeDeviceType make_device_func = nullptr; if (librecovery_ui_ext == nullptr) { printf("Failed to dlopen %s: %s\n", kDefaultLibRecoveryUIExt, dlerror()); } else { reinterpret_cast<void*&>(make_device_func) = dlsym(librecovery_ui_ext, "make_device"); if (make_device_func == nullptr) { printf("Failed to dlsym make_device: %s\n", dlerror()); } } Device* device; if (make_device_func == nullptr) { printf("Falling back to the default make_device() instead\n"); device = make_device(); } else { printf("Loading make_device from %s\n", kDefaultLibRecoveryUIExt); device = (*make_device_func)(); } if (android::base::GetBoolProperty("ro.boot.quiescent", false)) { printf("Quiescent recovery mode.\n"); device->ResetUI(new StubRecoveryUI()); Loading tests/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -155,10 +155,10 @@ libupdater_static_libraries := \ librecovery_static_libraries := \ librecovery \ $(TARGET_RECOVERY_UI_LIB) \ libbootloader_message \ libfusesideload \ libminadbd \ librecovery_ui_default \ librecovery_ui \ libminui \ libverifier \ Loading Loading
Android.mk +79 −6 Original line number Diff line number Diff line Loading @@ -28,7 +28,32 @@ recovery_common_cflags := \ -Werror \ -DRECOVERY_API_VERSION=$(RECOVERY_API_VERSION) # librecovery_ui (static library) # librecovery_ui_ext (shared library) # =================================== include $(CLEAR_VARS) LOCAL_MODULE := librecovery_ui_ext # LOCAL_MODULE_PATH for shared libraries is unsupported in multiarch builds. LOCAL_MULTILIB := first ifeq ($(TARGET_IS_64_BIT),true) LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib64 else LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib endif LOCAL_WHOLE_STATIC_LIBRARIES := \ $(TARGET_RECOVERY_UI_LIB) LOCAL_SHARED_LIBRARIES := \ libbase \ liblog \ librecovery_ui include $(BUILD_SHARED_LIBRARY) # librecovery_ui (shared library) # =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := \ Loading @@ -40,21 +65,56 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := librecovery_ui LOCAL_CFLAGS := $(recovery_common_cflags) LOCAL_MULTILIB := first ifeq ($(TARGET_IS_64_BIT),true) LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib64 else LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/lib endif LOCAL_STATIC_LIBRARIES := \ libminui \ libotautil \ libbase LOCAL_SHARED_LIBRARIES := \ libbase \ libpng \ libz \ include $(BUILD_SHARED_LIBRARY) # librecovery_ui (static library) # =============================== include $(CLEAR_VARS) LOCAL_SRC_FILES := \ device.cpp \ screen_ui.cpp \ ui.cpp \ vr_ui.cpp \ wear_ui.cpp LOCAL_MODULE := librecovery_ui LOCAL_CFLAGS := $(recovery_common_cflags) LOCAL_STATIC_LIBRARIES := \ libminui \ libotautil \ LOCAL_SHARED_LIBRARIES := \ libbase \ libpng \ libz \ include $(BUILD_STATIC_LIBRARY) librecovery_static_libraries := \ $(TARGET_RECOVERY_UI_LIB) \ libbootloader_message \ libfusesideload \ libminadbd \ librecovery_ui \ libminui \ libverifier \ libotautil \ Loading Loading @@ -112,8 +172,6 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := recovery LOCAL_FORCE_STATIC_EXECUTABLE := true LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/system/bin # Cannot link with LLD: undefined symbol: UsbNoPermissionsLongHelpText Loading @@ -124,8 +182,12 @@ LOCAL_CFLAGS := $(recovery_common_cflags) LOCAL_STATIC_LIBRARIES := \ librecovery \ librecovery_ui_default \ $(librecovery_static_libraries) LOCAL_SHARED_LIBRARIES := \ librecovery_ui \ LOCAL_HAL_STATIC_LIBRARIES := libhealthd LOCAL_REQUIRED_MODULES := \ Loading Loading @@ -154,6 +216,17 @@ LOCAL_REQUIRED_MODULES += \ recovery-refresh endif LOCAL_REQUIRED_MODULES += \ librecovery_ui_ext # TODO(b/110380063): Explicitly install the following shared libraries to recovery, until `recovery` # module is built with Soong (with `recovery: true` flag). LOCAL_REQUIRED_MODULES += \ libbase.recovery \ liblog.recovery \ libpng.recovery \ libz.recovery \ include $(BUILD_EXECUTABLE) include \ Loading
device.h +4 −0 Original line number Diff line number Diff line Loading @@ -119,8 +119,12 @@ class Device { std::unique_ptr<RecoveryUI> ui_; }; // Disable name mangling, as this function will be loaded via dlsym(3). extern "C" { // The device-specific library must define this function (or the default one will be used, if there // is no device-specific library). It returns the Device object that recovery should use. Device* make_device(); } #endif // _DEVICE_H
recovery_main.cpp +27 −1 Original line number Diff line number Diff line Loading @@ -14,6 +14,7 @@ * limitations under the License. */ #include <dlfcn.h> #include <errno.h> #include <fcntl.h> #include <getopt.h> Loading Loading @@ -329,7 +330,32 @@ int main(int argc, char** argv) { printf("locale is [%s]\n", locale.c_str()); Device* device = make_device(); static constexpr const char* kDefaultLibRecoveryUIExt = "librecovery_ui_ext.so"; // Intentionally not calling dlclose(3) to avoid potential gotchas (e.g. `make_device` may have // handed out pointers to code or static [or thread-local] data and doesn't collect them all back // in on dlclose). void* librecovery_ui_ext = dlopen(kDefaultLibRecoveryUIExt, RTLD_NOW); using MakeDeviceType = decltype(&make_device); MakeDeviceType make_device_func = nullptr; if (librecovery_ui_ext == nullptr) { printf("Failed to dlopen %s: %s\n", kDefaultLibRecoveryUIExt, dlerror()); } else { reinterpret_cast<void*&>(make_device_func) = dlsym(librecovery_ui_ext, "make_device"); if (make_device_func == nullptr) { printf("Failed to dlsym make_device: %s\n", dlerror()); } } Device* device; if (make_device_func == nullptr) { printf("Falling back to the default make_device() instead\n"); device = make_device(); } else { printf("Loading make_device from %s\n", kDefaultLibRecoveryUIExt); device = (*make_device_func)(); } if (android::base::GetBoolProperty("ro.boot.quiescent", false)) { printf("Quiescent recovery mode.\n"); device->ResetUI(new StubRecoveryUI()); Loading
tests/Android.mk +1 −1 Original line number Diff line number Diff line Loading @@ -155,10 +155,10 @@ libupdater_static_libraries := \ librecovery_static_libraries := \ librecovery \ $(TARGET_RECOVERY_UI_LIB) \ libbootloader_message \ libfusesideload \ libminadbd \ librecovery_ui_default \ librecovery_ui \ libminui \ libverifier \ Loading