京东质量社区 appium 执行测试时取消自动打 debug 签名的功能

崔作非 for 京东 · March 17, 2017 · Last by songz replied at March 17, 2017 · 2355 hits

很多同学在使用appium做自动化测试时会遇到appium自动对apk包打debug签名的现象
通常会带来两个问题:
一个是执行时间变长。
二是如果应用中的防篡改校验,新打的debug签名会认为应用被篡改,而报错退出。

通常我们所用的apk都是有签名的,而appium自身不需要debug签名的限制,
因此关闭appium的自动打debug签名的功能就比较实现。

以下是以appium 1.0.0.3的版本说明,其它版本会有所变化,仅供参考。
appium_home\Appium\node_modules\appium\lib\devices\android\adb.js
修改源文件中的490行和494行

// returns true when already signed, false otherwise.
ADB.prototype.checkApkCert = function (apk, pkg, cb) {
if (!fs.existsSync(apk)) {
logger.debug("APK doesn't exist. " + apk);
return cb(null, false);
}

if (this.useKeystore) {
return this.checkCustomApkCert(apk, pkg, cb);
}

var verifyPath = path.resolve(helperJarPath, 'verify.jar');
var resign = 'java -jar "' + verifyPath + '" "' + apk + '"';
logger.debug("Checking app cert for " + apk + ": " + resign);
exec(resign, { maxBuffer: 524288 }, function (err) {
if (err) {
logger.debug("App not signed with debug cert.");
//return cb(null, false);//当apk不是debug签名时,不打debug签名跳出,继续执行。
}
logger.debug("App already signed.");
this.zipAlignApk(apk, function (err) {
//if (err) return cb(err);//当apk不是debug签名时,不打debug签名跳出,继续执行。
cb(null, true);
});

}.bind(this));
};
共收到 3 条回复 时间 点赞

不错, appium应该提供开关的,修改代码不是长久之道。增加配置功能后可以尝试提交个pr给他们

加个 desiredcapabilities 呗

...自己指定keystore啊- -

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up