使用 uiautomator 框架进行 UI 测试

###1. uiautomator 在应用的开发过程中, 除了需要对组成android应用的组件(例如 activity, service, content provider)进行单元测试, 测试应用运行过程中的界面行为也很有必要, UI 测试确保应用在一系列的用户操作之后(比如键盘输入, 点击工具栏,菜单,对话框,以及其它的UI控件), 得到正确的UI输出 UI 测试的通用方式是手工运行测试, 验证应用是否如同期期望一般地运行, 但是这种方式非常耗时, 使用软件进行自动化测试是更好的方法, 自动化测试涉及创建程序执行测试任务来覆盖指定的用户场景, 然后使用测试框架自动重复地运行测试用例 Android 4.1 发布时包含了一种新的测试框架: uiautomator, 包括如下的工具 uiautomatorviewer : 一个图形界面的工具, 可以通过adb连接来分析android设备上当前应用的UI uiautomator : 一个测试的java库, 包含了创建UI测试的各种API和执行自动化测试的引擎 要使用 uiautomator, 需要满足如下的条件: Android SDK tools, 版本不小于...

多用户与 userid uid appid

###1. 单用户时代的 app 与 linux uid/gid android 从诞生之初, 即将 linux uid/gid 体系用于 android package 的管理, 即为不同的 package 分配不同的 uid/gid (当然, 多个package也可以共享gid/uid, 另外gid通常 与 uid相同) android.os.Process 中定义了 uid 的分配 public class Process { ...... public static final int SYSTEM_UID = 1000;...

AppOps

###1. AppOps Android 的App在安装时, 会列出该App申请的权限, 用户只能选择同意该App使用所有申请的权限并安装, 或者拒绝安装, 并不能单独控制App的权限 Google 在android 4.3 引入了 App Ops(Application Operations), 用于管理App权限, 但因为种种原因, google 在 android 4.4.2 中 “隐藏” 了 AppOps 功能 (移除了 settings 中的 AppOps 配置界面’AppOpsSummary’, 但并未移除 AppOps 的相关功能) 从 Android M 开始, google 推出了新的权限管理机制Android Runtime Permission, 在 “settings” > “apps” > “permissions” 中可以配置App的权限, 并且在App执行过程中, 访问未授权的权限时, 弹框提示用户授权 Android Runtime Permission 只支持 targetSdk >= 23 的 App,但事实上, 在 Androi M 的系统上可以看到,...

Intent

###1. Intent Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android系统表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应,如果有多个条件符合的组件,就以列表的方式让用户手动选择一个. Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互 Intent 常见的几个应用场景如下: 启动一个 Activity : Context.startActivity(Intent intent) 启动一个 Service : Context.startService(Intent intent) 绑定一个 Service : Context.bindService(Intent service, ServiceConnection conn, int flag) 发送一个 Broadcast : Context.sendBroadcast(Intent intent) Android 的 4大组件中, activity、service 和 broadcast receiver 之间是通过Intent进行通信的,而另外一个组件Content Provider, 本身就是一种通信机制,不需要通过Intent ###2. Intent 的相关属性 Intent 对象包含如下的属性:...

android 应用签名

###1. APK APK是AndroidPackage的缩写,即Android安装包(apk),APK文件其实就是zip格式的文件,只是后缀被改为了apk,所以用任何能解压zip的软件都可以直接把一个APK文件解压出来 ###2. 对称加密和非对称加密 对称加密(Symmetric Cryptography) : 加密(encryption)与解密(decryption)用的是同样的密钥(secret key) 因为 加/解密 使用的是相同的密钥, 对称加密是最快速、最简单的一种加密方式 对称加密有很多种算法,例如 DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES, 由于它效率很高,所以被广泛使用在很多加密协议的核心当中 对称加密通常使用的是相对较小的密钥,一般小于256 bit 因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off 对称加密的一大缺点是密钥的管理与分配,即如何把密钥安全地发送到需要解密你的消息的人的手里是一个问题 在发送密钥的过程中,密钥有很大的风险会被黑客们拦截, 现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人 非对称加密(Asymmetric Cryptography) : 它使用了一对密钥,公钥(public key)和私钥(private key), 使用这对密钥中的一个进行加密,而解密则需要另一个密钥 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人 因为不需要传递公钥, 因此相较于对称加密, 安全性大大提高 常用的非对称加密算法是 RSA ECC(椭圆曲线加密算法)、Diffie-Hellman、El Gamal(背包算法)、DSA(数字签名常用)...