diff options
Diffstat (limited to 'cmds/installd/commands.cpp')
-rw-r--r-- | cmds/installd/commands.cpp | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index 322d537..09369ce 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -771,24 +771,11 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, dex2oat_compiler_filter_flag, NULL) > 0; char dex2oat_threads_buf[PROPERTY_VALUE_MAX]; - bool have_dex2oat_threads_flag = false; - if (!post_bootcomplete) { - have_dex2oat_threads_flag = property_get("dalvik.vm.boot-dex2oat-threads", - dex2oat_threads_buf, - NULL) > 0; - // If there's no boot property, fall back to the image property. - if (!have_dex2oat_threads_flag) { - have_dex2oat_threads_flag = property_get("dalvik.vm.image-dex2oat-threads", - dex2oat_threads_buf, - NULL) > 0; - } - // If there's neither, fall back to the default property. - } - if (!have_dex2oat_threads_flag) { - have_dex2oat_threads_flag = property_get("dalvik.vm.dex2oat-threads", - dex2oat_threads_buf, - NULL) > 0; - } + bool have_dex2oat_threads_flag = property_get(post_bootcomplete + ? "dalvik.vm.dex2oat-threads" + : "dalvik.vm.boot-dex2oat-threads", + dex2oat_threads_buf, + NULL) > 0; char dex2oat_threads_arg[PROPERTY_VALUE_MAX + 2]; if (have_dex2oat_threads_flag) { sprintf(dex2oat_threads_arg, "-j%s", dex2oat_threads_buf); @@ -1721,7 +1708,8 @@ fail: } static void run_aapt(const char *source_apk, const char *internal_path, - int resapk_fd, int pkgId, int min_sdk_version, const char *common_res_path) + int resapk_fd, int pkgId, int min_sdk_version, + const char *app_res_path, const char *common_res_path) { static const char *AAPT_BIN = "/system/bin/aapt"; static const char *MANIFEST = "/data/app/AndroidManifest.xml"; @@ -1735,40 +1723,48 @@ static void run_aapt(const char *source_apk, const char *internal_path, snprintf(resapk_str, sizeof(resapk_str), "%d", resapk_fd); snprintf(pkgId_str, sizeof(pkgId_str), "%d", pkgId); snprintf(minSdkVersion_str, sizeof(minSdkVersion_str), "%d", min_sdk_version); + bool hasCommonResources = (common_res_path != NULL && common_res_path[0] != '\0'); + bool hasAppResources = (app_res_path != NULL && app_res_path[0] != '\0'); if (hasCommonResources) { execl(AAPT_BIN, AAPT_BIN, "package", - "--min-sdk-version", minSdkVersion_str, - "-M", MANIFEST, - "-S", source_apk, - "-X", internal_path, - "-I", FRAMEWORK_RES, - "-I", common_res_path, - "-r", resapk_str, - "-x", pkgId_str, - "-f", - (char*)NULL); + "--min-sdk-version", minSdkVersion_str, + "-M", MANIFEST, + "-S", source_apk, + "-X", internal_path, + "-I", FRAMEWORK_RES, + "-r", resapk_str, + "-x", pkgId_str, + "-f", + "-I", common_res_path, + hasAppResources ? "-I" : (char*)NULL, + hasAppResources ? app_res_path : (char*) NULL, + (char*)NULL); } else { execl(AAPT_BIN, AAPT_BIN, "package", - "--min-sdk-version", minSdkVersion_str, - "-M", MANIFEST, - "-S", source_apk, - "-X", internal_path, - "-I", FRAMEWORK_RES, - "-r", resapk_str, - "-x", pkgId_str, - "-f", - (char*)NULL); + "--min-sdk-version", minSdkVersion_str, + "-M", MANIFEST, + "-S", source_apk, + "-X", internal_path, + "-I", FRAMEWORK_RES, + "-r", resapk_str, + "-x", pkgId_str, + "-f", + hasAppResources ? "-I" : (char*)NULL, + hasAppResources ? app_res_path : (char*) NULL, + (char*)NULL); } ALOGE("execl(%s) failed: %s\n", AAPT_BIN, strerror(errno)); } int aapt(const char *source_apk, const char *internal_path, const char *out_restable, uid_t uid, - int pkgId, int min_sdk_version, const char *common_res_path) + int pkgId, int min_sdk_version, const char *app_res_path, const char *common_res_path) { - ALOGD("aapt source_apk=%s internal_path=%s out_restable=%s uid=%d, pkgId=%d,min_sdk_version=%d, common_res_path=%s", - source_apk, internal_path, out_restable, uid, pkgId, min_sdk_version, common_res_path); + ALOGD("aapt source_apk=%s internal_path=%s out_restable=%s uid=%d, pkgId=%d,min_sdk_version=%d,\ + app_res_path=%s, common_res_path=%s", + source_apk, internal_path, out_restable, uid, pkgId, min_sdk_version, app_res_path, + common_res_path); static const int PARENT_READ_PIPE = 0; static const int CHILD_WRITE_PIPE = 1; @@ -1828,7 +1824,8 @@ int aapt(const char *source_apk, const char *internal_path, const char *out_rest } } - run_aapt(source_apk, internal_path, resapk_fd, pkgId, min_sdk_version, common_res_path); + run_aapt(source_apk, internal_path, resapk_fd, pkgId, min_sdk_version, app_res_path, + common_res_path); close(resapk_fd); if (pipefd[CHILD_WRITE_PIPE] > 0) { |