虽然Cordova是一个跨平台的移动开发框架,但是要打包成不同平台下的App,需要有相应的SDK和环境配置才行。这里以windows系统环境打包到Android平台为例对所需SDK环境和命令行工具进行详细说明(cordova版本是6.x)。
一、所需配置和支持
Cordova需要安装Android SDK,Cordova最新版本已经可以支持Android API-Level 23。Cordova和Android SDK API的支持关系如表1所示:
cordova-android Version | Supported Android API-Levels |
---|---|
5.X.X | 14 - 23 |
4.1.X | 14 - 22 |
4.0.X | 10 - 22 |
3.7.X | 10 - 21 |
想要查看项目使用的Android SDK的版本,在项目的根目录下运行下面的命令:cordova platform ls。
二、安装所需配
安装JDK
安装JDK 1.7或者更高版本。安装完成后新建JAVA_HOME系统环境变量,填入JDK的安装路径,我的是C:\Program Files (x86)\Java\jdk1.8.0_51。 JDK下载地址。安装Android SDK
安装Android SDK,下载地址: Android SDK。也可以安装Android Studio,它自动集成了Android SDK里面,如果想开发Android平台下的Cordova插件,或者使用AS的调试工具的话,安装AS是个不错的选择。添加SDK开发包
安装完SDK后,必须添加你想要的API Level的包,这里推荐的是你的项目中cordova版本能够支持的最高版本。打开SDK安装Android sdk tools,Anroid platform tools、Android build tool,以及版本包,然后在Extras里面把support library也安装上。设置环境变量
Cordova CLI工具需要设置环境变量才能正常工作:- 设置 JAVA_HOME 环境变量。(安装JDK时已经设置好了)
- 设置 ANDROID_HOME 环境变量,目录是SDK的安装目录,我的是:C:\Program Files (x86)\Android\android-sdk。
- 将 SDK的 tools 和 platform-tools 目录加入到path环境变量中。
三、配置工程
设置模拟器
如果想要在Android模拟器上运行APP,需要创建一个AVD(Android Vitual Device)。创建AVD是Android开发经常涉及的,如果你安装了Eclipse或者AS,可以参考这个:Eclipse创建AVD,Android Studio创建AVD。如果只安装了Android SDK,那么在安装目录下有AVD Manager.exe,打开后也可以创建AVD。当AVD配置好了后,就可以在项目根目录下使用下面的命令查看创建的AVD设备:
$ cordova run --list
配置Gradle
cordova4.0.0以后,Android工程通过Gradle生成。(以前的版本是使用的Ant生成工具)
设置Gradle属性
可以通过设置Cordova提供的特定值来配置Gradle生成工具。可以设置的属性如下表所示:
Property | Description |
---|---|
cdvBuildMultipleApks | 如果设置,会生成多个APK文件:每个硬件平台一个APK文件(x86,ARM等等)。如果项目中使用了会显著增加APK文件的大小的很大的本地库,就应该设置这个属性。如果未设置,那么只会生成一个APK文件。 |
cdvVersionCode | 会覆盖 AndroidManifest.xml 中的versionCdoe。 |
cdvReleaseSigningPropertiesFile | 默认值: release-signing.properties 生成发布版本时,指向包含签名信息的属性文件的路径。 |
cdvDebugSigningPropertiesFile | 默认值: debug-signing.properties 生成调试版本时,指向签名信息的属性文件路径,当需要分享密钥的使用。 |
cdvMinSdkVersion | 会覆盖 AndroidManifest.xml 中的 minSdkVersion 值。当创建多个基于SDK版本的APK文件时会很有用。 |
cdvBuildToolsVersion | 覆盖自动检测到的 android.buildToolsVersion 值。 |
cdvCompileSdkVersion | 覆盖自动检测到的 android.compileSdkVersion 值。 |
可以通过下面几种方式来配置这些属性(以MinSkdVersion为例):
-
在build或者run命令中使用--gradleArg参数设置
$ cordova run android --gradleArg=-PcdvMinSdkVersion=20
-
在项目platform/Android目录下新建一个叫
gradle.properties
,并设置如下属性:# In <your-project>/platforms/android/gradle.properties cdvMinSdkVersion=20
-
通过
build-extras.gradle
文件来扩展build.gradle
,设置如下属性:// In <your-project>/platforms/android/build-extras.gradle ext.cdvMinSdkVersion = 20
最后的两种方式都需要添加额外的文件,而这些修改经常会丢失和重写。因此,这两个文件应该作为使用before_build参数的build命令生成的从别的地方直接拷贝过来(使用hook方式)。
扩展build.gradle文件
如果想要自定义 build.gradle
, 而不是直接编辑它, 那么需要创建一个叫 build-extras.gradle
的文件。这个文件会在呈现时被 build.gradle
包含进来。这个文件必须包含在platforms/Android目录下,所以推荐使用before_build参数的hook的方式,通过脚本将其拷贝过去。
build-extras.gradle示例:
// Example build-extras.gradle
// This file is included at the beginning of `build.gradle`
ext.cdvDebugSigningPropertiesFile = '../../android-debug-keys.properties'
// When set, this function allows code to run at the end of `build.gradle`
ext.postBuildExtras = {
android.buildTypes.debug.applicationIdSuffix = '.debug'
}
插件可以通过下面的方式包含 build-extras.gradle
文件:
<framework src="some.gradle" custom="true" type="gradleReference" />
设置Version Code
要更改App的版本号,需要在config.xml文件的widget标签中设置 android-versionCode
属性。如果android-versionCode
没有设置,那么会通过version属性设置版本号,格式为: MAJOR.MINOR.PATCH
:
versionCode = MAJOR * 10000 + MINOR * 100 + PATCH
四、给APP签名
Parameter | Flag | Description |
---|---|---|
Keystore | --keystore | 存放keystore的路径 |
Keystore 密码 | --storePassword | keystore的密码 |
别名 | --alias | 私钥id |
Password | --password | 私钥密码 |
Keystore类型 | --keystoreType | 通过文件后缀确定,为p12或者jks |
cordova build android --release -- --keystore=../my-release-key.keystore --storePassword=password --alias=alias_name --password=password
.
关于如何生成keystore可以参考:利用JDK的KeyTool工具生成keystore。
2、通过build.json
也可以通过在build.json配置以上内容,然后使用--buildConfig参数指定配置文件。
{
"android": {
"debug": {
"keystore": "../android.keystore",
"storePassword": "android",
"alias": "mykey1",
"password" : "password",
"keystoreType": ""
},
"release": {
"keystore": "../android.keystore",
"storePassword": "",
"alias": "mykey2",
"password" : "password",
"keystoreType": ""
}
}
}
发布版本的签名,密码可以排除,生成工具会弹出提示要求输入密码。
3、通过Gradle
也可以包含一个.properties文件,然后设置cdvReleaseSigningPropertiesFile
和 cdvDebugSigningPropertiesFile
属性指向该文件,例如:
storeFile=relative/path/to/keystore.p12
storePassword=SECRET1
storeType=pkcs12
keyAlias=DebugSigningKey
keyPassword=SECRET2
storePassword
和 keyPassword
是可选的,如果没有填,生成工具会弹出提示要求输入密码。