当前位置: 首页 > news >正文

android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvik

目录

android studio 输出apk过程:https://www.jianshu.com/p/2babb51d2556

bsh文件:https://baike.baidu.com/item/bsh/465916?fr=aladdin

dex文件:https://www.jianshu.com/p/7fadc0e3b067

JVM、DVM、ART的区别:https://www.jianshu.com/p/047d5b00ff7a

 

ART虚拟机

将apk文件使用360加压边可以看到Android studio 打包后输出的apk内在文件

IOS与安卓的区别:

android studio 输出apk过程:https://www.jianshu.com/p/2babb51d2556

1.通过aapt打包res资源文件,生成R.java、resources.arsc(映射文件)和res文件(二进制 & 非二进制如res/raw和pic保持原样)
2.处理.aidl文件,生成对应的Java接口文件
3.通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件
4.通过dex命令,将.class文件和第三方库中的.class文件处理生成classes.dex
5.通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件和classes.dex一起打包生成apk
6.通过Jarsigner工具,对上面的apk进行debug或release签名7.通过zipalign工具,将签名后的apk进行对齐处理。

 

bsh文件:https://baike.baidu.com/item/bsh/465916?fr=aladdin

bsh是UNIX命令,bsh 命令调用 Bourne Shell,后者是一个交互式命令解释器和命令编程语言。该 shell 或者从终端键盘交互式地或者从文件执行命令

dex文件:https://www.jianshu.com/p/7fadc0e3b067

能够被DVM识别、加载并执行的文件格式

二.如何生成和执行dex文件

  • 生成class文件
    • 可通过IDE自动帮我们build,无需手动生成
    • 可手动通过dx命令去生成dex文件
    •  手动运行dex文件在手机

JVM、DVM、ART的区别:https://www.jianshu.com/p/047d5b00ff7a

dex文件结构:https://www.jianshu.com/p/6224353197fd

 

.dex文件结构和.class文件结构差异的地方很多,但从携带的信息上看,.dex.class文件是一致的:

  • header:存储了各个数据类型的起始地址、偏移量等信息。
  • proto_ids:描述函数原型信息,包括返回值,参数信息。比如“test:()V”
  • methods_ids:函数信息,包括所属类及对应的proto信息。

虽然.dex文件的结构很紧凑,但想要运行时的性能得到进一步提升,还需要对dex文件进行进一步优化。优化主要针对以下几个方面:

  • 调整所有字段的字节序和对齐结构中的每一个域
  • 验证.dex文件中的所有类
  • 对一些特定的类进行优化,对方法里的操作码进行优化

.dex文件经过优化后文件大小会膨胀,大约增加到原来的1~4倍。对于内置应用,一般在系统编译后,便会生成优化文件odex(Optimized dex)。一个Android应用程序,需要经过以下过程才可以在Dalvik虚拟机上运行:

  • Java源文件编译成.class文件
  • 使用dx工具把.class文件转换成.dex文件
  • 使用aapt工具把.dex文件、资源文件以及AndroidManifest.xml文件组合成APK
  • APK安装到Android设备运行

 

ART虚拟机

ART(Android Runtime)虚拟机是Android 4.4发布的,用来替换Dalvik虚拟机


 

将apk文件使用360加压边可以看到Android studio 打包后输出的apk内在文件

 

IOS与安卓的区别:


1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。

iphone沙盒机制解释:应用程序位于文件系统的严格限制部分,程序不能直接访问其他应用程序。以杀毒软件中的沙盒技术解释一下。“沙盒”技术是发现可疑行为后让程序继续运行,当发现的确是病毒时才会终止。“沙盒”技术的实践运用流程是:让疑似病毒文件的可疑行为在虚拟的“沙盒”里充分表演,“沙盒”会记下它的每一个动作;当疑似病毒充分暴露了其病毒属性后,“沙盒”就会执行“回滚”机制:将病毒的痕迹和动作抹去,恢复系统到正常状态。
安卓虚拟机机制解释:android本身不是为触摸屏打造的,所以所有的应用都是运行在一个虚拟的环境中,由底层传输数据到虚拟机中,再由虚拟机传递给用户UI,任何程序都就可以轻松访问其他程序文件。

 

ART和Dalvik

 Dalvik

打包的过程中 会先将.java等源码通过javac编译成.class文件,再通过dx.class文件转换成Dalvik虚拟机执行的.dex文件。

应用启动的时候 先将.dex文件 转换成机器码,又因为65536的文件,导致在应用冷启动的时候有一个合包的过程,最后的结果就是app的启动时间有可能变慢,这就是Dalvik虚拟机的JIT(Just in Time)特性。

 

ART除了兼容了Dalvik虚拟机的特性之外,还有一个很好的特性AOT(Ahead of Time),这个特性就是把 .dex 文件转换成机器码 这个步骤提前到了 应用安装 的时候,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,因此会极大的提升APP冷启动速度。

ART 虚拟机的优缺点

优点:

  • 加快APP冷启动速度
  • 提升GC速度
  • 提供功能全面的Debug特性

缺点:

  • APP安装速度慢,因为在APK安装的时候要生成可运行.oat文件
  • APK占用空间大,因为在APK安装的时候要生成可运行.oat文件

相关文章:

  • LruCache使用,基本数据类型 引用类型,面试==和equals的区别 本质,onCreate 和onResume 区别,
  • Fragment 知识梳理, FragmentPagerAdapter ,RecyclerView 知识梳理,sharepreference,IntentService,service交互
  • kotlin 学习,val和var的区别
  • kotlin ==和===区别,kotlin数组,kotlin 三引号,if-else 调监控子很语句,
  • CMake 进行 NDK 开发之初体验, Error occurred while communicating with CMake server
  • dump java heap,GPU,Lint
  • 处理屏幕旋转导致的重建,单例对象,StringBuilder进行拼接,ProGurad 混淆,VectorDrawable 及 AnimatedVectorDrawable,IntentService
  • SVG,Vector,gradle
  • 蓝牙通讯数据传输,蓝牙UUID,BluetoothAdapter;adb input 模拟系统输入,adb logcat:抓包,抓日志,蓝牙通讯,adb命令实现手机之间互相控制,虚拟按键
  • gradle中的 compileSdkVersion minSdkVersion targetSdkVersion
  • android 解决中文乱码,reload和cnvert区别
  • JetGradlePlugin,transformDexArchiveWithExternalLibsDexMergerForDebug
  • jcenter()和mavenCentral()区别
  • v4 v7包的使用,Android Gradle的理解,版本号对应Gradle发行版本
  • 程序员接私活
  • 【刷算法】求1+2+3+...+n
  • Docker: 容器互访的三种方式
  • js 实现textarea输入字数提示
  • PHP面试之三:MySQL数据库
  • swift基础之_对象 实例方法 对象方法。
  • 从0到1:PostCSS 插件开发最佳实践
  • 从tcpdump抓包看TCP/IP协议
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 从零搭建Koa2 Server
  • 前端代码风格自动化系列(二)之Commitlint
  • 前言-如何学习区块链
  • 区块链技术特点之去中心化特性
  • 怎么把视频里的音乐提取出来
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​香农与信息论三大定律
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #vue3 实现前端下载excel文件模板功能
  • (2)STL算法之元素计数
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)fgets与fputs函数详解
  • (附源码)ssm高校实验室 毕业设计 800008
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (三分钟)速览传统边缘检测算子
  • (万字长文)Spring的核心知识尽揽其中
  • (转)ORM
  • (转)visual stdio 书签功能介绍
  • (转载)深入super,看Python如何解决钻石继承难题
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net Winform开发笔记(一)
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • /etc/fstab 只读无法修改的解决办法
  • @Transient注解
  • [20181219]script使用小技巧.txt
  • [ai笔记3] ai春晚观后感-谈谈ai与艺术
  • [bzoj1038][ZJOI2008]瞭望塔
  • [hive] 窗口函数 ROW_NUMBER()
  • [javaSE] GUI(事件监听机制)