巨坑警告⛏
问题
Cordova build 时候报错 Cannot read property ‘length’ of undefined
我的配置
解决方法
方法一:
大多数人出现这个原因是因为没有配置gradle环境,android studio 3.5开始不自带gradle导致
恰巧我也是android studio 3.5,恰巧我也没有配置gradle环境,于是第一步
配置gradle环境
下载合适的gradle版本 gradle官网
可以选择下载最新版,由于我在虚拟机上测试过build时候用的是4.10.3版本,所以下的是这个版本。
解压到
D:\Program Files\Android\Android Studio\gradle\gradle-4.10.3-all\gradle-4.10.3
在 环境变量中新建 GRADLE_HOME 系统变量
添加到 path 中 %GRADLE_HOME%\bin
如果还是检测不到可以尝试先
cordova platform rm android
再
cordova platform add android
再使用
cordova requirements
对环境进行测试,一般这时候就可以检测到gradle
但如果你不幸像我这样……那么请看方法二和方法三。
方法二:
如果上一步添加环境变量后,重启还是无法解决这个问题,那么可以看这一步
如果有虚拟机环境,可以配置一个虚拟机,配置虚拟机环境,在虚拟机上尝试安装ionic,cordova,java环境。
一般虚拟机上重新配置的是不会出问题的,但是这个方法有个弊端,就是虚拟机环境无法安装android 模拟机,因为它也是使用虚拟机技术的,而且native-run也无法运行在虚拟机操作系统上。
如果选择配置在虚拟机上的话,有一个优点就是环境如果出问题,随时可以重装。
至于虚拟机上无法提供 安卓模拟机的问题,这里也提供一种解决方案,可以在虚拟机上先执行cordova build android命令,在platform/android/app/build/output中可以找到生成的apk。
将项目通过共享文件夹或者其他方法,转移到本机上,使用本机android studio,进行安卓方面的调试,
可将输出的 app-debug.apk 放在 D:\asua\Andriod\sdk\platform-tools(你的sdk路径)文件夹下,
在 android studio 终端该路径下(或者cmd该路径下)
使用 adb install xxx(apk包名,如我的就是app-debug.apk),如果有多个模拟机,就可以使用adb -e install xxx(apk包名,如我的就是app-debug.apk) 安装在 正在运行的模拟器 上。
这种方法的弊端就是效率较低,虚拟机运行速度缓慢,往往调试生成几个版本需要的时间较多,这也是我放弃该种方法的原因。当然,无奈之下这也不失为一种好的选择。
方法三:
为了找到这个解决方法真是找了我三天……太痛苦了……
无意之中看到stack overflow上有个评论说,之前的6.4版本在check_reqs.js文件中出现过相似问题。
这个文件位于platform \ android \ cordova \ lib文件夹下
关注这段代码的get_gradle_wrapper函数
module.exports.get_gradle_wrapper = function () {
var androidStudioPath;
var i = 0;
var foundStudio = false;
var program_dir;
// OK, This hack only works on Windows, not on Mac OS or Linux. We will be deleting this eventually!
if (module.exports.isWindows()) {
var result = child_process.spawnSync(path.join(__dirname, 'getASPath.bat'));
// console.log('result.stdout =' + result.stdout.toString());
// console.log('result.stderr =' + result.stderr.toString());
if (result.stderr.toString().length > 0) {
var androidPath = path.join(process.env['ProgramFiles']