diff options
-rw-r--r-- | cmds/installd/commands.cpp | 15 | ||||
-rw-r--r-- | cmds/installd/commands.h | 2 | ||||
-rw-r--r-- | cmds/installd/installd.cpp | 5 | ||||
-rw-r--r-- | cmds/installd/otapreopt.cpp | 5 |
4 files changed, 18 insertions, 9 deletions
diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index f4d894b9ac..60118a8e95 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -725,7 +725,7 @@ static void run_patchoat(int input_fd, int oat_fd, const char* input_file_name, static void run_dex2oat(int zip_fd, int oat_fd, int image_fd, const char* input_file_name, const char* output_file_name, int swap_fd, const char *instruction_set, const char* compiler_filter, bool vm_safe_mode, bool debuggable, bool post_bootcomplete, - int profile_fd) { + int profile_fd, const char* shared_libraries) { static const unsigned int MAX_INSTRUCTION_SET_LEN = 7; if (strlen(instruction_set) >= MAX_INSTRUCTION_SET_LEN) { @@ -887,7 +887,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, int image_fd, const char* input_ + (debuggable ? 1 : 0) + (have_app_image_format ? 1 : 0) + dex2oat_flags_count - + (profile_fd == -1 ? 0 : 1)]; + + (profile_fd == -1 ? 0 : 1) + + (shared_libraries != nullptr ? 4 : 0)]; int i = 0; argv[i++] = DEX2OAT_BIN; argv[i++] = zip_fd_arg; @@ -940,6 +941,12 @@ static void run_dex2oat(int zip_fd, int oat_fd, int image_fd, const char* input_ if (profile_fd != -1) { argv[i++] = profile_arg; } + if (shared_libraries != nullptr) { + argv[i++] = RUNTIME_ARG; + argv[i++] = "-classpath"; + argv[i++] = RUNTIME_ARG; + argv[i++] = shared_libraries; + } // Do not add after dex2oat_flags, they should override others for debugging. argv[i] = NULL; @@ -1311,7 +1318,7 @@ bool merge_profiles(uid_t uid, const char *pkgname) { int dexopt(const char* apk_path, uid_t uid, const char* pkgname, const char* instruction_set, int dexopt_needed, const char* oat_dir, int dexopt_flags, const char* compiler_filter, - const char* volume_uuid ATTRIBUTE_UNUSED) + const char* volume_uuid ATTRIBUTE_UNUSED, const char* shared_libraries) { struct utimbuf ut; struct stat input_stat; @@ -1463,7 +1470,7 @@ int dexopt(const char* apk_path, uid_t uid, const char* pkgname, const char* ins } run_dex2oat(input_fd, out_fd, image_fd, input_file_name, out_path, swap_fd, instruction_set, compiler_filter, vm_safe_mode, debuggable, boot_complete, - reference_profile_fd); + reference_profile_fd, shared_libraries); } else { ALOGE("Invalid dexopt needed: %d\n", dexopt_needed); exit(73); diff --git a/cmds/installd/commands.h b/cmds/installd/commands.h index 81c13b499e..41cc209b56 100644 --- a/cmds/installd/commands.h +++ b/cmds/installd/commands.h @@ -56,7 +56,7 @@ bool merge_profiles(uid_t uid, const char *pkgname); int dexopt(const char *apk_path, uid_t uid, const char *pkgName, const char *instruction_set, int dexopt_needed, const char* oat_dir, int dexopt_flags, const char* compiler_filter, - const char* volume_uuid); + const char* volume_uuid, const char* shared_libraries); int mark_boot_complete(const char *instruction_set); int linklib(const char* uuid, const char* pkgname, const char* asecLibDir, int userId); int idmap(const char *target_path, const char *overlay_path, uid_t uid); diff --git a/cmds/installd/installd.cpp b/cmds/installd/installd.cpp index eb51e709de..e8fce91fd7 100644 --- a/cmds/installd/installd.cpp +++ b/cmds/installd/installd.cpp @@ -266,7 +266,8 @@ static int do_dexopt(char **arg, char reply[REPLY_MAX]) arg[5], // oat_dir dexopt_flags, arg[7], // compiler_filter - parse_null(arg[8])); // volume_uuid + parse_null(arg[8]), // volume_uuid + parse_null(arg[9])); // shared_libraries } static int do_merge_profiles(char **arg, char reply[REPLY_MAX]) @@ -414,7 +415,7 @@ struct cmdinfo cmds[] = { { "create_user_data", 4, do_create_user_data }, { "destroy_user_data", 3, do_destroy_user_data }, - { "dexopt", 9, do_dexopt }, + { "dexopt", 10, do_dexopt }, { "markbootcomplete", 1, do_mark_boot_complete }, { "rmdex", 2, do_rm_dex }, { "freecache", 2, do_free_cache }, diff --git a/cmds/installd/otapreopt.cpp b/cmds/installd/otapreopt.cpp index 245694a1f4..ac511ec8dd 100644 --- a/cmds/installd/otapreopt.cpp +++ b/cmds/installd/otapreopt.cpp @@ -365,7 +365,8 @@ private: package_parameters_[5], // oat_dir atoi(package_parameters_[6]), // dexopt_flags package_parameters_[7], // compiler_filter - ParseNull(package_parameters_[8])); // volume_uuid + ParseNull(package_parameters_[8]), // volume_uuid + ParseNull(package_parameters_[9])); // shared_libraries return ret; } @@ -483,7 +484,7 @@ private: // to compile, instead of the A properties we could get from init/get_property. SystemProperties system_properties_; - const char* package_parameters_[9]; + const char* package_parameters_[10]; // Store environment values we need to set. std::vector<std::string> environ_; |