安卓工作室是否会压缩classes.dex文件?

4
似乎输出文件夹中的apk文件的classes.dex与已安装应用程序的不同。我正在使用classes.dex文件进行某些安全问题,因此通常会解压缩最终的apk文件并从classes.dex文件中获取信息。但是当我在运行时读取classes.dex文件时,文件大小差异很大(8MB vs 46KB)。应用程序本身运行良好。有人说Proguard使classes.dex文件变轻,但我关闭了Proguard(在build.gradle中使用useProguard false,minifyEnabled false)。是否有什么我可以尝试的方法?谢谢您提前。简而言之:app/build/outputs/apk/app.apk文件的classes.dex与实际安装位置的应用程序的classes.dex不同。

你的问题不清楚。你试图实现什么? - Abhi
@Abhi,我添加了摘要:)谢谢 - wtkim
1个回答

4
实际上,Android Studio会进行转换,并且您使用的“压缩”术语在构建时默认发生。
Android应用程序的编译过程与其他Java应用程序非常不同。但是它以相同的方式开始:使用javac命令将Java源代码文件编译为.class文件: conversion_to_class_file .class文件包含标准的Oracle JVM Java字节码。但是Android设备不使用这种字节码格式。相反,Android具有自己独特的字节码格式,称为Dalvik。 Dalvik字节码(如Oracle JVM字节码)是理论处理器的机器码指令。
编译过程需要将.class文件和任何.jar库转换为一个包含Dalvik字节码的单个classes.dex文件。这是使用dx命令完成的:这就是生成您的classes.dex文件的方式。

conversion_to_dex_file

"

classes.dex文件和应用程序的资源(例如图片和布局)随后被压缩成一个类似于zip的文件,称为Android包或.apk文件。这是使用Android资产打包工具或aapt完成的:

"

conversion_to_apk_file

在构建过程中,您的Proguard规则将有助于:

  • 缩小 - 检测和删除未使用的类、字段、方法和属性。
  • 优化 - 分析和优化方法的字节码。
  • 混淆 - 使用短而无意义的名称重命名剩余的类、字段和方法。

希望这对您有所帮助。
如果您想了解更多关于Android应用程序的构建和运行方式, 请阅读此文。
来源: https://github.com/dogriffiths/HeadFirstAndroid/wiki/How-Android-Apps-are-Built-and-Run

.


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接