最后更新时间:2019年5月17日
APP应用打包
基于 Android 的移动APP开发完成后,接下来需要打包应用程序,最后通过云开发世界上传,审核通过后在云交易中心上架。
在APP代码开发完成之后,需要对程序进行打包操作,生成apk才能在手机上安装使用。打包时需要对APP进行签名。
小知识:为何要进行数字签名?一个方面是由于Android系统的要求,一个Android应用程序必须经过数字签名才能安装到手机上;另一方面,Android系统根据“程序包名+数字签名”来确定应用程序的唯一性。进行数字签名能够避免许多问题,例如:如果只根据包名来确定的话,可能会有多个应用的包名完全一样,那么在安装的时候会进行覆盖安装,这样不利于应用安全性的保护。
APP打包(for Android Studio)
移动应用打包使用集成开发工具自带的打包功能即可,以入门示例“HelloWorld”for Android Studio为例,具体操作如下:
(1) 在菜单栏选择“Build”下的“Generate Signed APK”,弹出对话框;
(2) 如果没有签名文件,点击“Create new”按钮,弹出创建签名文件的对话框,输入信息点击“OK”即可;
(3) 回到上一界面,点击“Next”;
(4) 选择打包后apk的存放位置、打包的版本(release:发布版、debug:调试版),然后将“Signature Versions”签名方案栏中的“V1”和“V2”都进行勾选。随后点击“Finish”,稍作等待就能生成apk。
APP打包(for Eclipse)
1
APP若使用离线数据,需要注意APP数据打包:一般情况下,打包时可将离线数据一起打包成APK,用户下载安装时自动将其离线数据放置到移动设备根目录下。
使用场景:当程序中使用的离线数据存储大小较小的时候可以将其打包到APK中,避免用户使用的时候还需拷贝数据。但是当数据量较大,则不建议将数据打包到APK中。
数据打包步骤:
(1)首先将数据文件压缩为zip文件,将压缩文件拷贝拷到工程目录中的“assets”文件夹中;
(2)在AndroidManifeast.xml文件中添加对手机的读写权限,添加了权限之后程序才能对手机的文件进行操作。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
(3)在子线程中编写解压数据包的代码(此方法为解压zip文件的方法),例如在MainActivity.java文件中编写解压数据包代码,添加解压文件的代码如下所示。
new Thread(new Runnable() { @Override public void run() { //判断文件是否已存在 String fileFolder = Environment.getExternalStorageDirectory().getPath() + "/MapGIS Data/wuhan"; File file = new File(fileFolder); if (!file.exists() && !file.isDirectory()) { //如果文件不存在,则解压文件 mapFromAsset(getApplicationContext(), "MapGIS Data.zip"); } } }).start(); //方法 public static void mapFromAsset(Context context, String assetName) { //解压目的存放路径 String outputDirectory = Environment.getExternalStorageDirectory().getPath(); //输入流 InputStream localInputStream; try { localInputStream = context.getAssets().open(assetName); //调用解压文件方法 unzip(localInputStream, outputDirectory); } catch (IOException e) { e.printStackTrace(); } } /** * 解压ZIP文件 * * @param zipFileName ZIP文件 * @param outputDirectory 解压目的存放路径 */ public static void unzip(InputStream zipFileName, String outputDirectory) { try { BufferedOutputStream dest = null; ZipInputStream in = new ZipInputStream(zipFileName); // 获取ZipInputStream中的ZipEntry条目,一个zip文件中可能包含多个ZipEntry, // 当getNextEntry方法的返回值为null,则代表ZipInputStream中没有下一个ZipEntry, // 输入流读取完成; ZipEntry entry = in.getNextEntry(); while (entry != null) { // 创建以zip包文件名为目录名的根目录 File file = new File(outputDirectory); file.mkdir(); if (entry.isDirectory()) { String name = entry.getName(); name = name.substring(0, name.length() - 1); file = new File(outputDirectory + File.separator + name); file.mkdir(); } else { // 判断父文件夹是否被创建 File Fout = new File(outputDirectory, entry.getName()); if (!Fout.exists()) { (new File(Fout.getParent())).mkdirs(); } int count; byte data[] = new byte[2048]; file = new File(outputDirectory + File.separator + entry.getName()); file.createNewFile(); FileOutputStream out = new FileOutputStream(file); dest = new BufferedOutputStream(out, 2048); while ((count = in.read(data, 0, 2048)) != -1) { dest.write(data, 0, count); } dest.flush(); dest.close(); } // 读取下一个ZipEntry entry = in.getNextEntry(); } in.close(); //到此解压完成,可以读取其中的数据 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); } }
说明:上述解压代码不支持中文名称的文件,建议将数据库文件、地图文档文件等用英文命名。若要支持中文名称的文件,可以选择用第三方解压功能的jar包。
解压完成之后即可读取解压的文件。
2
移动应用打包使用集成开发工具自带的打包功能即可,以入门示例“FirstMap”for Eclipse为例,具体操作如下:
(1)右键“FirstMap” |“Export”,选中“Android” |“Export Android Application”,单击 “Next”继续,如下图所示;
(2)选择将要导出的Project“FirstMap”,单击“Next”继续,如下图所示;
(3)在打开的新窗口中,选中“Create new keystore”,单击“Browse”,选择签名文件存储位置并设置文件名,如下图所示,通常存放在该项目的根目录下;
特别说明:在此操作将生成keystore文件(即数字签名/数字证书,一般情况下用来进行通信加密),基于此文件打包APK,主要作用为APP加密,一来防破解、二来信任。推荐不同app打包用不同的数字签名。例如升级应用程序时同包名,但签名不一样是无法覆盖安装的(此举也避免了APP升级时其他人恶意发布新版本替换原来的真版本);空的签名是未信任的应用在某些设备上也安装不了。
(4)单击保存回到“Keystore selection”界面,设置密码和确认密码,并单击“ Next”继续,如下图所示;
(5)在打开的“Key Creation”对话框中设置别名、地区、单位等信息,单击“ Next”继续,如下图所示:
(6)在新打开的“Destination and key/certificate checks”对话框中,单击“Browse”,选择目标 APK 文件存放的位置及文件名,单击“保存”,回到“Destination and key/certificate checks”对话框,单击“Finish”,完成工程“FirstMap”的打包,如下图所示;
至此,打包工作完成,接下来将生成的*.APK 文件拷贝到手机,在手机端运行安装,或者将其发布到互联网供其他用户下载安装。
APP上传发布
移动应用打包完成后,即可使用云开发世界的 “上传新产品”模块上传该移动产品,通过审核后在云交易中心发布,供终端用户使用。
(1) 在线访问云开发世界,通过账号登录(需先注册并加入云开发世界),登录之后单击网页右上角的『工作台->工作室->个人工作室->产品管理->上传新产品->移动产品』进入;
(2) 在弹出的“上传-移动产品”页面中,默认勾选产品类别『移动端-Android应用』,按照界面提示分别设置产品提交、基本信息、开发信息、描述信息等,如下图所示(其中标红项为必填项);
(3) 设置完成之后,可点击最下方的『保存产品』进行保存或『提交产品』进行提交。 若点击的是『保存产品』则如下图所示,在〖我的产品→未上架〗的列表中显示该框架产品,此时产品状态为“未提交”,提供查看,编辑和删除操作。
若点击的是『提交产品』,则如下图所示,在『我的产品→未上架』的列表中显示该框架产品,此时产品状态为“待审核”,只提供查看和撤回操作。等待审核,若审核成功则会在云交易中心上架,若有问题则会返回相关问题信息给用户。
APP上传完成后,Smaryun后台质保团队将严格测试审核APP产品,审核通过后的APP将统一在云交易中心上架。