1.前端项目打包:yarn build 或者 npm run build
2.安装Cordova安卓项目生成工具
npm install -g cordova
//检查是否安装成功
cordova -v
3.创建安卓项目:cordova create myApp com.example.myApp MyApp
4.将前端打包好的build放进刚刚用cordova创建好的项目中的www文件中,将www里面的文件删除,将build包中的文件复制到www文件中
5.添加安卓平台
cordova platform add android
6.安装javaJDK和Android Studio编辑器 ,去官网下载即可
7.用Android Studio编辑器打开cordova项目中platforms文件中的android文件(android是生成的安卓项目)
1.打开android文件开始自动构建
2.构建失败报错,如果是skd版本太高或者太小就下载对于的sdk版本.(打开设置,找到Android SDK,选择SDK Platforms下载对于的版本,其他报错将SDK Tools中的所有全部下载)
3、编译通过先本地运行一下,找到app文件中的src->main->java->MainActivity这个文件运行一下
看是否能正常运行
8.在导航栏中到构建选择Generate Signed Bundle or APK
1.选择apk,点击下一步
2.创建密钥,内容随便输入,完成后点击下一步
3.选择release点击创建
4.构建完成后再app->release文件中的apk文件
9.cordova高版本如法使用http请求的问题
产生的原因:安卓9.0以上版本对http请求有限制,cordova默认虚拟成https容器,不能访问http,cordova默认localhost访问静态资源文件,会造成跨域问题
解决方案:
方法1.放开安卓9.0以上版本对http的限制
src/main/AndroidManifest.xml中manifest/application节点加上android:usesCleartextTraffic="true"
方法2.通过配置使用file///形式访问静态资源
src/main/res/xml/config.xml中widget节点下添加
<preference name="AndroidInsecureFileModeEnabled" value="true" />
方法3:找到org.apache.cordova.ConfigXmlParser源码,将https改成http(暴力解决,不推荐)
private static String SCHEME_HTTP = "http";
private static String SCHEME_HTTPS = "https"; // 文章作者是粗暴的将此处改成http
private static String DEFAULT_HOSTNAME = "localhost";
private String getLaunchUrlPrefix() {
if (prefs.getBoolean("AndroidInsecureFileModeEnabled", false)) {
return "file:///android_asset/www/";
} else {
// 从配置文件中获取scheme配置的值,
// 如果没有配置,则默认返回SCHEME_HTTPS,即https
String scheme = prefs.getString("scheme", SCHEME_HTTPS).toLowerCase();
String hostname = prefs.getString("hostname", DEFAULT_HOSTNAME);
if (!scheme.contentEquals(SCHEME_HTTP) && !scheme.contentEquals(SCHEME_HTTPS)) {
LOG.d(TAG, "The provided scheme \"" + scheme + "\" is not valid. " +
"Defaulting to \"" + SCHEME_HTTPS + "\". " +
"(Valid Options=" + SCHEME_HTTP + "," + SCHEME_HTTPS + ")");
scheme = SCHEME_HTTPS;
}
// 组合成url前面部分,默认返回https://localhost/
return scheme + "://" + hostname + '/';
}
}
方法4:修改src/main/res/xml/config.xml,在widget节点下添加(亲测有效,推荐使用)
<preference name="scheme" value="http" />
方法5:修改src/main/res/xml/config.xml,在widget节点下添加
<preference name="AndroidInsecureFileModeEnabled" value="true" />