apk扩展文件及使用

上传人:第*** 文档编号:32682356 上传时间:2018-02-12 格式:DOCX 页数:22 大小:42.60KB
返回 下载 相关 举报
apk扩展文件及使用_第1页
第1页 / 共22页
apk扩展文件及使用_第2页
第2页 / 共22页
apk扩展文件及使用_第3页
第3页 / 共22页
apk扩展文件及使用_第4页
第4页 / 共22页
apk扩展文件及使用_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《apk扩展文件及使用》由会员分享,可在线阅读,更多相关《apk扩展文件及使用(22页珍藏版)》请在金锄头文库上搜索。

1、APK 扩展文件基本知识一、APK 扩展文件基本知识Android Market (Google Play Store)中每个 APK 文件的最大限制是 50MB。如果您的程序中包含大量的数据文件,以前您只能把这些数据文件放到自己的服务器上,当用户启动程序的时候让用户去下载。现在这些数据文件可以直接上传到 Android Market 了。在新的 Market控制台上传 App 的时候,可以添加扩展文件了。下面就来看看什么时候该使用扩展文件,该如何使用?每个 APK 可以有 2 个扩展文件,每个文件最大限制是 2GB。为了减少用户的带宽消耗,最好使用压缩格式文件吧。 这两扩展文件具有不同的用途

2、:第一个被称为 main (主)扩展文件,该扩展文件保护您程序中需要用到的附加数据;第二个被称为 patch 扩展(修补)文件,该文件是可选的,并且应该只包含一些不同版本的补丁数据。当然您可以按照您需要的方式来使用这两个扩展文件,不过Android 官方还是推荐把这两个文件的功能分开。main 扩展文件包含核心数据,并且尽量不随程序版本的升级去修改;而 patch 扩展文件可以随程序版本的升级做修改。为了帮助大家理解具体的含义,我们使用一个地图 App 来解释下: 比如 Google 地图程序需要包含一个离线地图数据包,这样可以方便用户离线查看地图,在程序发布的时候,可以把现有的离线数据包作为

3、 main 扩展文件上传到 Market。 然后过了半年 Google 地图更新了,新添加了一些刚刚修好的高速公路、新建立的商场 等信息,可以把这些新增的信息作为 patch 扩展文件使用。 这样 Google 地图 1.0 版本对应一个 main 扩展文件;而 Google 地图 1.1 版本对应一个main 扩展文件和一个 1.1 版本的 patch 扩展文件; Google 地图 1.2 版本对应一个 main 扩展文件和一个 1.2 版本的 patch 扩展文件。 这里面的 main 扩展文件是同一个文件而 patch 扩文件是随版本变化的。这样的好处就是当程序升级的时候, 用户不用重

4、新下载 main 扩展文件了,只需要下载少量的新增文件即可,节省用户流量。二、扩展文件的命名格式扩展文件可以使用任何文件格式(ZIP, PDF, MP4, 等)。不管任何文件格式 Android 都认为他们是 obb(opaque binary blobs)文件,并且会根据如下文件命名规则来重命名扩展文件:main|patch.obbmain or patch指定文件是 main 扩展文件还是 patch 扩展文件,每个 APK 只能有一个 main 扩展文件和一个 patch 扩展文件。和第一次上传该扩展文件的 APK 文件的 android:versionCode 一致。后续版本的 APK

5、 可以重用前面上传的扩展文件。您程序的 Java 包名例如程序的版本为 5,程序的包名为org.goodev.expansion.downloader。则上传的 main 扩展文件会被重命名为:main.5.org.goodev.expansion.downloader.obb三、扩展文件的保存位置当 Android Market 下载程序的扩展文件的时候会保存到系统的共享存储区。为了确保程序正常运行,您不能删除、移动或者重命名扩展文件。在某些设备上 Market 无法自动下载该扩展文件,那么您应该在程序启动的时候去下载该文件并且保存到同样的位置。扩展文件保存位置如下:/Android/obb

6、/代表共享文件的目录路径,通过函数getExternalStorageDirectory()获取;APK 的 Java 包名。对于每个 App 而言,该目录下最多只能包含 2 个扩展文件。一个是 main 扩展文件另外一个是 patch 扩展文件。当更新程序的时候,如果有新的扩展文件则新文件会覆盖旧的扩展文件。 如果您需要解压缩扩展文件来使用,请注意不要删除该.obb 文件,并且也不要把文件解压缩到该目录。您应该把解压缩后的文件保存到getExternalFilesDir()返回的目录下面。如果有可能的话,最好使用程序能直接读取的文件格式而不用再次解压缩文件了。Android 开发团队提供了一

7、个项目( APK Expansion Zip Library)可以直接读取 ZIP 文件中的内容而不用解压缩该文件.需要注意的是:保存在系统共享存储区的文件,用户和其他 APP 也可以访问。四、下载扩展文件的流程在大多数情况下,Market 会在下载 APK 的同时去下载扩展文件。然而,在某些情况下 Market 无法下载扩展文件或者用户删除了以前下载的扩展文件,您的程序需要处理这种异常情况。当您的程序启动的时候,可以检测文件是否存在并且可以从 Market 上下载。开发者检查清单:您可以通过下面的清单来检查是否需要使用扩展文件 1. 您的程序是否真的需要超过 50MB 的大小限制。在移动设备

8、上空间是非常宝贵的,您应该尽可能减少 App 的大小。如果您仅仅是为了提供支持多种显示设备的图片资源的话,可以考虑使用发布多个APK 的方式来减少每个 APK 的大小。 2.判断哪些数据需要打包为扩展文件发布。 3.在程序中添加访问共享存储区中扩展文件的代码 4.在程序的启动 Activity 中添加检测扩展文件是否存在,以及下载扩展文件的代码五、扩展文件的规则和限制 1.每个扩展文件最大为 2GB 2.用户必需要从 Android Market 获取您的程序才能自动从 Market中下载扩展文件 3.当在您的程序中下载扩展文件的时候,Market 每次都会为每个文件生成一个唯一的下载 URL

9、,该 URL 会在短期内失效。 4.当你上传一个新的 APK 的时候,可以选择使用以前上传的扩展文件 5.如果您使用多个 APK 文件来适配不同的设备,并且也希望使用多个扩展文件。为了获取一个唯一的 versionCode 和不同的 Market filter, 您需要分别为每个设备上传不同的 APK 文件。 6. 不能通过更新扩展文件来发布一个新的版本。 7. 不要在 obb/文件夹中保存其他数据 8.不要删除或者重命名.obb 文件六、APK 扩展文件使用实例 要在 App 中使用扩展文件,需要两个附加的 Android 库项目:1)Google Market Licensing pack

10、age2)Google Market APK Expansion Library package可以通过 Android SDK Manager 来下载,也可以直接通过如下链接下载:https:/dl- market_licensing-r02.zip 文件中的目录google_market_licensinglibrary 来创建一个库项目;然后使用market_apk_expansion-r01.zip 中的google_market_apk_expansiondownloader_library 来创建另外一个库项目。同时为了简化对 ZIP 格式扩展文件的处理,在market_apk_e

11、xpansion-r01.zip 文件中还包含了一个对 ZIP 文件处理的库项目:google_market_apk_expansionzip_file。 如果您使用的扩展文件格式是 ZIP,那么也可以创建这个库项目。1. 声明需要的权限1234567891011121314151617181920.注意:默认情况下,下载库项目需要的 API level 为 4 而 APK 扩展 ZIP 库项目需要 API level 为 5.准备工作完成后,下面来具体看看如何使用扩展文件。2. 实现下载服务(Implementing the downloader service)为了实现在后台下载文件,下载

12、库项目提供了一个 Service 实现,名称为 DownloaderService。您应该继承自这个文件来实现您的下载服务。为了简化下载服务的开发,该 DownloaderService 还实现了如下功能: 注册一个 BroadcastReceiver 来监听设备的网络连接状态的改变。如果网络连接断开就暂停下载;如果网络连接恢复就继续下载。 安排一个 RTC_WAKEUP 通知,当下载服务被终结的时候可以通过该通知来启动下载服务 生成一个通知(Notification )来显示下载的进度以及下载错误等状态 允许您的程序手工的暂停和恢复下载 检测共享存储区挂载了并且可用,在下载文件之前检测 文件

13、是否已经存在、存储空间是否足够。如果出现问题就通知用户。您仅仅需要创建一个继承自 DownloaderService 的类,并且实现如下三个函数即可:getPublicKey():您 Market 账号的 Base64 编码 RSA 公共密钥,可以通过如下网址获取:https:/ 许可策略用来生成混淆器(Obfuscator)的一组随机bytes。getAlarmReceiverClassName(): 返回您程序中用来重启下载进程的BroadcastReceiver 类名称。当某些情况下,下载服务被意外终止的时候通过该 BroadcastReceiver 类来重新下载。比如 进程管理的程序终

14、止了下载服务。下面是一个 DownloaderService 类的实现代码:1234567891011121314151617181920212223public class SampleDownloaderService extendsDownloaderService / You must use the public key belonging to your publisher accountpublicstaticfinalString BASE64_PUBLIC_KEY =YourAndroidMarketLVLKey;/ You should also modify this s

15、altpublicstaticfinalbyte SALT =newbyte 1,42, -12, -1,54,98,-100, -12,43,2, -8, -4,9,5, -106, -107, -33,45, -1,84;OverridepublicString getPublicKey() returnBASE64_PUBLIC_KEY;Overridepublicbyte getSALT() returnSALT;OverridepublicString getAlarmReceiverClassName() returnSampleAlarmReceiver.class.getName();然后在 manifest 文件中声明该 Service 即可。非常简单吧!3. 实现 alarm receiver为了检测下载进程和重启下载服务,DownloaderService 会安排一个 RTC_WAKEUP Alarm 来发送一个 Intent 到程序的 BroadcastReceiver。你必需定义这个 Broad

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号