总结记录下这两天的主要学习成果,其中借鉴了网上很多资料,终于成功打包出测试apk文件并运行。
准备知识挺多的(也是自己太菜了):
1.Android中apk与dex的区别
1. *.apk文件
APK是Android Package的缩写,即Android安装包。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件组合成一个应用程序包(APK)。Dex是Dalvik VM executes的全称,即Android Dalvik执行程序。
META-INF\ Jar文件 res\ 存放资源文件 AndroidManifest.xml 应用全局配置文件 *.dex Dalvik虚拟机字节码(应用程序) resources.arsc 编译后的二进制资源文件Android在运行程序时首先需要解压apk文件,然后获取编译后的androidmanifest.xml文件中配置信息,执行dex程序。
2..dex文件
Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,通常执行时都进行优化 。优化后的文件大小会有所增加。 优化发生的时机有两个:对于预置应用,可以在系统编译后,生成优化文件,以ODEX结尾。这样在发布时除APK文件(不包含DEX)以外,还有一个相应的Android DEX文件;对于非预置应用,包含在APK文件里的DEX文件会在运行时被优化,优化后的文件将被保存在缓存中。
Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时。
Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销。
3.Windows环境下多个jdk来回切换
4.apktool d2j-dex2jar jd-gui反编译工具的使用(用来比较自己命令行生成的dex和apk是否与eclipse生成的apk一致)
等等
首先上图:apk的打包流程(在这篇文章上拿的图片:Android安全防护之旅---应用防dex2jar工具反编译原理实现 )
齐活手工!
总结下这天遇到的坑:
1.
jdk版本过高 我之前的是jdk1.8 换成jdk1.6就好使了
2.
命令行生成.dex文件时
只走到bin目录下面就行了 走进去会报1那个错,不明觉厉。亲测的坑,虽然不知道为什么。
虽然文件路径是这样的 但是把class文件打包成.dex时 命令行还是得写到bin目录路径:
dx --dex --output=D:\命令行打包apk\t4\ApkTest\bin\classes.dex D:\命令行打包apk\t4\ApkTest\bin
主要参考:
命令行开发、编译、打包Android应用程序
Android如何用命令行进行打包