android安装包APK的制作过程
Android手机升级包和定制包制作教程

1.补丁/升级包制作方法1.1ROOT目前的民间ROM 基本上已经自带ROOT 所以省略此步骤当然前提得是ROOT过的1.2工具准备下载安装附件中的R.explorer管理器(rootexplorer.v2.9.4.apk)这个工具的作用是备份APK文件、删除APK文件、查看系统目录里面都有什么下载附件中的AndroidResEdit_By_hanhualan...解压到电脑里(如果不能运行则说明你需要安装.NET Framework 2.0)我们主要用这个来对定制包签名1.3定制包制作知识一般定制ROM(不是美化、也不是制作MOD)其实就是对手机内存里的system/app文件夹的内容进行自定义,自己安装的软件将不会出现在这里,而是\data\文件夹中。
系统所有的程序都在这个文件夹里,比如浏览器、拨号器、联系人等先来看一下通常情况下这个文件夹里都包含什么:\system\app\AlarmClock.apk 闹钟\system\app\AlarmClock.odex\system\app\Browser.apk 浏览器\system\app\Browser.odex\system\app\Bugreport.apk Bug报告\system\app\Bugreport.odex\system\app\Calculator.apk 计算器\system\app\Calculator.odex\system\app\Calendar.apk 日历\system\app\Calendar.odex\system\app\CalendarProvider.apk 日历提供\system\app\CalendarProvider.odex\system\app\Camera.apk 照相机\system\app\Camera.odex\system\app\com.amazon.mp3.apk 亚马逊音乐\system\app\Contacts.apk 联系人\system\app\Contacts.odex\system\app\DownloadProvider.apk 下载提供\system\app\DownloadProvider.odex\system\app\DrmProvider.apk DRM数字版权提供\system\app\DrmProvider.odex\system\app\Email.apk 电子邮件客户端\system\app\Email.odex\system\app\FieldTest.apk 测试程序\system\app\FieldTest.odex\system\app\GDataFeedsProvider.apk GoogleData提供\system\app\GDataFeedsProvider.odex\system\app\Gmail.apk Gmail电子邮件\system\app\Gmail.odex\system\app\GmailProvider.apk Gmail提供\system\app\GmailProvider.odex\system\app\GoogleApps.apk 谷歌程序包\system\app\GoogleApps.odex\system\app\GoogleSearch.apk 搜索工具\system\app\GoogleSearch.odex\system\app\gtalkservice.apk GTalk服务\system\app\gtalkservice.odex\system\app\HTMLViewer.apk HTML查看器\system\app\HTMLViewer.odex\system\app\IM.apk 即使通讯组件包含MSN、yahoo通\system\app\ImCredentialProvider.apk\system\app\ImProvider.apk\system\app\ImProvider.odex\system\app\Launcher.apk 启动加载器\system\app\Launcher.odex\system\app\Maps.odex\system\app\MediaProvider.apk 多媒体播放提供\system\app\MediaProvider.odex\system\app\Mms.apk 短信、彩信\system\app\Mms.odex\system\app\Music.apk 音乐播放器\system\app\Music.odex\system\app\MyFaves.apk T-Mobile MyFaves程序\system\app\MyFaves.odex\system\app\PackageInstaller.apk apk安装程序\system\app\PackageInstaller.odex\system\app\Phone.apk 电话拨号器\system\app\Phone.odex\system\app\Settings.apk 系统设置\system\app\Settings.odex\system\app\SettingsProvider.apk 设置提供\system\app\SettingsProvider.odex\system\app\SetupWizard.apk 设置向导\system\app\SetupWizard.odex\system\app\SoundRecorder.apk 录音工具\system\app\SoundRecorder.odex\system\app\Street.odex\system\app\Sync.apk 同步程序\system\app\Sync.odex\system\app\Talk.apk 语音程序\system\app\Talk.odex\system\app\TelephonyProvider.apk 电话提供\system\app\TelephonyProvider.odex\system\app\Updater.apk 更新程序\system\app\Updater.odex\system\app\Vending.apk 制造商信息\system\app\Vending.odex\system\app\VoiceDialer.apk 语音拨号器\system\app\VoiceDialer.odex\system\app\YouTube.apk Youtube视频\system\app\YouTube.odex然后是定制包的结构,定制包的命名一般是XXXX(英文).zip内容包括/system/app/my.apk(你想要放进系统中的程序)/META-INF/com/google/update-script(定制包脚本)/META-INF/CERT.SF(签名文件)/META-INF/CERT.RSA(签名文件)/META-INF/MANIFEST.MF(签名文件)(附件中的custom.zip为范例,大家可以下载直接进行修改)首先应将准备好的程序放进这个ZIP包的/system/app目录里,只要将程序拖进附件中custom.zip的APP目录即可然后删除/META-INF/CERT.RSA和META-INF/CERT.SF这两个文件,为了签名做准备下面我们的来看最后一处需要编辑的地方——脚本1.4脚本:现在我们对里面的文件有了大致的了解,那么举例说明,如果我们要做一个基于以上ROM的定制包,那么大概要进行两种操作1.添加目录里的APK程序到ROM的system/app里2.从ROM里删除APK程序(即瘦身)3.显示进程添加目录的语句为copy_dir PACKAGE:定制包路径手机内存路径删除程序的语句为delete 手机内存路径显示进程语句为show_progress脚本文件可用TXT、记事本等程序作为打开方式并编辑保存作为初学者只需要掌握以下范例即可show_progress 0.1 0delete SYSTEM:app/DivXRegCode.odexdelete SYSTEM:app/YouTube.apkcopy_dir PACKAGE:system SYSTEM:show_progress 0.1 10其中对前后两个show_progress语句不需要理解,看中间的,第一句是删除system/spp文件夹内的DivXRegCode.odex文件,第二句是删除system/spp文件夹内的YouTube.apk文件,第三句是复制(同时会覆盖已存在的文件)定制包中的system文件夹到手机内存的system文件夹。
APK制作

第一部分:先认识一下Android手机的软件结构,介绍一些基本概念。
写这篇文章时想起我的第一部Android手机HTC Hero。
买回来后,同事告诉我可以去刷机玩玩。
刷机,怎么刷?同事说,你个土人,刷机都不知道,很多刷机论坛的,你去逛逛,挺简单的。
我去逛了逛机锋论坛(那时还不知道MIUI),打开一看,什么recovery, radio, root各种词汇扑面而来,oh my lady gaga,这么复杂。
但是为了不被鄙视,而且闲着也是闲着,还是刷着玩玩吧。
后来就结识MIUI来到了小米。
这是题外话,咱们言归正传。
在这纷纷扰扰的Android世界里,如何找到那条刷机大道呢,或许它只是个传说,我们只是一直在探索。
让我们从零开始来看一看,看能发现点什么。
1. bootloader当我们拿到一款手机,第一件事应该就是按下电源键开机,那么从开机到进入到桌面程序这中间发生了些什么呢,我们从下面这张简化了的手机结构图开始:注意:该结构图并不反映手机的实际分区顺序和位置,只是一个逻辑结构图。
大家可以简单的把手机的ROM存储类比为我们电脑上的硬盘,这个硬盘被分成了几个分区:bootloader分区,boot 分区,system分区等等。
后面我们会逐渐介绍各个分区的用途。
所谓的刷机我们可以简单的理解成把软件安装在手机的某些分区中,类似于我们在电脑上安装Windows系统。
当按下电源键手机上电启动后,首先从bootloader分区中一个固定的地址开始执行指令,如图所示,bootloader 分区分成两个部分,分别叫做primary bootloader和secondary stage bootloader。
Primary bootloader主要执行硬件检测,确保硬件能正常工作后将secondary stage bootloader拷贝到内存(RAM)开始执行。
Secondary stage bootloader会进行一些硬件初始化工作,获取内存大小信息等,然后根据用户的按键进入到某种启动模式。
androidAPK应用安装过程以及默认安装路径

应用安装过程以及默认安装路径分类:一:安装过程是类似或的文件格式。
通过将文件直接传到模拟器或手机中执行即可安装。
应用安装有如下四种方式1. 系统应用安装――开机时完成,没有安装界面2. 网络下载应用安装――通过应用完成,没有安装界面3. 工具安装――没有安装界面。
4. 第三方应用安装――通过卡里的文件安装,有安装界面,由应用处理安装及卸载过程的界面。
应用安装的流程及路径应用安装涉及到如下几个目录:系统自带的应用程序,无法删除用户程序安装的目录,有删除权限。
安装时把文件复制到此目录存放应用程序的数据将中的文件安装到目录下(文件是虚拟机的可执行文件,其大小约为原始文件大小的四分之一)安装过程:复制安装包到目录下,解压并扫描安装包,把文件(字节码)保存到目录,并目录下创建对应的应用数据目录。
卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。
一、系统应用安装:处理各种应用的安装,卸载,管理等工作,开机时由启动此服务(源文件路径:\\\\\\\\)服务启动的流程:1. 首先扫描安装“\”目录下的包1. (,| );2.第二步扫描安装“\”目录下的各个系统应用(, );3.第三步扫描“\”目录,即用户安装的第三方应用(, 0, );4.第四步扫描" \"目录,即安装保护的文件(目前没有遇到过此类的应用)。
(,0, | );安装应用的过程1(, , ) 遍历安装指定目录下的文件2(,, , ,) 安装文件3(, , ,, , )通过解析安装包获取到安装包的信息结构4(,); 实现文件复制的安装过程(源文件路径:\\\\)二、从上下载应用:应用需要使用账户登录才可以使用,选择某一应用后,开始下载安装包,此过程中,在手机的信号区有进度条提示,下载完成后,会自动调用的接口安装,调用接口如下:( , ):文件下载完成后保存的路径:处理返回的安装结果:安装的参数,从上下载的应用,安装参数为()接口函数的安装过程:1 (, , ,):安装完成后此名称保存在里,一般为,不是关键参数2 = (, );把文件复制到临时目录下的临时文件3 ( ,, ,, )解析临时文件,获取应用包名= ((), 0);4.判断如果带有参数,则调用(,,, ,, , ,)5.如果没有,则调用(,,, ,, , ,);6 (, , ,, , )以后的流程,与开机时的应用安装流程相同。
安装APK文件到ANDROID模拟器 及SHELL安装APK文件到ANDROID模拟器 电脑资料

安装APK文件到Android模拟器及shell安装APK文件到Android模拟器电脑资料一、安装APK文件到Android模拟器Android 使用的执行文件为APK格式,类似于Windows平台的exe 文件,一、首先在Android SDK的Tools文件夹中找到emulator.exe文件并运行,这时Android模拟器就启动了,二、将android123.apk文件复制到Android SDK的Tools目录中(点击下载Android123.apk文件),使用cmd的cd命令定位到Android 模拟器目录Tools中,执行adb install android123.apk命令,这时模拟器将会自动执行安装。
三、在Android模拟器中可以找到我们安装好的文件-Android 之家。
四、用鼠标单击这个文件就可以看到Android 之家网站的演示程序。
写在最后我们可以发现安装Android软件到模拟器很简单,只需要执行adb install命令就可以了,当然其实我们做的是复制文件到Android模拟器的/data/app文件夹,并创立了一个快捷方式。
二、adb命令的使用adb(Android Debug Bridge)是Android 提供的一个通用的调试工具,借助这个工具,我们可以设备或模拟器的状态。
还可以进行以下的操作:1、快速更新设备或模拟器中的代码,如应用或Android系统升级;2、在设备上运行shell命令;3、管理设备或模拟器上的预定端口;4、在设备或模拟器上复制或粘贴文件;以下为一些常用的操作:1、安装应用到模拟器:adb install比拟遗憾的是,Android并没有提供一个卸载应用的命令,只能自己手动删除:adb shellcd /data/apprm app.apk2、进入设备或模拟器的shell:adb shell通过上面的命令,就可以进入设备或模拟器的shell环境中,在这个Linux Shell中,你可以执行各种Linux 的命令,另外如果只想执行一条shell命令,可以采用以下的方式:adb shell [mand]如:adb shell dmesg会打印出内核的调试信息,3、端口:可以设置任意的端口号,做为主机向模拟器或设备的请求端口。
AndroidStudio打包生成APK教程

AndroidStudio打包⽣成APK教程⼀、修改版本和指定⽣成APK⽂件名【可选】将项⽬切换到Project视图,打开app⽬录下的build.gradle⽂件1.1 修定软件版本如1.2图所⽰。
versionCode是app的⼤版本号,为数值类型,默认为1我这⾥改为2。
versionName是app的具体版本号,为际符串类型,默认为1.0我这⾥改为2.3。
1.2 指定⽣成的APK⽂件名⼀样是在build.gradle⽂件中修改,默认⽣成的release版apk名为app-release.apk。
在android内部defaultConfig同层下添加以不内容(outputFileName改成⾃⼰想要的apk名)android.applicationVariants.all {variant ->variant.outputs.all {// 此处指定⽣成的apk⽂件名outputFileName = "SecTest.apk"}}⼆、进⾏安全加固【可选】如果想提⾼APP的反编译能⼒,可以对APP进⾏安全加固,参看三、导出签名发布版apk直接点“Build APK(s)”⽣成的是使⽤默认的debug.keystore签名的Debug版apk(⽣成在app\build\outputs\apk\debug⽬录下),真正发布软件时我们需要⽣成⾃⼰密钥签名的release版apk。
菜单栏----Build----Generate Signed APK在Key store path中输⼊⾃⼰要⽤来进⾏签名的密钥⽂件的存放位置,同时输⼊密钥⽂件的读写⽤户名密码(如果还没有密钥⽂件点击图中的“Create New”进⾏创建即可)APK Destination Folder-----APK⽂件⽣成的⽬录Build Type----⽣成release版还是debug版Signature Version----对哪些部分进⾏签名⽣成完成后在指定⽣成⽬录下即会有⼀个release⽂件夹在其下即可找到⽣成的apk(app-release.apk是我之前⽣成的版本)。
TTF字体制作成APK直装包(二)---直装包编译篇

TTF字体制作成APK直装包(二)---直装包编译篇本篇主要讲解的是APK包制作部分,教程的全部链接放在下面了一、字体制作部分二、字体APK包制作部分教程中涉及的软件及工具见教程第一部分有的同学反映,APK包反编译后如果再次制作的话,就会替换原先的字体包,Android的APK程序是通过package属性来做唯一标识的,所以楼主在这里一并把教程写出来1.把网上下下来的字体安装包放到Apk Manager 目录下的place-apk-here-for-modding 目录下,然后回到根目录,双击script.bat2.打开后,如果出现这样的对话框直接敲任意键就行了,这是因为Apk Manager没有连接到ADB,不用管3.选择项目,输入22,然后再选择你要反编译的APK4.确定后回到主界面,输入9,回车,进行反编译5.反编译成功后,我们需要打开生成的项目进行修改,项目位置在proctes/文件夹下每个文件分别说明一下,我们从下往上说起(这里的说明只针对我们的字体包说明,对于其他APK包不一定适用,我尽量说的通俗点)apktool.yml 是apk manager 自动生成的用来标识项目的文件,跟我们修改没关系,可以不用管AndroidMainfest.xml 程序的主配置文件,程序运行的入口文件,程序一打开的时候会先从这里读取smail 文件夹程序的类文件,就是程序逻辑的主要代码,不过这里是被加密后的文件了,不影响我们修改res 文件夹程序的资源文件放一些图片啊之类的assets 文件夹程序所涉及到的资源文件,如字体6.好了,我们现在开始修改第一个文件 AndroinMainfest.xml,图下面的红框部分就是程序的唯一标识符了,很多同学需要字体包被替换就是因为两个字体包的package是一样的,android认为是同一个程序,所以,我们接下来要做的就是修改这个包名,这里我就拿“方正静蕾体”为例,我们把包名改为字体的汉语拼音首字母“fzjl”保存后就可以了7.现在进入smail文件夹,这下面包括了好几层的文件夹,每个文件夹的名称都对应了主文件里面的package内容,我们直接点到最后一个叫文件夹,并把这个文件夹的名称改为“fzjl”8.修改完文件夹名称后,点击进入该文件夹,里面都是一些.smail格式的文件,我们要做的就是打开这些文件,并替换这些文件里面的所有wryhzt为fzjl(这里的wryhzt对应的就是主文件里面蓝色框里的内容,和最后一个文件夹的名称是一样的)所有文件都替换完成后就可以关闭这个文件夹了9.好了,现在我们进入res文件夹打开后,里面会有3个文件夹,其中第一个就是程序的图标,如果有需要修改程序图标的同学,可以替换掉这个文件,文件名必须一致我们主要说明的是最后一个 values文件夹这里我们主要讲解一下strings.xml,第一个public.xml可以不用管,里面放置的是资源文件的链接打开strings.xml红框部分就是字体包的程序名称,我们在这里修改为“方正静蕾”,注意这里要说明的是“程序包”名称,而不是字体名称,关于字体名称的修改我们会在下面讲到10.好了,现在进入教程的最后一个文件夹,这里面有两个文件夹 fonts 放置的是我们需要替换的字体,我们把教程一里面做好的字体放到这个文件夹下,取名为 "fzjl.ttf"替换好字体后,我们再打开xml文件夹,先把里面的xml文件修改为fzjl.xml 这个名字需要和主文件里面蓝色框的内容一样11.打开fzjl.xml 按照下图的标志进行修改字体名称对应fonts 文件夹下的字体名称12.好了,项目的修改就完成了,下面我们要做的就是对项目进行编译签名了打开apk manager 工具反编译完成后,我们打开刚才放置APK包的文件夹place-apk-here-for-modding 目录下可以看到有一个 singe+文件名的apk包,这个包就是我们知足成功的字体包了点击安装完成后打开手机好了,我们选中字体看一下效果安装包制作的过程就这样了至此关于字体修改的过程就结束了,祝各位同学在制作的时候成功说实话,可能看上去教程很难,但是你一旦学会了,会对你的android 知识有很大的提高。
Android 包管理(APK管理)机制详细解析

一 、APK安装方式
adb install/push *.apk shell install 文件浏览器双击
APK
installation
Android market
PackageManagerService
scanPackageLI()
packageinstaller.apk SD卡安装
building in system img
… ...
二、PackageManagerService启动过程
PackageManagerService.main() PackageManagerService m = new PackageManagerService(); ServiceManager.addService("package", m); 建立installer与installd的socket联接
4.检查/data/system/packages.xml是否存在,这个文件是在解析apk时由 writeLP()创建的,里面记录了系统的permissions,以及每个apk的name ,codePath,flags,ts,version,uesrid等信息,这些信息主要通过apk的 AndroidManifest.xml解析获取,解析完apk后将更新信息写入这个文件并保 存到flash,下次开机直接从里面读取相关信息添加到内存相关列表中。当有apk 升级,安装或删除时会更新这个文件。
Jar to Dex Conversion
一个应用,一个进程,一个虚拟机实例
每一个Android应用都运行在一个 Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立 的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统实现 的。所有 Android 应用的线程都对应一个 Linux 线程,虚拟机因而可以更多的依赖操作系统 的线程调度和管理机制。不同的应用在不同的进程空间里运行,加之对不同来源的应用都使 用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。
编译apk简单方法

编译apk简单方法
编译APK的简单方法有以下几种:
1. 使用Android Studio:在Android Studio中打开项目后,通过点击“Build”菜单中的“Make Project”或“Rebuild Project”选项来编译APK。
编译完成后,APK文件将会生成在项目的“app/build/outputs/apk”目录下。
2. 使用Gradle命令行:在项目根目录下,通过运行“gradlew assemble”命令来编译APK。
编译完成后,APK文件将会生成在项目的“app/build/outputs/apk”目录下。
3. 使用命令行工具(例如Ant):在项目根目录下,通过运行构建工具的命令来编译APK。
具体的命令会根据使用的构建工具而有所不同,一般会指定项目的构建文件(例如
build.xml)和输出目录。
需要注意的是,编译APK前需要先确认项目的依赖库已经正确配置,并且项目中的代码没有语法错误。
另外,编译过程中可能会出现一些错误和警告信息,需要根据具体情况进行调试和修复。
从Android手机中取出已安装的app包,导出apk

从Android⼿机中取出已安装的app包,导出apk从Android⼿机中取出已安装的app包,导出apkTAG:Android,提取,apk,adb,pm,root,导出apk假设有这样⼀个场景,A君看到你⼿机上⼀个实⽤APP,想要安装到⾃⼰⼿机上,限于下载浪费流量,那么最简单的就是从你的⼿机中拷贝⼀个,不过你安装过的apk包已经删除了,不能直接复制出来进⾏安装。
办法来了,就是从⼿机中制造⼀个出来或者说找他的备份版。
导出步骤:1)找到应⽤的包名执⾏命令:$ adb shell pm list package输出结果:package:com.xiaomi.miui.screenrecorderpackage:com.android.providers.telephonypackage:com.miui.powerkeeperpackage:com.android.providers.calendarpackage:com.ximi.vipaccountpackage:com.android.providers.mediapackage:ink.servicepackage:com.securespaces.android.sscm.servicepackage:com.ximi.accountpackage:com.game.play.gogogopackage:com.sohu.inputmethod.sogou2)找到应⽤备份包的位置,⽐如要找com.game.play.gogogo执⾏命令:$ adb shell pm path com.istone.xdf输出结果:package:/data/app/com.game.play.gogogo-1/base.apk3)提取安装包执⾏命令:$ adb pull /data/app/com.game.play.gogogo-1/base.apk执⾏结果:/data/app/com.game.play.gogogo-1/base.apk: 1 file pulled. 3.9 MB/s (57503627 bytes in14.164s)⾄此,提取成功,可以发送/复制到⼿机上进⾏安装了。
AndroidAPK应用安装原理...

AndroidAPK应⽤安装原理...本⽂实例讲述了Android APK应⽤安装之AndroidManifest使⽤PackageParser.parserPackage原理。
分享给⼤家供⼤家参考,具体如下:Android 安装⼀个APK的时候⾸先会解析APK,这⾥要做很多事情,其中⼀个事情就是解析Manifest.xml⽂件,并将所有APK 的Manifest封装到各种对象中并保存在内存当中解析Manifest的类是⾮常重要的,该类就是frameworks\base\core\java\android\content\pm\PackageParserPackageManagerService会调⽤PackageParser.parserPackage⽅法来解析APK清单,下⾯开始分析PackageParser的实现:PackageParser是使⽤的XMLPullParser⼯具来对XML进⾏解析的,然后分别通过android.content.pm下各种xxxInfo类来进⾏封装:public Package parsePackage(File sourceFile, String destCodePath,DisplayMetrics metrics, int flags) {//最后要跑出的解析错误信息mParseError = PackageManager.INSTALL_SUCCEEDED;//获得要解析的⽂件的路径mArchiveSourcePath = sourceFile.getPath();//如果要解析的不是⽂件类型就跳过并且返回该⽅法if (!sourceFile.isFile()) {Log.w(TAG, "Skipping dir: " + mArchiveSourcePath);//更新错误信息mParseError = PackageManager.INSTALL_PARSE_FAILED_NOT_APK;return null;}//如果⽂件不是以.apk结尾并且flag没有确定⼀定是APK,那么也返回if (!isPackageFilename(sourceFile.getName())&& (flags&PARSE_MUST_BE_APK) != 0) {if ((flags&PARSE_IS_SYSTEM) == 0) {// We expect to have non-.apk files in the system dir,// so don't warn about them.Log.w(TAG, "Skipping non-package file: " + mArchiveSourcePath);}//更新错误信息mParseError = PackageManager.INSTALL_PARSE_FAILED_NOT_APK;return null;}if ((flags&PARSE_CHATTY) != 0 && Config.LOGD) Log.d(TAG, "Scanning package: " + mArchiveSourcePath);XmlResourceParser parser = null;AssetManager assmgr = null;boolean assetError = true;try {assmgr = new AssetManager();//将⼀个⽂件添加到AssetManager中并返回⼀个唯⼀标识int cookie = assmgr.addAssetPath(mArchiveSourcePath);if(cookie != 0) {//通过标识去AssetManager中找到标识对应资源中的Manifest清单⽂件,并返回⼀个XML的解析器parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml");//⾛到这⾥证明⼀切顺利assetError = false;} else {Log.w(TAG, "Failed adding asset path:"+mArchiveSourcePath);}} catch (Exception e) {Log.w(TAG, "Unable to read AndroidManifest.xml of "+ mArchiveSourcePath, e);}if(assetError) {if (assmgr != null) assmgr.close();mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_MANIFEST;return null;}String[] errorText = new String[1];Package pkg = null;Exception errorException = null;try {// XXXX todo: need to figure out correct configuration.Resources res = new Resources(assmgr, metrics, null);//这个是真正在解析的package的⽅法,是private methodpkg = parsePackage(res, parser, flags, errorText);} catch (Exception e) {errorException = e;mParseError = PackageManager.INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION; }if (pkg == null) {if (errorException != null) {Log.w(TAG, mArchiveSourcePath, errorException);} else {Log.w(TAG, mArchiveSourcePath + " (at "+ parser.getPositionDescription()+ "): " + errorText[0]);}parser.close();assmgr.close();if (mParseError == PackageManager.INSTALL_SUCCEEDED) {mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; }return null;}parserPackage调⽤了重载的另外⼀个parserPackageprivate Package parsePackage(Resources res, XmlResourceParser parser, int flags, String[] outError)throws XmlPullParserException, IOException {AttributeSet attrs = parser;//每次调⽤这个⽅法时候清空这些变量mParseInstrumentationArgs = null;mParseActivityArgs = null;mParseServiceArgs = null;mParseProviderArgs = null;//这⾥调⽤这个⽅法获得包名String pkgName = parsePackageName(parser, attrs, flags, outError);if (pkgName == null) {mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME; return null;}int type;final Package pkg = new Package(pkgName);boolean foundApp = false;//从资源⾥获得AndroidManifest的数组TypedArray sa = res.obtainAttributes(attrs,com.android.internal.R.styleable.AndroidManifest);//继续挖掘出版本号pkg.mVersionCode = sa.getInteger(com.android.internal.R.styleable.AndroidManifest_versionCode, 0);//获取版本名pkg.mVersionName = sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifest_versionName, 0);if (pkg.mVersionName != null) {pkg.mVersionName = pkg.mVersionName.intern();}//获得sharedUserIdString str = sa.getNonConfigurationString(com.android.internal.R.styleable.AndroidManifest_sharedUserId, 0);if (str != null && str.length() > 0) {//验证包名是否符合规则String nameError = validateName(str, true);if (nameError != null && !"android".equals(pkgName)) {outError[0] = "<manifest> specifies bad sharedUserId name \""+ str + "\": " + nameError;mParseError = PackageManager.INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID; return null;}pkg.mSharedUserId = str.intern();pkg.mSharedUserLabel = sa.getResourceId(com.android.internal.R.styleable.AndroidManifest_sharedUserLabel, 0);}sa.recycle();//安装的位置pkg.installLocation = sa.getInteger(com.android.internal.R.styleable.AndroidManifest_installLocation,PARSE_DEFAULT_INSTALL_LOCATION);// Resource boolean are -1, so 1 means we don't know the value.int supportsSmallScreens = 1;int supportsNormalScreens = 1;int supportsLargeScreens = 1;int resizeable = 1;int anyDensity = 1;int outerDepth = parser.getDepth();//关键时刻到了,真正的开始解析了while ((type=parser.next()) != parser.END_DOCUMENT&& (type != parser.END_TAG || parser.getDepth() > outerDepth)) {if (type == parser.END_TAG || type == parser.TEXT) {continue;}String tagName = parser.getName();if (tagName.equals("application")) {if (foundApp) {if (RIGID_PARSER) {outError[0] = "<manifest> has more than one <application>";mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;return null;} else {Log.w(TAG, "<manifest> has more than one <application>");XmlUtils.skipCurrentTag(parser);continue;}}foundApp = true;if (!parseApplication(pkg, res, parser, attrs, flags, outError)) {return null;}} else if (tagName.equals("permission-group")) {if (parsePermissionGroup(pkg, res, parser, attrs, outError) == null) {return null;}} else if (tagName.equals("permission")) {if (parsePermission(pkg, res, parser, attrs, outError) == null) {return null;}} else if (tagName.equals("permission-tree")) {if (parsePermissionTree(pkg, res, parser, attrs, outError) == null) {return null;}} else if (tagName.equals("uses-permission")) {sa = res.obtainAttributes(attrs,com.android.internal.R.styleable.AndroidManifestUsesPermission);// Note: don't allow this value to be a reference to a resource// that may change.String name = sa.getNonResourceString(com.android.internal.R.styleable.AndroidManifestUsesPermission_name);sa.recycle();.........................................................................................................................................................篇幅有限这⾥分别把每种不同的element⽤不同的⼩⽅法去解析,他们的调⽤顺序是:这些⼩⽅法⾥其实还是有很多⼩技巧的,有兴趣的话可以细细品位更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家Android程序设计有所帮助。
安装包实现原理

安装包实现原理
安装包的实现原理主要是将应用程序的代码和资源文件打包成APK文件。
在编写Android应用程序时,我们需要使用Java编程语言和Android SDK提供的API来编写应用程序的代码和资源文件。
完成编写后,使用Android SDK提供的工具将这些文件打包成APK文件。
APK文件可以在Android设备上安装和运行。
在APK文件中,有几个重要的组成部分:
1. res目录:存放资源文件,包括布局文件、图片、字符串等。
2. assets目录:可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
3. :编译后的二进制资源文件,它包含了应用程序的资源文件信息,例如布局、字符串、样式等。
4. META-INF目录:存放签名信息,有三个签名文件,用来保证apk包的完整性和系统的安全。
在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。
这就保证了apk包里的文件不能被随意替换。
比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码,或一段版权信息,想直接解压缩、替换再重
新打包,基本是不可能的。
如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
此外,在APK文件的打包过程中,还需要进行签名操作,以确保APK文件的完整性和安全性。
签名操作使用私钥对APK文件进行加密,并在安装时进行验证,以确保APK文件没有被篡改或损坏。
总的来说,安装包的实现原理是通过将应用程序的代码和资源文件打包成APK文件,并对其进行签名操作,以确保APK文件的完整性和安全性。
android备份apk安装过程及原理

Android备份APK安装过程及原理1. 概述Android系统的apk(Android应用程序包)格式是安卓应用程序的标准文件格式,开发者可以将应用程序打包成apk文件,以便用户下载和安装它们。
在某些情况下,您可能需要备份您的应用程序或者安装已经备份的应用程序。
本文介绍了Android备份apk安装的过程和原理。
2. 备份APK的过程2.1 使用Android SDK命令行工具备份使用Android SDK命令行工具可以将安装在设备上的当前应用程序备份到计算机。
以下是备份APK的具体步骤:1.通过USB将设备连接到计算机并启动设备。
2.在计算机上打开命令行提示符或终端窗口。
3.切换到< Android SDK 单目录>\platform-tools目录。
4.在命令行提示符中输入以下命令:adb backup -apk -shared -all -f <文件名>.ab- `-apk` 选项表示将APK文件一起备份到备份文件中。
- `-shared` 选项表示将应用程序的共享存储备份到备份文件中。
- `-all` 选项表示将应用程序的所有数据,包括剪贴板数据、联系人、日历数据等,备份到备份文件中。
- `-f` 选项表示备份文件的名称。
5.摘下USB连接并确保备份文件保存在计算机上。
2.2 使用第三方应用程序备份您可以在Google Play商店或其他来源中下载第三方应用程序,如 Helium或Titanium Backup等,这些应用程序可以让您备份和还原您的应用程序、系统数据和设置等。
以下是使用 Helium 应用程序备份APK的具体步骤:1.在Google Play商店中下载Helium备份应用程序。
2.启动Helium应用程序,并根据提示进行操作以启用USB调试。
3.在备份选项卡中选择您需要备份的应用程序。
4.点击“备份”按钮,Helium将创建备份并保存在设备的内部存储器或SD卡上。
android APK应用安装过程以及默认安装路径

android APK应用安装过程以及默认安装路径分类:Android一:安装过程APK是类似Symbian Sis或Sisx的文件格式。
通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
Android应用安装有如下四种方式1. 系统应用安装――开机时完成,没有安装界面2. 网络下载应用安装――通过market应用完成,没有安装界面3. ADB工具安装――没有安装界面。
4. 第三方应用安装――通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。
应用安装的流程及路径应用安装涉及到如下几个目录:system/app系统自带的应用程序,无法删除data/app用户程序安装的目录,有删除权限。
安装时把apk文件复制到此目录data/data存放应用程序的数据Data/dalvik-cache将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)安装过程:复制APK安装包到data/app目录下,解压并扫描安装包,把dex文件(Dalvik 字节码)保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。
卸载过程:删除安装过程中在上述三个目录下创建的文件及目录。
一、系统应用安装:PackageManagerService处理各种应用的安装,卸载,管理等工作,开机时由systemServer 启动此服务(源文件路径:android\frameworks\base\services\java\com\android\server\PackageManagerService.jav a)PackageManagerService服务启动的流程:1. 首先扫描安装“system\framework”目录下的jar包1. scanDirLI(mFrameworkDir,PackageParser.PARSE_IS_SYSTEM,scanMode | SCAN_NO_DEX);2.第二步扫描安装“system\app”目录下的各个系统应用scanDirLI(mSystemAppDir,PackageParser.PARSE_IS_SYSTEM, scanMode);3.第三步扫描“data\app”目录,即用户安装的第三方应用scanDirLI(mAppInstallDir, 0, scanMode);4.第四步扫描" data\app-private"目录,即安装DRM保护的APK文件(目前没有遇到过此类的应用)。
三星字体直装版apk制作教程

三星字体直装版apk制作教程三星字体直装版apk制作教程介绍本教程将向你展示如何制作三星字体直装版apk,帮助你将自定义字体应用到三星手机上。
步骤1.准备工作–确保你拥有一台三星手机和一台电脑。
–下载并安装[Android Studio](–下载所需的字体文件,确保它们是.ttf或.otf格式。
2.创建新项目–打开Android Studio,点击”Start a new Android Studio project”创建一个新项目。
–填写应用信息,选择适合你的设备的最低API级别。
–选择空活动模板,点击”Finish”完成创建。
–等待Android Studio完成构建。
3.导入字体文件–在Android Studio中,右键点击”app”文件夹,选择”New” -> “Folder” -> “Assets Folder”创建一个assets文件夹。
–将下载好的字体文件拖放到assets文件夹中。
4.修改AndroidManifest.xml–打开”app”文件夹中的AndroidManifest.xml文件。
–在<application>标签内添加以下代码:<meta-dataandroid:name="android.webkit.WebView.fonts"android:resource="@string/font_family_regular"/> <meta-dataandroid:name="android.webkit.WebView.fonts"android:resource="@string/font_family_bold"/>–在文件的开头添加以下代码:<resources><string name="font_family_regular"><string name="font_family_bold"></resources>5.构建和安装APK–确保你的三星手机已经连接到电脑上,并启用了开发者模式。
android应用开发流程

给菜鸟看的Android应用开发全流程——好多Android开发中,没人告诉过你的事很多菜鸟开始学习Android开发,去网上搜集过很多“Android开发教程”,但是搜索出来的东西,如果不是特别针对性的关键词,基本上内容都是:环境配置-工具安装-第一个Hello Android项目-项目结构、文件作用-布局-控件-……等等涉及具体开发内容的文章,最后打包发布了事;且不说这些文章又有一大半都是互相转载来转载去,单看内容,大部分都是讲具体功能实现手段,或者某个API怎么用,然而很多细节可能虽然确实很简单,却往往令菜鸟迷惑头痛不已……唉,我当年不堪回首的岁月啊!虽然这些问题可能日后看来是小意思,但当初一个菜鸟可能根本不知道这个问题的存在,更不用说用什么词去搜索;所以虽然这些问题可能也是有专门文章讲,但菜鸟们根本不知道这个关键字啊~~~~本人靠着一本书+网上各种搜,现在总算能完成一个完整的Android开发流程。
回头看看,总结一下这些经验,即给自己加深印象,也帮助后来的菜鸟,也是功德无量啊。
话说本人半路出家,编程水平实在一般,所以此文重点在流程,至于技术细节和各种实现功能的技巧,还是专门搜索专业的文章吧,不过想必彼时已经能够知道自己想要什么了,那些问题也就不算个事了。
该流程基本是本人的经验总结,未必是完全官方和教科书式的。
不过虽然不一定是最好的解决办法,但起码都走得通,替后来人排除一些弯路。
如果有幸被大牛看到此文,还请对不妥之处不吝赐教,哪怕路过留个名也好啊~一、准备工作1.技能储备1)Java重要程度:★★★★★当然是掌握的越多越好,毕竟Android就是用Java语言来开发的。
遇到很多没有Java 基础的朋友问:要想直接学Android,Java应该掌握到什么程度?个人认为,如果一个熟练的Java程序员技能算100分的话,掌握到40-50分,基本开发Android不会有语言上的太大障碍了。
其实主要也就是Java的类、继承、接口、IO、XML解析等这些基本的操作掌握了也就可以开始用Android开发些简单应用了。
小白入门篇安卓刷机包制作教程(精)

导读:该方法仅仅只是教你对刷机包进行签名而已,如果你只是修改小东西完全可以了,如果修改结构、函数等就请止步了。
本教程仅供小白学习,各位DD就不要瞎和了。
热点导读:刷机什么意思手机刷机是什么意思?1、环境Android刷机包制作首先要你的电脑安装java相关组件,我安装的是jdk-6u22-windows-i586.zip下载地址:/file/e6v5bm5d#jdk-6u22-windows-i586.zip方法如下:第一步:下载jdk-6u22-windows-i586。
当然了,看到windows那个单词你应该明白这个是给windows系统用的了。
第二步:安装JDK。
将其安装到D:\Programe Files\Java文件夹下即可。
装JDK 到了装JRE 时可能出现报错:“内部错误:2753.regutils.dll”,不用理他,点确定继续安装完成。
第三步:配置环境变量。
(1右键我的电脑——属性——高级——环境变量。
(2为了指定命令搜索路径,在用户变量的path变量(只需在其最前面添加下述路径即可D:\Program Files\Java\jdk1.6.0_22\bin;。
注意末尾用分号隔开。
(注意:路径不同环境变量不同(3为了指定类搜索路径,在用户变量中新建JAVA_HOME变量,变量名JAVA_HOME,变量值为D:\Program Files\Java\jdk1.6.0_22。
(注意:路径不同环境变量不同(4为了指向JDK的安装目录,在用户变量中新建classpath变量,变量名为classpath,变量值为.;%JAVA_HOME%lib\tools.jar;%JAVA_HOME%lib\dt.jar; ,注意最前面的.不可以省略。
第四步:测试JDK是否配置成功。
单击开始菜单——运行——输入cmd——确定,输入java -version(java和-之间有一个空格显示出版本的信息,则证明配置成功。
android工程的打包和APK安装到手机

step4 Destination APK file表示 被打包成 APK格式的 项目导出径 如此,工程 打包成apk的 讲解到此结 束
工程打包成apk的讲解到此结束
APK程序的安装
• 手机上首先要进行一些设置, 设置——应用程序——勾选“未知源” 设置——应用程序——开发——勾选“USB 调试” 以上设置是为了确保,手机能和电脑联通 方法一 利用手机内置APK安装器 设置——应用程序——APK安装器 只要把APK程序都放到SD卡上,就可以直接在这个内置 APK安装器上进行软件的安装与卸载。 该方法只适应有内置APK的手机
方法二 利用PC客户端android应用安装器 可以使用PC端软件:如G蛋(下载)、91手机助手、豌豆 夹等Android应用安装器。这些Android应用安装器中都有 海量的Android应用。你首先要在PC上安装,然后将手机 连接PC,这些Android应用安装器会自动关联你手机设备, 双击PC机里的APK文件就能安装到你的手机里面了 (本人就是用的这种方法)
方法三 利用安卓网APK安装器 APK安装器就是将APK文件安装到手机上的一个PC端软 件,我们首先需要下载一个USB驱动 USB驱动下载 usb_driver.rar (4.47 MB) 在PC上安装好“APK安装器”,这个软件会自动关联你 的APK程序,只要双击APK程序r
工程的打包和APK的安装
将工程打包成apk方法一
简单的方法是,直接进入workspace空间中的 ChinaResturants/bin中,有ChinaResturants.apk。
将工程打包成apk方法二
step1 在你需要打包的apk下右击 在该列表中找到 android tools, 然后在展开的二级列表中找到 Export Signed Application Package点击弹出如右图所示 对话框 project 为要打包的项目名称
apk打包流程

apk打包流程APK打包流程。
APK是Android应用程序的安装包文件,是用户安装Android应用程序的必备文件。
APK打包是指将Android应用程序源代码、资源文件等打包成APK文件的过程。
在进行APK打包时,需要经过一系列的步骤,包括代码编译、资源文件处理、签名等。
下面将详细介绍APK打包的流程。
首先,进行代码编译。
在进行APK打包之前,需要将Android应用程序的源代码进行编译,生成对应的.class文件。
编译过程中会进行语法检查、语义分析、生成中间代码等操作,最终生成可执行的.class文件。
接下来,进行资源文件处理。
资源文件包括图片、布局文件、字符串等,这些文件需要被打包到APK文件中。
在处理资源文件时,需要进行压缩、优化等操作,以减小APK文件的大小,提高应用程序的加载速度。
然后,进行APK打包。
在进行APK打包时,需要将编译后的.class文件与资源文件进行打包,生成未签名的APK文件。
这个过程可以使用Android SDK提供的工具进行打包操作。
接着,进行签名操作。
在生成未签名的APK文件后,需要对APK文件进行签名。
签名是为了验证APK文件的完整性和来源,确保APK文件没有被篡改。
签名操作需要使用开发者的数字证书对APK文件进行签名,以确保APK文件的安全性。
最后,进行对APK文件进行优化。
在进行APK打包后,可以对APK文件进行优化操作,包括去除无用的资源、压缩资源文件等,以减小APK文件的大小,提高应用程序的运行效率。
总结,APK打包是Android应用程序开发的重要环节,通过对源代码、资源文件进行编译、打包、签名等操作,最终生成可供用户安装的APK文件。
在进行APK打包时,需要注意对资源文件的处理和APK文件的优化,以提高应用程序的性能和用户体验。
以上就是APK打包的流程,希望对大家有所帮助。
感谢阅读!。
windows下手动打包android程序apk过程详解

windows下手动打包android程序apk过程详解备注:android sdk版本不同,安装之后在tools下可能会少dx.bat,apkbuilder.bat文件,通过升级SDK或者单独下载放在对应的目录,也可正常使用;一、手动编译APK的流程如下:1.生成资源文件:使用Android SDK提供的aapt.exe生成R.java 类文件2.编译本地库:使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步)3.编译java代码:使用JDK提供的javac.exe编译.java类文件生成class文件4.生成dex文件:使用Android SDK提供的dx.bat命令行脚本生成classes.dex文件5.打包资源文件:使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)6.生成apk文件:使用Android SDK提供的apkbuilder.bat生成未签名的apk安装文件7.对apk文件进行签名:使用jdk的jarsigner.exe对未签名的包进行apk签名二、详细步骤1)、准备工作A、安装好JDK,配置环境变量;B、将android-sdk-windows\platform-tools和android-sdk-windows\tools 添加到CLASSPATH 环境变量中;C、打开CMD命令行界面,将当前目录切换到工程所在目录;D、准备一个目录,以下例子是以在eclipse中创建的Android test project项目,名称Test;2)生成资源文件,使用aapt生成R.java类文件,aapt所在路径android-sdk-windows\platform-tools\aapt.exe:E:\Users\Administrator\workspace\Test>aapt package -f -m -J gen -S res -M AndroidManifest.xml -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar说明:-f -m -J gen 代表按覆盖的形式在gen目录下生成带包路径的R.java;-f force overwrite of existing files;-m make package directories under location specified by -J -J specify where to output R.java resource constant definitions-J后面跟的是生成目录;-S后面跟的是资源目录;-M后面跟的是AndroidManifest.xml;-I后面跟的是使用的AndroidAPI的jar;3)javac.exe编译.java类文件生成class文件,javac所在路径C:\Program Files\Java\jdk1.6.0_43\bin\javac.exeE:\Users\Administrator\workspace\Test>javac -encoding utf-8 -target 1.6 -d bin -bootclasspath E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar gen\android\support\v7\appcompat\test\*.java src\android\support\v7\appcompat\test\*.java说明:-target:jdk版本;-d:指定生成的class类文件存放的位置;-bootclasspath:覆盖引导类文件的位置;-encoding:后面跟字符编码,避免出现乱码;4)使用dx.bat命令行脚本生成classes.dex文件,dx.bat所在路径android-sdk-windows\tools\dx.batE:\Users\Administrator\workspace\Test>dx.bat --dex --output=E:\Users\Administrator\workspace\Test\bin\classes.dex E:\Users\Administrator\workspace\Test\bin\classes说明:--output:生成的dex文件存放路径;最后带上class文件所在目录,不需要加包目录5)使用aapt.exe生成资源包文件,aapt.exe所在路径android-sdk_r23.0.2-windows\android-sdk-windows\platform-tools\aapt.exeE:\Users\Administrator\workspace\Test>aapt.exe package -f -M AndroidManifest.xml -S res -A assets -I E:\android-sdk_r23.0.2-windows\android-sdk-windows\platforms\android-18\android.jar -F bin\resourcesLater说明:-S:资源目录;-M:AndroidManifest.xml文件;-I:导入用的jar文件;-F:后面跟生成的资源文件存放位置,生成的资源文件名是自己新建的6)使用apkbuilder.bat生成未签名的apk安装文件,apkbuilder.bat所在路径android-sdk_r23.0.2-windows\android-sdk-windows\tools\apkbuilder.bat。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android程序安装包APK的制作过程
完成Android项目后,需要将程序打包成APK文件(Android Package),其后缀名为".apk"。
打包的APK文件可以在Android模拟器或者Android手机上安装运行。
Android系统要求具有开发者签名的私人密钥的应用程序才可以被安装。
Android项目打包和生成数字签名可以使用命令行的方式,但Eclipse中的向导可以方便快捷的完成整个流程。
以HelloWorld为例,介绍如何生成APK。
Android项目编译运行后,右键单击项目名称,选择"Android Tools",再选择"Export Signed Application Package..."(输出签名的应用程序包)。
直接点击Next按钮,进入Keystore设置窗口。
其中,Location为证书的目录地址,Password/Comfirm为证书的密码。
打包程序时系统要求使用数字证书。
如果没有数字证书,选择"Create new keystore",设置目录地址和密码,创建新的数字证书。
点击Next按钮,设置证书的信息。
Alias:数字证书的名称;Password/Comfirm:证书的密码;Validity(years):证书的有效期;其他信息按需要填写。
完成证书信息设置后点击Next按钮,完成APK打包,如下图所示,生成的APK 文件为:E:\Android\keystore\HelloWorld.apk。
如果已有数字证书,可以选择"Use existing keystore",然后点击Browser按钮进行选择,输入密码后点击Next按钮进行下一步。
如果没有数字证书,选择"Create new keystore",设置目录地址和密码,创建新的数字证书。
同样,生成APK文件E:\Android\keystore\HelloWorld.apk。