我正在开发一种QA自动化解决方案,可以在Android上记录/回放QA测试.关键业务要求是在回放录制的测试时不依赖于连接的PC.为此,我试图在没有连接PC的情况下运行仪器测试.(具体来说,是Appium UiAutomator2测试).
我目前的方法是尝试从我的应用程序以编程方式运行测试.如果我通常从连接的PC运行测试,我会使用该命令adb shell am instrument -w.我尝试从我的应用程序访问ADB Shell并运行am instrument -w,但这会产生错误,我错过了INTERACT_ACROSS_USERS_FULL权限.
为了解决这个问题,我尝试使用startInstrumentation运行测试.这成功地开始了测试.但是,测试立即崩溃.经过进一步调查,我将崩溃追踪到NPE:测试试图检索InstrumentationRegistry.getInstrumentation.getUiAutomation(0),但是返回null.
如何以编程方式运行测试并授予其访问所需的UiAutomation实例的权限?
这就是我开始测试的方式:
public void runTest() {
final String pm = getPackageName().replaceFirst(".test$", "");
final InstrumentationInfo info = getInstrumentationInfo(pm);
if (info != null) {
final ComponentName cn = new ComponentName(info.packageName,
info.name);
Bundle arguments = new Bundle();
arguments.putString("class", "io.testim.appiumwrapper.test.AppiumUiAutomator2Server");
//cn = {io.extension.test/android.support.test.runner.AndroidJUnitRunner}
startInstrumentation(cn, null, arguments);
}
}
Run Code Online (Sandbox Code Playgroud) android android-testing appium android-instrumentation appium-android
我是Android新手,对AndroidManifest.xml中的权限保护级别"签名"有疑问.
Android参考文档说明了"签名"保护级别:
仅当请求的应用程序使用与声明权限的应用程序相同的证书进行签名时系统授予的权限.如果证书匹配,系统将自动授予权限,而不通知用户或要求用户明确批准.
这意味着普通应用程序无法使用具有"签名"保护级别的权限,并且只能使用Android Dev Team.
我想知道的是Android Market或其他网站上有多少应用程序可以拥有这些权限?就像用于记录调用的应用程序一样,除了其他权限之外还有android.permission.DEVICE_POWER.Android系统在安装时是否真的授予此应用程序此权限?
当我尝试使用权限"READ_INPUT_STATE"(2.2中的新功能)时,我在LogCat中收到以下错误:
06-28 09:28:34.943:WARN/PackageManager(60):未授予android.permission.READ_INPUT_STATE权限以包com.example.wheredoyoulive(protectionLevel = 2 flags = 0x8444)
具有保护级别"SignatureOrSystem"的权限也是如此.除了其他权限之外,还存在一个具有CALL_PRIVILEGED权限的调用者应用程序.
请帮助我,澄清我的疑虑.
问候
阿布舍克
根据Android开发者文档,如果调用应用程序使用与签名相同的密钥进行签名,则可以获得signature应用程序中具有保护级别的权限。另外根据这个答案,具有保护级别的android权限不能被第三方应用程序获取,但在android开发人员文档中,有一个名为保护级别的权限。我见过很多代码在其代码中声明了此权限:ABAsignatureREQUEST_INSTALL_PACKAGESsignature
<uses-permission android:name="REQUEST_INSTALL_PACKAGES" />
Run Code Online (Sandbox Code Playgroud)
那怎么可能呢?少了什么东西?