【Android开发Wiki】进阶篇包含多个APK-Maintaining Multiple APKs(三):创建多个APK给不同的GL结构
- 格式:pdf
- 大小:287.25 KB
- 文档页数:7
原文链接:/training/multiscreen/adaptui.html根据您的应用当前显示的布局,用户界面流程可能会有所不同。
例如,如果您的应用处于双面板模式下,点击左侧面板上的项即可直接在右侧面板上显示相关内容;如果该应用处于单面板模式下,相关内容就应以其他活动的形式在同一面板上显示。
确定当前布局由于每种布局的实施都会稍有不同,因此您可能需要先确定当前向用户显示的布局。
例如,您可以了解用户所处的是“单面板”模式还是“双面板”模式。
要做到这一点,您可以查询指定视图是否存在以及是否已显示出来。
请注意:这段代码用于查询“报道”面板是否可用,与针对具体布局的硬编码查询相比,这段代码的灵活性要大得多。
再举一个适应各种组件的存在情况的方法示例:在对这些组件执行操作前先查看它们是否可用。
例如,新闻阅读器示例应用中有一个用于打开菜单的按钮,但只有在版本低于 3.0 的Android 上运行该应用时,这个按钮才会存在,因为 API 级别 11 或更高级别中的Acti onBar已取代了该按钮的功能。
因此,您可以使用以下代码为此按钮添加事件侦听器:根据当前布局做出响应有些操作可能会因当前的具体布局而产生不同的结果。
例如,在新闻阅读器示例中,如果用户界面处于双面板模式下,那么点击标题列表中的标题就会在右侧面板中打开相应报道;但如果用户界面处于单面板模式下,那么上述操作就会启动一个独立活动:同样,如果该应用处于双面板模式下,就应设置带导航标签的操作栏;但如果该应用处于单面板模式下,就应使用旋转窗口小部件设置导航栏。
因此您的代码还应确定哪种情况比较合适: final String CATEGORIES[] = { "热门报道", "政治", "经济", "Technology" };重复使用其他活动中的片段多屏幕设计中的重复模式是指,对于某些屏幕配置,已实施界面的一部分会用作面板;但对于其他配置,这部分就会以独立活动的形式存在。
Android包管理机制(⼀)PackageInstaller的初始化前⾔包管理机制是Android中的重要机制,是应⽤开发和系统开发需要掌握的知识点之⼀。
包指的是Apk、jar和so⽂件等等,它们被加载到Android内存中,由⼀个包转变成可执⾏的代码,这就需要⼀个机制来进⾏包的加载、解析、管理等操作,这就是包管理机制。
包管理机制由许多类⼀起组成,其中核⼼为PackageManagerService(PMS),它负责对包进⾏管理,如果直接讲PMS会⽐较难以理解,因此我们需要⼀个切⼊点,这个切⼊点就是常见的APK的安装。
讲到APK的安装之前,先了解下PackageManager、APK⽂件结构和安装⽅式。
1.PackageManager简介与ActivityManager和AMS的关系类似,PMS也有⼀个对应的管理类PackageManager,⽤于向应⽤程序进程提供⼀些功能。
PackageManager是⼀个抽象类,它的具体实现类为ApplicationPackageManager,ApplicationPackageManager中的⽅法会通过IPackageManager与AMS进⾏进程间通信,因此PackageManager所提供的功能最终是由PMS来实现的,这么设计的主要⽤意是为了避免系统服务PMS直接被访问。
PackageManager提供了⼀些功能,主要有以下⼏点:1. 获取⼀个应⽤程序的所有信息(ApplicationInfo)。
2. 获取四⼤组件的信息。
3. 查询permission相关信息。
4. 获取包的信息。
5. 安装、卸载APK.2.APK⽂件结构和安装⽅式APK是AndroidPackage的缩写,即Android安装包,它实际上是zip格式的压缩⽂件,⼀般情况下,解压后的⽂件结构如下表所⽰。
⽬录/⽂件描述assert存放的原⽣资源⽂件,通过AssetManager类访问。
*AllowUsbDebuggingCritically.apk 不可删除,不知道是什么程序,但是估计和USB连接电脑有关.建议不删除。
AntHalService.apk 选删,无线电服务,跟收音机相关ApplicationsProvider 选删,搜索应用提供商,删除后不能与电脑进行电话本同步等操作*atfwd.apk 不可删除,未知,我没有删,不知道有什么用的.BackupAndRestore。
apk 选删,备份与恢复,不重要,感觉没啥用。
BackupRestoreConfirmation.apk 选删,备份还原,不用谷歌备份的留着没啥用BackupRestoreRemoteService。
apk 选删,备份恢复远程服务,与上面两个关联BasicDreams.apk 选删,休眠模式2、BlackGestureCustom.apk 选删,建议不删, 黑屏手势,双击开屏,黑屏打开闪光灯等都要这个Blacklist.apk 选删,来电拦截,用第三方的可以删除BluetoothExt 选删蓝牙相关Browser 选删,游览器,可以用第三方C2U.apk 选删,虽然不知道什么用,但是我没用删除,看看大小54KB。
还是不删除吧。
CABLService.apk 选删,有的说是传感相关有的说是自动调整亮度,但是个人建议不删除。
Calculator 选删,计算器Calendar.apk 选删,日历。
CalendarProvider。
apk 选删,日历相关,用来添加在日历中添加的事项,备忘等,日历删了就删除吧~CertInstaller.apk 选删,建议不删除.证书服务,证书再比如使用移动支付这一类可能就会需要删除他主进程后依然会主动加载,不过也不会奔溃,点击设置里面的证书服务会FC Clock 选删,时钟,如果需要闹钟,建议不删。
*com。
qualcomm。
location.apk 不可删除。
高能CPU情景模式,不能删除.删除后CPU一直工作在固定频率*Contacts 不可删除, 联系人*ContactsProvider 不可删除联系人存储,不能删除,否则不能保存电话本DayD 删除,看看大小54KB.还是不删除吧。
组合:为范例应用创建框架现在,我们对导航的模式和屏幕分组技术有了有深入地理解,是时候把它们组合起来并应用到我们的屏幕上了。
让我们再看一眼这个新闻应用范例的完整的屏幕地图。
下一步,我们要做的是从前文讨论过的导航模式中选择一种并应用到这个屏幕地图上,使用Anroid最佳实践方式,最大化导航速度,最小化触屏次数,同时保持接口的直观与统一。
我们也应该考虑不同设备的屏幕尺寸不一这个因素,做出相应的不同的选择。
为了简单起见,让我们专注于平板和手持制备(手机)。
-Choose Patterns选择模式选择模式-Choose首先,我们的第二层屏幕(故事分类列表,照片列表,以及保存的项目列表)可以使用标签(tabs)统一分组。
注意,我们并不一定需要使用水平排列的标签(tabs);在一些情况下,下拉列表UI元素可以作为合适的代替使用,特别是当设备的屏幕非常窄时,如一些手机。
我们也可以把,保存的图片列表,保存的故事列表组合起来,在手机用使用标签(tabs)显示,或是是平板上使用多个垂直的内容面板显示。
最后,让我们考虑一下怎么呈现新闻故事。
为了简化不同故事分类之就的导航,第一个可选方案是使用水平颁页,并在横向滑动面上使用一系列的标签(labels),指示当前可见的页面以及相临地可访问的分类。
在平板上,当水平显示时,我们可以多做一步,在屏幕左边添加一个面板显示水平可分页的故事列表,而故事视图则作为主要内容显示在屏幕右边。
下图展示了使用这种导航模式后手机以及平板上新的屏幕地图。
到目前为止,思考一下屏幕地图的变化是一个很好的主意,这样做是为了防止在实践中(当你草绘应用的屏幕布局时)你的选择不能很好的被应用。
下图是一个屏幕地图变化的范例,其展示的是在平板上并排地显示不同分类的故事列表,而故事视力则保持独立。
-Sketch and Wireframe素描和线框-Sketch素描和线框绘制线框图是你开始为你的屏幕布局时的第一步。
有创意地开始想象怎么样安排UI元素来允许用户在你的应用种进行导航。
总结安卓APK的权限、权限等级、运行shell命令、阻塞问题********************2016.81. 权限需要的权限等级一个安卓APK,如果需要某个权限,则在AndroidManifest.xml文件中进行权限声明,比如:<manifest ... ><uses-permission android:name="android.permission.SET_PREFERRED_APPLICATIONS" /><uses-sdk ... /><application > ... </application></manifest>但是,权限是有分“权限等级”的,只有APK处于相应的权限等级,才能获得这个权限。
比如android.permission.SET_PREFERRED_APPLICATIONS这个权限需要的权限等级是android:protectionLevel="signature"。
在Android源码 frameworks/base/core/res/AndroidManifest.xml中,可看到各个权限需要的权限等级。
我们一般没有源码,可参考http://code.metager.de/source/xref/android/4.2/frameworks/base/core/res/AndroidManifest.xml。
2. 安卓的权限等级android的“权限等级”分为四种:"normal"、"dangerous"、"signature"、"signature|system"("signatureOrSystem"), 其中normal 和dangerous等级的权限是普通apk在Mainifest中声明即可获取的。
Android开发教程签名与多渠道打包什么叫签名?为什么签名?签名也叫数字证书,可以理解为一个app的一个唯一标识。
与项目的包名配合使用作为一个唯一标识。
同一个应用不同版本要使用同一个签名,不然产生会冲突,造成安装不上。
(包名一样,签名不一样产生冲突)开发调试生成apk使用的是默认签名debug.keystore命令行模式进入 .android路径下(sdk路径下.android,或者用户.android)输入keytool -list -keystoredebug.keystore输入密码: android就可以查看到sha1值这个值是我们平常开发调试的时候生成apk所使用的key,在一些第三方sdk申请的时候会用到。
在用第三方sdk测试的时候使用默认的debug key就好,因为,平常开发调试都是用默认的debug key进行打包的。
正式上线为什么不能用默认的debug key,而用自签名(自己生成一个key)1、若使用某一个开发者的默认签名,那么每次上线都必须在这个开发者的jdk环境下进行打包2、默认debug key是跟随开发环境的,每个开发者的环境不用key也不一样,如果开发者出现工作变动或者电脑损坏就会发生key丢失的现象。
3、签名都是有有效期的,默认签名的有效期是1年使用自建签名android studio中点击build,选择generate singed Apk选择要打包的项目点击next若之前已经生成过key store就直接选择在本地的生成好的keystore。
填入密码alias 别名等资料进行打包。
并没有已经生成好的选择create new从上到下分别为保存的路径密码别名密码,最好与上一个密码保持一致,便于记忆有效期姓名部门组织(公司)城市省国家代码,中国为86点击ok生成keystore,我们可以只用这个jks进行签名了,把这个jks保存好,最好上传至公司svn.进入签名文件的路径keytool -list -v -alias aaa-keystoreaaaaa.jks查看签名sha1路径为生成的apk存放路径release是发布版本的意思(debug是调试版本)点击finish进行打包。
目前很多Android软件和游戏中存在恶意行为或收集用户隐私等问题,mTweak站点的软件和游戏下载专区为每个应用程序都进行了严格的检查,显示APK权限和安全敏感相关的问题。
同时手机优化大师的APK安装器将会检查每个应用的请求权限,保证用户的安全,下面是mTweak总结的APK权限大全。
访问登记属性android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限获取错略位置android.permission.ACCESS_COARSE_LOCATION,通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米获取精确位置android.permission.ACCESS_FINE_LOCATION,通过GPS芯片接收卫星的定位信息,定位精度达10米以内访问定位额外命令android.permission.ACCESS_LOCATION_EXTRA_COMMANDS,允许程序访问额外的定位提供者指令获取模拟定位信息android.permission.ACCESS_MOCK_LOCATION,获取模拟定位信息,一般用于帮助开发者调试应用获取网络状态android.permission.ACCESS_NETWORK_STATE,获取网络信息状态,如当前的网络连接是否有效访问Surface Flinger android.permission.ACCESS_SURFACE_FLINGER,Android平台上底层的图形显示支持,一般用于游戏或照相机预览界面和底层模式的屏幕截图获取WiFi 状态android.permission.ACCESS_WIFI_STATE,获取当前WiFi接入的状态以及WLAN热点的信息账户管理android.permission.ACCOUNT_MANAGER,获取账户验证信息,主要为GMail账户信息,只有系统级进程才能访问的权限验证账户android.permission.AUTHENTICATE_ACCOUNTS,允许一个程序通过账户验证方式访问账户管理ACCOUNT_MANAGER相关信息电量统计android.permission.BATTERY_STATS,获取电池电量统计信息绑定小插件android.permission.BIND_APPWIDGET,允许一个程序告诉appWidget服务需要访问小插件的数据库,只有非常少的应用才用到此权限绑定设备管理android.permission.BIND_DEVICE_ADMIN,请求系统管理员接收者receiver,只有系统才能使用绑定输入法android.permission.BIND_INPUT_METHOD ,请求InputMethodService服务,只有系统才能使用绑定RemoteView android.permission.BIND_REMOTEVIEWS,必须通过RemoteViewsService服务来请求,只有系统才能用绑定壁纸android.permission.BIND_WALLPAPER,必须通过WallpaperService服务来请求,只有系统才能用使用蓝牙android.permission.BLUETOOTH,允许程序连接配对过的蓝牙设备蓝牙管理android.permission.BLUETOOTH_ADMIN,允许程序进行发现和配对新的蓝牙设备变成砖头android.permission.BRICK,能够禁用手机,非常危险,顾名思义就是让手机变成砖头应用删除时广播android.permission.BROADCAST_PACKAGE_REMOVED,当一个应用在删除时触发一个广播收到短信时广播android.permission.BROADCAST_SMS,当收到短信时触发一个广播连续广播android.permission.BROADCAST_STICKY,允许一个程序收到广播后快速收到下一个广播WAP PUSH广播android.permission.BROADCAST_WAP_PUSH,WAP PUSH服务收到后触发一个广播拨打电话android.permission.CALL_PHONE,允许程序从非系统拨号器里输入电话号码通话权限android.permission.CALL_PRIVILEGED,允许程序拨打电话,替换系统的拨号器界面拍照权限android.permission.CAMERA,允许访问摄像头进行拍照改变组件状态android.permission.CHANGE_COMPONENT_ENABLED_STATE,改变组件是否启用状态改变配置android.permission.CHANGE_CONFIGURATION,允许当前应用改变配置,如定位改变网络状态android.permission.CHANGE_NETWORK_STATE,改变网络状态如是否能联网改变WiFi 多播状态android.permission.CHANGE_WIFI_MULTICAST_STATE,改变WiFi 多播状态改变WiFi状态android.permission.CHANGE_WIFI_STATE,改变WiFi状态清除应用缓存android.permission.CLEAR_APP_CACHE,清除应用缓存清除用户数据android.permission.CLEAR_APP_USER_DATA,清除应用的用户数据底层访问权限android.permission.CWJ_GROUP,允许CWJ账户组访问底层信息手机优化大师扩展权限android.permission.CELL_PHONE_MASTER_EX,手机优化大师扩展权限控制定位更新android.permission.CONTROL_LOCATION_UPDATES,允许获得移动网络定位信息改变删除缓存文件android.permission.DELETE_CACHE_FILES,允许应用删除缓存文件删除应用android.permission.DELETE_PACKAGES,允许程序删除应用电源管理android.permission.DEVICE_POWER,允许访问底层电源管理应用诊断android.permission.DIAGNOSTIC,允许程序到RW到诊断资源禁用键盘锁android.permission.DISABLE_KEYGUARD,允许程序禁用键盘锁转存系统信息android.permission.DUMP,允许程序获取系统dump信息从系统服务状态栏控制android.permission.EXPAND_STATUS_BAR,允许程序扩展或收缩状态栏工厂测试模式android.permission.FACTORY_TEST,允许程序运行工厂测试模式使用闪光灯android.permission.FLASHLIGHT,允许访问闪光灯强制后退android.permission.FORCE_BACK,允许程序强制使用back后退按键,无论Activity是否在顶层访问账户Gmail列表android.permission.GET_ACCOUNTS,访问GMail账户列表获取应用大小android.permission.GET_PACKAGE_SIZE,获取应用的文件大小获取任务信息android.permission.GET_TASKS,允许程序获取当前或最近运行的应用允许全局搜索android.permission.GLOBAL_SEARCH,允许程序使用全局搜索功能硬件测试android.permission.HARDWARE_TEST,访问硬件辅助设备,用于硬件测试注射事件android.permission.INJECT_EVENTS,允许访问本程序的底层事件,获取按键、轨迹球的事件流安装定位提android.permission.INSTALL_LOCATION_PROVIDER,安装定位提供供安装应用程序android.permission.INSTALL_PACKAGES,允许程序安装应用内部系统窗口android.permission.INTERNAL_SYSTEM_WINDOW,允许程序打开内部窗口,不对第三方应用程序开放此权限访问网络android.permission.INTERNET,访问网络连接,可能产生GPRS流量结束后台进程android.permission.KILL_BACKGROUND_PROCESSES,允许程序调用killBackgroundProcesses(String).方法结束后台进程管理账户android.permission.MANAGE_ACCOUNTS,允许程序管理AccountManager中的账户列表管理程序引用android.permission.MANAGE_APP_TOKENS,管理创建、摧毁、Z轴顺序,仅用于系统高级权限android.permission.MTWEAK_USER,允许mTweak用户访问高级系统权限社区权限android.permission.MTWEAK_FORUM,允许使用mTweak社区权限软格式化android.permission.MASTER_CLEAR,允许程序执行软格式化,删除系统配置信息修改声音设置android.permission.MODIFY_AUDIO_SETTINGS,修改声音设置信息修改电话状态android.permission.MODIFY_PHONE_STATE,修改电话状态,如飞行模式,但不包含替换系统拨号器界面格式化文件系统android.permission.MOUNT_FORMAT_FILESYSTEMS,格式化可移动文件系统,比如格式化清空SD卡挂载文件系统android.permission.MOUNT_UNMOUNT_FILESYSTEMS,挂载、反挂载外部文件系统允许NFC通讯android.permission.NFC,允许程序执行NFC近距离通讯操作,用于移动支持永久Activity android.permission.PERSISTENT_ACTIVITY,创建一个永久的Activity,该功能标记为将来将被移除处理拨出电话android.permission.PROCESS_OUTGOING_CALLS,允许程序监视,修改或放弃播出电话读取日程提醒android.permission.READ_CALENDAR,允许程序读取用户的日程信息读取联系人android.permission.READ_CONTACTS,允许应用访问联系人通讯录信息屏幕截图android.permission.READ_FRAME_BUFFER,读取帧缓存用于屏幕截图读取收藏夹和历史记录com.android.browser.permission.READ_HISTORY_BOOKMARKS,读取浏览器收藏夹和历史记录读取输入状态android.permission.READ_INPUT_STATE,读取当前键的输入状态,仅用于系统读取系统日志android.permission.READ_LOGS,读取系统底层日志读取电话状态android.permission.READ_PHONE_STATE,访问电话状态读取短信内容android.permission.READ_SMS,读取短信内容读取同步设置android.permission.READ_SYNC_SETTINGS,读取同步设置,读取Google在线同步设置读取同步状态android.permission.READ_SYNC_STATS,读取同步状态,获得Google在线同步状态重启设备android.permission.REBOOT,允许程序重新启动设备开机自动允许android.permission.RECEIVE_BOOT_COMPLETED,允许程序开机自动运行接收彩信android.permission.RECEIVE_MMS,接收彩信接收短信android.permission.RECEIVE_SMS,接收短信接收WapPushandroid.permission.RECEIVE_WAP_PUSH,接收WAP PUSH信息录音android.permission.RECORD_AUDIO,录制声音通过手机或耳机的麦克排序系统任务android.permission.REORDER_TASKS,重新排序系统Z轴运行中的任务结束系统任务android.permission.RESTART_PACKAGES,结束任务通过restartPackage(String)方法,该方式将在外来放弃发送短信android.permission.SEND_SMS,发送短信设置Activity android.permission.SET_ACTIVITY_WATCHER,设置Activity观察器一般用于monkey测试观察其设置闹铃提醒com.android.alarm.permission.SET_ALARM,设置闹铃提醒设置总是退出android.permission.SET_ALWAYS_FINISH,设置程序在后台是否总是退出设置动画缩放android.permission.SET_ANIMATION_SCALE,设置全局动画缩放设置调试程序android.permission.SET_DEBUG_APP,设置调试程序,一般用于开发设置屏幕方向android.permission.SET_ORIENTATION,设置屏幕方向为横屏或标准方式显示,不用于普通应用设置应用参数android.permission.SET_PREFERRED_APPLICATIONS,设置应用的参数,已不再工作具体查看addPackageToPreferred(String) 介绍设置进程限制android.permission.SET_PROCESS_LIMIT,允许程序设置最大的进程数量的限制设置系统时间android.permission.SET_TIME,设置系统时间设置系统时区android.permission.SET_TIME_ZONE,设置系统时区设置桌面壁纸android.permission.SET_WALLPAPER,设置桌面壁纸设置壁纸建议android.permission.SET_WALLPAPER_HINTS,设置壁纸建议发送永久进程信号android.permission.SIGNAL_PERSISTENT_PROCESSES,发送一个永久的进程信号状态栏控制android.permission.STATUS_BAR,允许程序打开、关闭、禁用状态栏访问订阅内容android.permission.SUBSCRIBED_FEEDS_READ,访问订阅信息的数据库写入订阅内容android.permission.SUBSCRIBED_FEEDS_WRITE,写入或修改订阅内容的数据库显示系统窗口android.permission.SYSTEM_ALERT_WINDOW,显示系统窗口更新设备状态android.permission.UPDATE_DEVICE_STATS,更新设备状态使用证书E_CREDENTIALS,允许程序请求验证从AccountManager使用SIP视频E_SIP,允许程序使用SIP视频服务使用振动android.permission.VIBRATE,允许振动唤醒锁定android.permission.WAKE_LOCK,允许程序在手机屏幕关闭后后台进程仍然运行写入GPRS 接入点设置android.permission.WRITE_APN_SETTINGS,写入网络GPRS接入点设置写入日程提醒android.permission.WRITE_CALENDAR,写入日程,但不可读取写入联系人android.permission.WRITE_CONTACTS,写入联系人,但不可读取写入外部存储android.permission.WRITE_EXTERNAL_STORAGE,允许程序写入外部存储,如SD卡上写文件写入Google地图数据android.permission.WRITE_GSERVICES,允许程序写入Google Map 服务数据写入收藏夹和历史记录com.android.browser.permission.WRITE_HISTORY_BOOKMARKS,写入浏览器历史记录或收藏夹,但不可读取读写系统敏感设置android.permission.WRITE_SECURE_SETTINGS,允许程序读写系统安全敏感的设置项读写系统设置android.permission.WRITE_SETTINGS,允许读写系统设置项编写短信android.permission.WRITE_SMS,允许编写短信写入在线同步。
android 覆盖apk原理Android覆盖APK原理概述在Android应用开发中,经常需要对已经安装的应用进行更新或者修复,而覆盖APK是一种常见的更新方式。
本文将介绍Android 覆盖APK的原理以及相关技术。
一、什么是APKAPK(Android Package Kit)是Android应用的安装包,它包含了应用的所有资源文件、源代码以及清单文件等。
当我们安装一个应用时,实际上是将APK文件解压并将其中的资源文件、代码等安装到设备上。
二、为什么需要覆盖APK在软件开发过程中,经常会有新版本的发布,包括功能的增加、优化以及错误的修复。
为了让用户享受到最新的功能和修复最新的问题,需要将新版本的APK覆盖到已经安装的应用上,从而实现应用的更新。
三、覆盖APK的原理覆盖APK的原理主要涉及到两个方面,即签名验证和应用替换。
1. 签名验证在Android系统中,每个应用都有一个唯一的数字签名,用于保证应用的安全性。
当我们安装一个应用时,系统会验证APK文件的签名是否与设备上已安装应用的签名一致。
如果一致,系统会认为是同一个应用,并允许覆盖安装;如果不一致,系统会提示签名不一致,无法覆盖安装。
2. 应用替换当签名验证通过后,系统会将新版本的APK文件解压并替换掉已安装应用的资源文件、代码等。
然后重新加载应用,使得用户可以使用更新后的应用。
需要注意的是,在覆盖APK时,系统会保留应用的数据和用户设置,以确保用户不会因为更新应用而丢失重要的数据。
四、覆盖APK的实现方式在Android开发中,覆盖APK的实现方式有多种,包括通过应用商店更新、通过网络下载更新、通过本地安装包更新等。
1. 应用商店更新通过应用商店更新是最常见的方式之一。
应用商店会检测应用的版本号,并提醒用户进行更新。
用户点击更新按钮后,应用商店会下载新版本的APK文件并进行覆盖安装。
2. 网络下载更新有些应用会在启动时通过网络检测是否有新版本,如果有,则会下载新版本的APK文件,并提示用户进行覆盖安装。
原文链接:/training/multiple-apks/texture.html为不同的GL纹理创建多重的APKs在我们利用多重的APKs在Google Play中开发android应用时,很重要的一点就是在一开始就要采取好的方法,以避免在进一步开发过程中遇到不必要的麻烦。
这节课将会告诉你如何在你的支持不同的OpenGL 纹理格式的子集的应用中创建多重的APKs。
你也将会获得一些工具,这些工具能让你更容易的维护多重的APK代码库。
确认你需要多重的APKs当你试图创建一个对所有Anroid-powered设备可用的应用程序时,当然,你希望你的应用程序在每个独立设备上展示都是最好的,而不管它们是否都支持相同的GL纹理设置。
从一开始看来多重的APK支持就是最好的解决方案,但情况往往不是这样。
多重APK开发者指南的Using Single APK Instead部分包含了一些有用信息,关于如何用单个的APK做到这一点,也包含了如何在程序运行时检测到程序支持的纹理格式。
比较容易的做法是,你可以把你的应用程序绑定所有纹理格式,然后根据你的情况,选择在运行时使用哪一个。
如果你能够做的好,那么仅包含一个单一的APK的应用程序会有以下几个优点:o出版和测试更容易o只需要维持一个代码库o应用程序可以适应设备配置的变化o跨设备的应用程序恢复工作o无需担心市场的偏好,APK的“升级”行为,以及APK在何种类别的设备上运行假设你现在已经研究了这一节课的主题,而且还相当好学的吸收掌握了链接中的资源素材,并确定多重的APKs是你的应用程序的正确选择。
把你的需求列成图表Android开发者指南在supports-gl-texture page页面提供了一些通用的纹理支持作为参考。
此页还包含了一些像电话(家庭电话)支持特定的纹理格式的提示。
需要了解的是,如果你的APKs中有一个支持ETC1,这通常是个不错的主意,因为所有支持OpenGL ES2.0规范的Android-powered设备都支持这种纹理格式。
由于大多数Android-powered设备都支持多种纹理格式,所以你需要建立一个优先顺序。
创建一个包含你的应用程序所要支持的格式的图表。
最左边的单元格将是优先级最低的级别(它可能是ETC1,在性能和兼容性方面真正坚实的默认情况)。
然后你可以给这个图表涂上色,每一种颜色代表一个APK。
给图表着色并不仅是为了让本指南更多彩-它这种方式能让团队内部沟通更容易,现在,你可以简便的指出每个APK为“蓝色”,“绿色”或“红色”,而不是“支持ETC1纹理格式的那个”等等这些沟通方式。
把所有的公共代码和资源文件放在库工程中无论你是修改现有的Android应用程序或新建一个工程,你应该做的第一件事就是建立代码库,这是最重要的。
进入该库项目的所有资源,都只需要更新一次(编码语言的本地化的字符串,颜色文件,固定在共享代码的错误),从而提高你的开发效率,并且能减少一些能够避免的可能性错误。
注意:如何创建库项目及库项目本身的实施细节已经超出了本节课的范围,你可以从下面的链接去了解它∙用Eclipse建立一个库项目∙用命令行建立一个库项目如果你将现有的应用程序转换成用多个APK支持的项目,整理你的代码中的每一个本地话的字符串文件,列表的值,颜色资源,菜单图表和布局,使他们在多个APK之间不受影响,并把它们全放进库项目中。
那些不会发生太大变化的代码也应放入库项目中。
你可能会发现自己可以在两个APK之间扩展这些类来增加一个或多个方法。
另一方面,如果你要从头开始创建应用程序,尝试尽可能的先编写库项目中的代码,如果需要的话,只要把它移动到一个单独的APK中。
这比你在多个APK中添加它,甚至在数月后试图找出这一团糟似的代码是否可被移动到库项目部分从长远看来更容易管理。
创建一个新的APK项目首先你要有个供每个APK释放的单独的Android项目。
为了便于组织,得把库项目和所有相关的APK项目放在相同的父文件夹下。
要记住每个APK需要有相同的包名,虽然他们并不一定需要与库共享包名。
按照前面描述的方案,如果你有三个应用程序,你的根目录可能看起来要像这样:一旦项目被创建了后,就要添加库项目作为每个APK项目的参考。
如果可能的话,在库项目中定义你的启动Activity,并在你的APK项目中扩展这个Activity。
一个在库项目中的被定义的启动Activity能把你所有的应用程序在一个地方初始化,这样一来,每个单独的AP K就不需要重新实现“通用的”任务,如初始化Analytic(分析),运行许可检查,以及在两个APK之间不会发生太大变化的初始化程序。
调整Manifests文件当用户从Google Play下载一个使用多重APK的应用程序时,用下面两个简单的规则可判别用哪个APK是正确的:∙从Manifest中可看出,比较特殊的APK是合格的∙在合格的APK中,我们选择高版本的APK∙如果在市场中,某个设备支持你的APK中列出的一些纹理格式,那么这个设备也被认为是合格的对GL Textures来说,最后一条规则是很重要的。
举例来说,这意味着你应谨慎的在相同的应用程序中使用不同GL格式。
如果你使用PowerVR占了99%的时间,但是用了ETC1后,说,你的启动画面...你的Manifest将需要明确支持这两种格式。
只支持ETC1格式的设备被视为兼容性的设备,你的应用程序被下载后,用户将会看到一些令人崩溃的信息。
常见的情况是,如果你使用特殊的多重APKs以针对支持GL纹理基础上的不同设备,这将是每一个APK 的纹理格式。
这实际上使得纹理比其他两个多重APK尺寸支持的API版本和屏幕尺寸有点不同。
任何给定的设备都只有一个API版本和一个屏幕尺寸,在这个设备上安装的APK需要支持在这个范围内的API版本和屏幕尺寸。
在一台设备所支持的许多APKs而言,经常会出现重复的,解决的办法是一样的,那就是版本代码。
举例来说,我们有一些设备,来看看有多少前面定义的APKs都适合每一台设备.假设在PowerVR、ATI、ETC1都可用时,PowerVR与ATI格式都优于ETC1格式,通过“选择高版本APK”的规则,如果我们给每个APK设置versionCode属性,如红 >= 绿 >= 蓝,在都支持这些APK的设备上面,比起蓝色的APK,红色和绿色的APK将会一直被选择使用,并且在都支持红色和绿色APK的设备里,红色将会被选中。
你要有一个良好的版本代码计划,以使你所有的应用程序在不同的“轨道”。
你可以在开发者指南的Version Codes区找到一个推荐的版本代码计划。
由于设置的APKs只能处理三种可能的外形尺寸,我们个可以把每一个APK分隔1000,并且从起始开始递增,这样也足够处理。
就像下面这样:蓝色:1001,1002,1003,1004...绿色:2001,2002,2003,2004...红色:3001,3002,3003,3005...把所有这些放在一起,你的Android程序的Manifests看起来将会像这样:蓝色:绿色:红色:在把APK上传到Google Play前,再仔细检查一下几项。
切记,这几点是专门为多重APKs 准备的,并不能代表所有将要上传到Google Play的应用程序的一个完整检查列表∙所有的APKs都必须要有相同的包名∙所有的APKs都必须签署相同的证书∙在Manifest中把你的APK想要支持的屏幕尺寸设置为true,把不支持的屏幕尺寸设置为false∙仔细检查你的Manifest文件有没有相互冲突的矛盾信息(在xlarge的屏幕尺寸上仅支持cupcake的APK是不可见的)∙每个APK的Manifest文件必须是唯一的,至少要有一个支持的屏幕尺寸、OpenGL纹理、或者是平台版本∙至少在一个移动设备上测试每一个APK。
除此之外,在你的开发机之中还有一个能够自定义的设备,那就是模拟器。
现在,开始行动吧!另外,在把应用程序推广以前你还要检查编译APK,以确保把你的应用程序放到Google Pl ay后不会出现任何问题。
实际上,使用“AAPT”工具会让这些变的相当简单。
AAPT(Andro id的资源打包工具)是创建和打包您的Android应用程序的构建过程的一部分,也是一个非常有用的检查工具。
在你检查AAPT输出时,一定要确保在多屏幕支持与多屏幕兼容中没有相互冲突的值,这样就不会有你没在Manifest文件中设置的“uses-feature”值出现。
上面的例子在一部分设备中,APK的一大部分是不可见的。
为什么会这样呢?因为通过添加所需的SEND_SMS权限,<font color="#99FF99">android. hardware.telephony</font>功能会隐式添加。
由于大多数(如果不是全部)的xlarge设备是没有电话硬件的平板电脑,Google Play会过滤掉这种情况下的APK,直到有电话硬件的xlarge设备出现。
我们可以通过添加以下代码到Manifest文件中来处理这个问题:在完成了登录前的核查后,把你的APKs上传到Google Play。
浏览Google Play显示这个应用程序可能需要一点时间,当它显示后,执行最后一项检查。
将这个应用程序下载到任何一个测试设备上,你要确认这些APKs是针对我们要开发的预期设备。
祝贺你完成了!文章来源:/page/Creating_Multiple_APKs_for_Different_GL_Textures。