前言

作为一个前端,一直在写着网页端的项目,也写过一些移动端的项目,但也仅限于H5页面,内嵌于原生应用之中,还有就是类似小程序或者快应用这些经过二次封装的伪App,所以想尝试自己做一个纯正的手机端App,选型上有IonicReactNative两种,但是个人不用AngularJS,也不喜欢它,ReactNative上手也较难,所以准备使用Cordova进行打包,网页端可以随心所欲的使用自己喜欢的技术,可谓是很爽了。

环境安装

  • Cordova CLI安装

cnpm install -g cordova
  • JDK安装

可以参照我之前写的这篇文章JDK安装

  • Android Studio安装

下载地址为Android Studio

  • SDK安装

在安装完Android SDK后,你需要安装任何你希望的目标API级别的SDK包。并确保下面已经安装:

  • 目标Android版本的Android Platform SDK
  • Android SDK build-tools,版本19.1.0或者之上
  • Android Support Repository (在"Extras"查找)

    设置ANDROID_HOME环境变量,指定为Android SDK安装路径,在PATH中加入
%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

在命令行中输入adb,如果出现下面的提示则代表成功:

  • Gradle安装

首先下载安装包Gradle 安装包,解压后放在指定目录。
在环境变量的PATH中加入

E:\software\gradle-4.6\bin;

在命令行中输入

gradle -v

出现版本号则代表安装成功

踩坑

  • 无法create新项目,报错如下:
0 info it worked if it ends with ok
1 verbose cli [ 'E:\\software\\nodejs\\node.exe',
1 verbose cli   'E:\\software\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'install',
1 verbose cli   'C:\\Users\\hwx547308\\AppData\\Roaming\\npm\\node_modules\\cordova\\node_modules\\_cordova-app-hello-world@3.12.0@cordova-app-hello-world\\index.js',
1 verbose cli   '--production',
1 verbose cli   '--no-save' ]
2 info using npm@5.6.0
3 info using node@v8.9.4
4 verbose npm-session 4d8e1acac48c2f3b
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 silly fetchPackageMetaData error for file:C:/Users/hwx547308/AppData/Roaming/npm/node_modules/cordova/node_modules/_cordova-app-hello-world@3.12.0@cordova-app-hello-world/index.js Could not install from "..\AppData\Roaming\npm\node_modules\cordova\node_modules\_cordova-app-hello-world@3.12.0@cordova-app-hello-world\index.js" as it does not contain a package.json file.
8 verbose stack Error: ENOENT: no such file or directory, open 'C:\Users\hwx547308\AppData\Roaming\npm\node_modules\cordova\node_modules\_cordova-app-hello-world@3.12.0@cordova-app-hello-world\index.js\package.json'
9 verbose cwd C:\Users\hwx547308\.cordova
10 verbose Windows_NT 6.1.7601
11 verbose argv "E:\\software\\nodejs\\node.exe" "E:\\software\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "C:\\Users\\hwx547308\\AppData\\Roaming\\npm\\node_modules\\cordova\\node_modules\\_cordova-app-hello-world@3.12.0@cordova-app-hello-world\\index.js" "--production" "--no-save"
12 verbose node v8.9.4
13 verbose npm  v5.6.0
14 error code ENOLOCAL
15 error Could not install from "..\AppData\Roaming\npm\node_modules\cordova\node_modules\_cordova-app-hello-world@3.12.0@cordova-app-hello-world\index.js" as it does not contain a package.json file.
16 verbose exit [ 1, true ]

在网上找了找,发现降级到6.0.0即可,于是

cnpm install -g cordova@6.0.0

这次成功创建了项目,但是运行cordova requirements却又报错了,说是Android target not installed, Android sdk not installed, Gradle not installed

在网上又找到了如下办法:

cordova platform add android@latest --save

这次安装的时候会报错,cordovaProject.projectConfig.getFileResources is not a function

但是运行cordova requirements却是对的,显示如下:

从这里我推断出,不同的cordova版本识别安装的sdk的版本是不一样的,都有自己对应的版本

终极解决方案:

不用cnpm安装,是用npm安装解决了可以创建新项目

npm install -g cordova

参考资料