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

崔作非 for 京东 · 2017年03月17日 · 最后由 songz 回复于 2017年03月17日 · 1551 次阅读

很多同学在使用 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 啊- -

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册