百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Cordova打包Android应用流程(MAC)

toqiye 2024-08-09 17:42 44 浏览 0 评论


扩展阅读

基于Cordova批量打场景包(MAC)

APP包名称命名规则

1. 安装cordova打包应用

 `brew install cordova`

2. 创建cordova项目

执行命令 `create app com.githen.app 测试app`
 * `app` 项目的目录名称 ( 下面所有目录均以此目录为根目录说明 )
 * `com.githen.app` 项目包名称
 * `测试app` 项目展现名称

3. 创建代码快捷软链

`MAC/Linux` 执行命令 `ln -s 程序/build app/www`
`Window` 执行命令 `mklink /D 程序/build app/www`
* `程序/build` yarn 执行构建后的目录
* `app/www` cordova目录下的www目录

4. 项目配置调整

  • 修改默认启动图及图标配置

在config.xml中 <platform name="android"> 中添加以下信息

<preference name="orientation" value="portrait" />
<icon density="ldpi" src="res/icon/android/icon-36-ldpi.png" />
<icon density="mdpi" src="res/icon/android/icon-48-mdpi.png" />
<icon density="hdpi" src="res/icon/android/icon-72-hdpi.png" />
<icon density="xhdpi" src="res/icon/android/icon-96-xhdpi.png" />
<icon density="xxhdpi" src="res/icon/android/icon-144-xxhdpi.png" />
<icon density="xxxhdpi" src="res/icon/android/icon-192-xxxhdpi.png" />
<splash density="land-hdpi" src="res/screen/android/screen-hdpi-landscape.png" />
<splash density="land-ldpi" src="res/screen/android/screen-ldpi-landscape.png" />
<splash density="land-mdpi" src="res/screen/android/screen-mdpi-landscape.png" />
<splash density="land-xhdpi" src="res/screen/android/screen-xhdpi-landscape.png" />
<splash density="land-xxhdpi" src="res/screen/android/screen-xxhdpi-landscape.png" />
<splash density="land-xxxhdpi" src="res/screen/android/screen-xxxhdpi-landscape.png" />
<splash density="port-hdpi" src="res/screen/android/screen-hdpi-portrait.png" />
<splash density="port-ldpi" src="res/screen/android/screen-ldpi-portrait.png" />
<splash density="port-mdpi" src="res/screen/android/screen-mdpi-portrait.png" />
<splash density="port-xhdpi" src="res/screen/android/screen-xhdpi-portrait.png" />
<splash density="port-xxhdpi" src="res/screen/android/screen-xxhdpi-portrait.png" />
<splash density="port-xxxhdpi" src="res/screen/android/screen-xxxhdpi-portrait.png" /> 
  • 修改最低兼容版本
// 在build.gradel中的defaultMinSdkVersion=21支持系统为5.0+
  • 在AndroidManifest.xml 修改版本号 和 版本Code
  • 在AndroidManifest.xml 删除 <uses-sdk android:targetSdkVersion="27" />


5. 插件处理

  • 请求白名单
  • cordova plugin add cordova-plugin-whitelist

  • 页面loading
  • cordova plugin add cordova-plugin-splashscreen

  • 退出提醒插件
  • cordova plugin add cordova-plugin-x-toast

  • 相机插件
  • cordova plugin add cordova-plugin-camera

  • 获取版本号
  • cordova plugin add cordova-plugin-app-version

  • 设备信息
  • cordova plugin add cordova-plugin-device

  • 兼容低版本
  • `cordova plugin add cordova-x5webview-plugin`

  • 判断网络连接
  • cordova plugin add cordova-plugin-network-information

  • QQ分享
  • cordova plugin add cordova-plugin-qqsdk --variable QQ_APP_ID=申请的ID

  • 微博分享
  • cordova plugin add cordova-plugin-weibosdk --variable WEIBO_APP_ID=申请的ID

  • 浏览器打开
  • cordova plugin add cordova-plugin-customurlscheme --variable URL_SCHEME=app

  • 微信分享
  • cordova plugin add cordova-plugin-wechat@2.5.0 --variable wechatappid=申请的ID

    此版本插件为2.5.0,需要执行下面命令调整解决分享后的闪退问题
    修改`$your_project/plugins/cordova-plugin-wechat/scripts/android-install.js`中的
    var targetDir = path.join(projectRoot, "platforms", "android", "src", packageName.replace(/\./g, path.sep), "wxapi"); 
    为
    var targetDir = path.join(projectRoot, "platforms", "android", "app","src","main","java", packageName.replace(/\./g, path.sep), "wxapi"); 
    
  • 百度定位
  • cordova plugin add cordova-plugin-baidumaplocation ---variable ANDROID_KEY="申请的key" --variable IOS_KEY="申请的key"

    参考地址:兼容cordova8(https://www.jianshu.com/p/9328f374c504)
    参考地址:百度定位官网(http://lbsyun.baidu.com/)

    1.在根目录下的config.xml文件中标签后添加hook

    <platform name="android">
     <hook src="scripts/patch-android-studio-check.js" type="before_plugin_add" /> 
     <hook src="scripts/patch-android-studio-check.js" type="before_plugin_install" /> 
     <hook src="scripts/patch-android-studio-check.js" type="before_plugin_rm" /> 
     <hook src="scripts/patch-android-studio-check.js" type="before_plugin_uninstall" /> 
     <hook src="scripts/patch-android-studio-check.js" type="before_prepare" /> 
    </platform>

    2.新建文件scripts/patch-android-studio-check.js,并写入如下内容

    /**
    * This hook overrides a function check at runtime. Currently, cordova-android 7+ incorrectly detects thatwe are using
    * an eclipse style project. This causes a lot of plugins to fail at install time due to paths actually being setup
    * for an Android Studio project. Some plugins choose to install things into 'platforms/android/libs' which makes
    * this original function assume it is an ecplise project.
    */
    module.exports = function(context) {
     if (context.opts.cordova.platforms.indexOf('android') < 0) {
     return;
     }
     const path = context.requireCordovaModule('path');
     const androidStudioPath = path.join(context.opts.projectRoot, 'platforms/android/cordova/lib/AndroidStudio');
     const androidStudio = context.requireCordovaModule(androidStudioPath);
     androidStudio.isAndroidStudioProject = function() { return true; };
    };

    3.修改plugins\cordova-plugin-baidumaplocation\plugin.xml如下

    注释下面代码:
    <!-- 
     <source-file src="src/android/BaiduMapLocation.java" target-dir="app/src/com/aruistar/cordova/baidumap"/>
     <source-file src="libs/android/armeabi/libindoor.so" target-dir="app/libs/armeabi"/>
     <source-file src="libs/android/armeabi/liblocSDK7b.so" target-dir="app/libs/armeabi"/>
     <source-file src="libs/android/armeabi-v7a/libindoor.so" target-dir="app/libs/armeabi-v7a"/>
     <source-file src="libs/android/armeabi-v7a/liblocSDK7b.so" target-dir="app/libs/armeabi-v7a"/>
     <source-file src="libs/android/arm64-v8a/libindoor.so" target-dir="app/libs/arm64-v8a"/>
     <source-file src="libs/android/arm64-v8a/liblocSDK7b.so" target-dir="app/libs/arm64-v8a"/>
     <source-file src="libs/android/x86/libindoor.so" target-dir="app/libs/x86"/>
     <source-file src="libs/android/x86/liblocSDK7b.so" target-dir="app/libs/x86"/>
     <source-file src="libs/android/x86_64/libindoor.so" target-dir="app/libs/x86_64"/>
     <source-file src="libs/android/x86_64/liblocSDK7b.so" target-dir="app/libs/x86_64"/>
     <source-file src="libs/android/BaiduLBS_Android.jar" target-dir="app/libs"/>
    -->
    替换为
     <source-file src="src/android/BaiduMapLocation.java" target-dir="src/com/aruistar/cordova/baidumap"/>
     <lib-file src="libs/android/armeabi" arch="device"/>
     <lib-file src="libs/android/armeabi-v7a" arch="device"/>
     <lib-file src="libs/android/arm64-v8a" arch="device"/>
     <lib-file src="libs/android/x86" arch="device"/>
     <lib-file src="libs/android/x86_64" arch="device"/>
     <lib-file src="libs/android/BaiduLBS_Android.jar" arch="device"/>
    
  • 百度统计
  • cordova plugin add cordova-plugin-baidumobstat

    1.在插件src/android/BaiduMobStat.java中添加start代码

    if ("start".equals(action)) {
     String pageName = "";
     try {
     pageName = args.getString(0);
     } catch (Exception e) {
     // TODO: handle exception
     }
    
     if (TextUtils.isEmpty(pageName)) {
     callbackContext.error("pageName invalid, error");
     return;
     }
    
     StatService.start(webView.getContext(), pageName); //System.out.println("baidu:" + StatService.getTestDeviceId(cordova.getActivity()));
    } else

    2.注册新方法 www/baidumobstat.js

    start : function (pageName) {
     exec(null, errorHandle, "BaiduMobStat", "start", [pageName]);
    },

    3.首页添加自动统计代码

    cordova.plugins.BaiduMobStatistics.start('stat');

    4.在AndroidManifest.xml中添加百度统计key代码

    <meta-data android:name="BaiduMobAd_STAT_ID" android:value="统计的ID" />
    <meta-data android:name="BaiduMobAd_CHANNEL" android:value="场景名称" />
    
  • 极光推送
  • cordova plugin add jpush-phonegap-plugin --variable APP_KEY=申请的ID


    参考地址:极光推送官网(https://www.jpush.cn/)

    拷贝plugins/cordova-plugin-jcore/src/android下所有带so文件到android/app/libs对应目录下


    6.APK签名

    • MAC命令
    jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkin] [alias]
    
    -verbose -> 输出签名过程的详细信息
    -keystore [keystorePath] -> 密钥的库的位置
    -signedjar [apkOut] -> 签名后的输出文件名
    [apkin] -> 待签名的文件名
    [alias] -> 证书别名
    
    
    实例:
    jarsigner -tsa http://timestamp.digicert.com -sigalg SHA1withRSA -digestalg SHA1 -verbose -keystore debug.keystore -signedjar app_2.0.4.190116_release_sjqq_signed.apk app_2.0.4.190116_release_sjqq_unsign.apk androiddebugkey
    • Window

    可直接下载360加固(http://jiagu.360.cn/#/global/index)

    相关推荐

    Star 17.3k!给它一张屏幕截图,即可一键克隆网页!

    本文为大家分享一款本周爆火的GPT开源项目。前言你敢信,只凭借着一张屏幕截图即可转换生成HTML/TailwindCSS代码。可以算得上是前端工程师的福音。它就是screenshot-to-...

    AI从截图直接生成代码、前端程序员的福利!

    简介项目可以将任何屏幕截图或设计转换为干净的代码(支持大多数框架)。来自领先公司的开发人员和设计师使用的排名第一的工具。完全开源,在GitHub上拥有超过35,000颗星。非常受欢迎。各位小伙...

    一款高颜值、跨平台、自托管的免费开源CRM项目——Twenty

    前言大家好,这里是可爱的Cherry。作为一个“甲方”,Cherry其实挺知道客户管理的重要的。但是对于客户管理怎么做,以及CRM的作用,我却是一无所知。之前有朋友在评论区留言,说有没有开源的CRM系...

    解放双手,前端界面再也不用自己写了?

    随着AI技术的发展,现在有越来越多的尝试将AI应用于UI设计和开发中,以期提高效率和降低成本。今天就给大家介绍一个开源的AI网页生成工具:OpenUIOpenUIOpenUI是一个创...

    代码调试,教给你(代码调试是什么意思)

    昨天我和一些朋友一起调试代码,他们做程序员这一行都不太久,我向他们展示了一些代码调试技巧。今天早上我在想,我应该如何教授他们学习代码调试?我在Twitter上发了一条推文说,我从来没有见过任何好的调试...

    Screenshot-to-code:用屏幕截图生成代码

    Screenshot-to-code是一个简单的工具,可使用AI将屏幕截图、模型和Figma设计转换为干净、实用的代码。现在支持ClaudeSonnet3.5和GPT-4o!Scre...

    next实现原理(next method)

    Next.js是一个基于React的服务器端渲染(SSR)和静态生成(SSG)框架,它的实现原理涉及多个关键技术点,包括服务端渲染(SSR)、静态生成(SSG)、客户端渲染(CSR)、...

    可逐步操作的具体流程(可逐步操作的具体流程包括)

    假设你是一个单人开发者,使用主流技术栈(React+Node.js+MySQL),以下是详细步骤:---###**一、需求分析与原型设计**1.**核心功能清单**-用户能添加、删除、...

    截图转代码只需1步!你离高效开发只差这款神器

    引言在现代前端开发中,将设计稿转换为代码是一个既重要又耗时的环节。手动编写HTML结构、调试CSS样式、调整布局对齐,不仅耗费时间,还容易出错。而Screenshot-to-Code这款革...

    web开发 前端 后端(web开发前端后端)

    区别:1、前端是指用户可见的界面,而后端是指用户看不到的东西,考虑底层业务逻辑的实现,平台的稳定性、性能等。2、前端开发用到的技术有HTML5、CSS3、JS、jQuery、Bootstrap、Nod...

    手把手教你Dify私有化部署,打造专属AI平台

    一、Dify是什么?Dify是一款极具创新性的开源LLM应用开发平台,它就像是一把万能钥匙,为开发者们打开了通往生成式AI应用开发新世界的大门。其融合了后端即服务(BackendasS...

    前后端分离架构设计:提升开发效率与业务支撑力的密钥

    前后端分离架构设计解析一、定义与核心思想前后端分离是一种将用户界面(前端)与业务逻辑(后端)解耦的架构模式,通过RESTfulAPI或GraphQL实现数据交互。前端专注于视图渲染与交互逻辑...

    Kubernetes最小部署单元Pod(kubernetes最小部署单元)

    一、Kubernetes与Pod简介在当今云计算和容器化技术盛行的时代,Kubernetes已然成为容器编排领域的中流砥柱。它是一个开源的容器编排平台,由Google基于其内部使用的Bo...

    【程序员必藏!零基础本地部署DeepSeek大模型保姆级教程】

    为什么选择本地部署?数据安全:敏感代码/业务数据永不外传闪电响应:局域网推理延迟<100ms,告别云端排队深度定制:自由修改模型代码,打造专属AI助手准备工具(5分钟搞定)1核心工具下载...

    【Python程序开发系列】使用Flask实现前后端分离(案例)

    这是我的第398篇原创文章。一、引言随着web开发的不断发展,前后端分离已成为越来越流行的架构设计。Flask是一个轻量级的Pythonweb框架,非常适合用于构建API,然后配合前端框...

    取消回复欢迎 发表评论: