对于android2.3编译时候选择下面的情况,既可以对dex进行preopt优化了。
如何从apk生成odex
在BoardConfig.mk中加入
# Enable the optimized DEX
WITH_DEXPREOPT=true
或者直接修改system.prop
# ODEX
dalvik.vm.verify-bytecode=true
$ cat buildspec.mk
TARGET_BUILD_VARIANT:=user
TARGET_BUILD_TYPE:=release
编译相关文件:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
build/core/product_config.mk:164
# Hack to make the linux build servers use dexpreopt (emulator-based
# preoptimization). Most engineers don't use this type of target
# ("make PRODUCT-blah-user"), so this should only tend to happen when
# using buildbot.
# TODO: Remove this once host Dalvik preoptimization is working.
ifeq ($(TARGET_BUILD_VARIANT),user)
WITH_DEXPREOPT_buildbot := true
endif
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
build/core/dex_preopt.mk:127
# dexpreoption for binary released jars
# ONLY enabled in custom release
ifeq ($(PARTIAL_BUILD),true)
ifeq ($(WITH_DEXPREOPT),true)
$(foreach m,$(DEXPREOPT_BINARY_RELEASE_BOOT_JARS_MODULES), \
$(eval $(call install-dexpreopt-jars.binary-release,$(m))) \
$(eval DEXPREOPT_BINARY_RELEASE_BOOT_JARS += \
$(TARGET_OUT_JAVA_LIBRARIES)/$(m).jar \
$(TARGET_OUT_JAVA_LIBRARIES)/$(m).odex \
) \
)
endif
endif
# $(1): the input .jar or .apk file
# $(2): the output .odex file
define dexpreopt-one-file
$(hide) $(DEXPREOPT) --dexopt=$(DEXPREOPT_DEXOPT) --build-dir=$(DEXPREOPT_BUILD_DIR) \
--product-dir=$(DEXPREOPT_PRODUCT_DIR) --boot-dir=$(DEXPREOPT_BOOT_JAR_DIR) \
--boot-jars=$(DEXPREOPT_BOOT_JARS) $(DEXPREOPT_UNIPROCESSOR) \
$(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(1)) \
$(patsubst $(DEXPREOPT_BUILD_DIR)/%,%,$(2))
endef
调用于:
build/core/dex_preopt.mk:111: $$(call dexpreopt-one-file,$$(PRIVATE_DBJ_JAR),$$@)
build/core/package.mk:440: $(call dexpreopt-one-file,$@,$(patsubst %.apk,%.odex,$@))
build/core/java_library.mk:121: $(call dexpreopt-one-file,$<,$@)
build/core/prebuilt.mk:82: $(call dexpreopt-one-file,$@,$(patsubst %.apk,%.odex,$@))
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
build/core/package.mk:216
ifeq (true,$(WITH_DEXPREOPT))
ifeq (,$(TARGET_BUILD_APPS))
ifneq (,$(LOCAL_SRC_FILES))
ifndef LOCAL_DEX_PREOPT
LOCAL_DEX_PREOPT := true
endif
endif
endif
endif
实际编译时对生成apk的地方:
# Define the rule to build the actual package.
$(LOCAL_BUILT_MODULE): $(AAPT) | $(ZIPALIGN)
ifeq ($(LOCAL_DEX_PREOPT),true)
# Make sure the boot jars get dexpreopt-ed first
$(LOCAL_BUILT_MODULE): $(DEXPREOPT_BOOT_ODEXS) | $(DEXPREOPT) $(DEXOPT)
endif
$(LOCAL_BUILT_MODULE): PRIVATE_JNI_SHARED_LIBRARIES := $(jni_shared_libraries)
ifneq ($(TARGET_BUILD_APPS),)
# Include all resources for unbundled apps.
$(LOCAL_BUILT_MODULE): PRODUCT_AAPT_CONFIG :=
endif
$(LOCAL_BUILT_MODULE): $(all_res_assets) $(jni_shared_libraries) $(full_android_manifest)
@echo "target Package: $(PRIVATE_MODULE) ($@)"
$(create-empty-package)
$(add-assets-to-package)
ifneq ($(jni_shared_libraries),)
$(add-jni-shared-libs-to-package)
endif
ifneq ($(full_classes_jar),)
$(add-dex-to-package)
endif
$(sign-package) // apk签名
@# Alignment must happen after all other zip operations.
$(align-package)
ifeq ($(LOCAL_DEX_PREOPT),true)// 对apk进行dexpreopt,定义于build/core/dex_preopt.mk
$(hide) rm -f $(patsubst %.apk,%.odex,$@)
$(call dexpreopt-one-file,$@,$(patsubst %.apk,%.odex,$@))
$(call dexpreopt-remove-classes.dex,$@)
built_odex := $(basename $(LOCAL_BUILT_MODULE)).odex
$(built_odex): $(LOCAL_BUILT_MODULE)
endif
apk签名函数定义于文件:build/core/definitions.mk +1456
# Sign a package using the specified key/cert.
#
define sign-package
$(hide) mv $@ $@.unsigned
$(hide) java -jar $(SIGNAPK_JAR) \
$(PRIVATE_CERTIFICATE) $(PRIVATE_PRIVATE_KEY) $@.unsigned $@.signed
$(hide) mv $@.signed $@
endef
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
./core/main.mk:183: WITH_DEXPREOPT := true
./core/main.mk:246: WITH_DEXPREOPT := true
./core/main.mk:252: ifeq ($(HOST_OS)-$(WITH_DEXPREOPT_buildbot),linux-true)
./core/main.mk:253: WITH_DEXPREOPT := true
183
ifeq (user, $(TARGET_BUILD_VARIANT))
WITH_DEXPREOPT := true
endif
# Bring in dex_preopt.mk
include $(BUILD_SYSTEM)/dex_preopt.mk
246
user_variant := $(filter userdebug user,$(TARGET_BUILD_VARIANT))
enable_target_debugging := true
ifneq (,$(user_variant))
...
# enable dex pre-optimization for all TARGET projects in default to
# speed up device first boot-up
WITH_DEXPREOPT := true
...
# TODO: Remove this and the corresponding block in
# config/product_config.make once host-based Dalvik preoptimization is
# working.
ifneq (true,$(DISABLE_DEXPREOPT))
ifeq ($(HOST_OS)-$(WITH_DEXPREOPT_buildbot),linux-true)
WITH_DEXPREOPT := true
endif
endif
...
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
build/core/java_library.mk +68
ifeq (true,$(WITH_DEXPREOPT))
ifeq (,$(TARGET_BUILD_APPS))
ifndef LOCAL_DEX_PREOPT
LOCAL_DEX_PREOPT := true
endif
endif
endif
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
build/core/java_library.mk +68
ifneq ($(filter APPS,$(LOCAL_MODULE_CLASS)),)
ifeq (true,$(WITH_DEXPREOPT))
ifeq (,$(TARGET_BUILD_APPS))
ifndef LOCAL_DEX_PREOPT
LOCAL_DEX_PREOPT := true
endif
endif
endif
endif
分享到:
相关推荐
NULL 博文链接:https://qianjigui.iteye.com/blog/1987213
android 反编译 逆向 vdex2dex odex2dex 查看app源代码
android动态加载dex so加载类库
这是关于打包工具的文档,为广大的移动开发用户提供多 dex打包方法
生成dex源码
odex和apk合成dex 一、APK生成odex文件方法: 编译开源GIT上的build/tools/dexpreopt/dexopt-wrapper这个,使用dexopt-wrapper即可,操作步骤 将dexopt-wrapper放到/data/local目录中,使用adb shell执行linux...
通过优化,Android通过反射注入Dex到dexElements数组,实现Bug的热修复,
Project move to SourceForge and Bit...Tools to work with android .dex and java .class files dex-reader/writer: Read/write the Dalvik Executable (.dex) file. It has a light weight API similar with A
ReDex是最初在Facebook开发的Android字节码(dex)优化器。 它提供了一个用于读取,编写和分析.dex文件的框架,以及一组使用此框架来改进字节码的优化过程。 由ReDex优化的APK应该比其源更小更快。
使用StringFog插件自动对 dex 中的字符串进行加密
dex2jar-v2.3最新版本,将apk中的classes.dex转化成Jar文件。然后配合 jd-gui 查看java源码
Android反编译工具dex2jar,用于加.dex反编译成.class文件
通过封装Dalvik_dalvik_system_DexFile_openDexFile_bytearray函数,可以在解密出dex文件的byteArray数组后,不需要保存到文件系统的路径上,直接通过4.0的函数在内存中读取。
Android内存加载运行DEX文件示例代码。 解决自定义CLassLoader加载文件不安全的问题
非常方便汉化工作者,对APK或Dex文件进行简易的反编译回编译操作; ___________________________________________________________________ 功能特性 · 对*.Apk 文件 反编译 及 回编译 用于汉化修改 · 对*....
AndroidKiller_v1.3.1修复版 1. 解决高版本dex2jar卡死的问题,一次性反编译成功,可以直接看java代码; 2. 并更新最新版dex2jar和apktool.jar等插件 3. 修复编译时No resource found that matches the given name:...
TurboDex: Fast load dex in memory 中文 It is generally known that load an unoptimized Dex file at runtime in Android (especially in ART mode) would take a long time. When your App is using MultiDex ...
dx(Android jar转换成dex工具) 使用的命令: dx --dex --output hack_dex.jar hack.jar 工具的使用可以参考:http://blog.csdn.net/qxs965266509/article/details/50390325
最后发现dex2jar.bat不能直接拖到命令行执行,必须cd切换到dex2jar.bat所在目录下执行>dex2jar.bat classes.dex才行,希望对大家有帮助.. -------------------------------------------------------------------------...
Android中内存加载dex