跨平台应用开发进阶(九) :uni-app 实现Android原生APP-本地打包集成极光推送(JG-JPUSH)详细教程

本文主要是介绍跨平台应用开发进阶(九) :uni-app 实现Android原生APP-本地打包集成极光推送(JG-JPUSH)详细教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、前言
    • 二、集成
      • 2.1 uni-app 项目集成至 Android Studio
        • 2.1.1 拷贝HbuilderX uni-app 源码至 AS
        • 2.1.2 下载最新 SDK
        • 2.1.3 复制 HBuilder-Hello 项目 data 到自己项目对应目录中
        • 2.1.4 复制 HBuilder-Hello 项目 libs 下的三个文件到自己项目对应目录中
        • 2.1.5 修改 dcloud_control.xml 配置文件
        • 2.1.6 androidmanifest.xml 中添加 activity 节点
      • 2.2 离线包制作
    • 三、遇到的问题及解决方案
      • 3.1 libs中sdk版本与app sdk版本不一致
      • 3.2 Suggestion: add 'tools:replace="android:resource"' to <meta-data> element at AndroidManifest.xml to override
      • 3.3 Android Studio未配置appkey或配置错误
    • 四、拓展阅读

一、前言

因项目需求,需要uni-app 原生APP-本地打包集成极光推送,现将集成过程梳理得出此文。

二、集成

2.1 uni-app 项目集成至 Android Studio

2.1.1 拷贝HbuilderX uni-app 源码至 AS

hbuilderX中使用本地打包生成android资源如下:
在这里插入图片描述
应用Android studio新建一个空白android项目
在这里插入图片描述
选择 Empty Activity 点击 Next。
在这里插入图片描述
Minimum API Level 建议选21及以上。

Package name作为应用标志,涉及申请第三方平台账号,一般情况下不建议修改,包名一般设置反向域名,如:io.dcloud.HBuilder。

点击 Finish 完成创建。

注意⚠️:App离线SDK不支持Kotlin

构建如下文件结构,apps下面放hbuilderX本地打包生成的资源文件。
在这里插入图片描述

2.1.2 下载最新 SDK

在 Dcloud里下载最新的SDK。

下载解压后目录如下
在这里插入图片描述
其中,

  • HBuilder-Hello:是HelloH5打包App的示例,可以用AS打包成APK
  • HBuilder-Integrate-AS:是HBuilder 5+ SDK 集成AS的示例;
  • SDK:是HBuilder SDK库文件
  • UniPlugin-Hello-AS:是开发插件并集成到Vue的示例。
2.1.3 复制 HBuilder-Hello 项目 data 到自己项目对应目录中

在这里插入图片描述

2.1.4 复制 HBuilder-Hello 项目 libs 下的三个文件到自己项目对应目录中

在这里插入图片描述

2.1.5 修改 dcloud_control.xml 配置文件

注意⚠️:appidHbuilderX uni-app项目标识。

<hbuilder>
<apps><app appid="__UNI__1DA6F85" appver=""/>
</apps>
</hbuilder>
2.1.6 androidmanifest.xml 中添加 activity 节点

添加如下内容

<activityandroid:name="io.dcloud.PandoraEntry"android:configChanges="orientation|keyboardHidden|keyboard|navigation"android:label="@string/app_name"android:launchMode="singleTask"android:hardwareAccelerated="true"android:theme="@style/TranslucentTheme"android:screenOrientation="user"android:windowSoftInputMode="adjustResize" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>
</activity><activityandroid:name="io.dcloud.PandoraEntryActivity"android:launchMode="singleTask"android:configChanges="orientation|keyboardHidden|screenSize|mcc|mnc|fontScale|keyboard"android:hardwareAccelerated="true"android:permission="com.miui.securitycenter.permission.AppPermissionsEditor"android:screenOrientation="user"android:theme="@style/DCloudTheme"android:windowSoftInputMode="adjustResize"><intent-filter><categoryandroid:name="android.intent.category.DEFAULT" /><categoryandroid:name="android.intent.category.BROWSABLE" /><actionandroid:name="android.intent.action.VIEW" /><dataandroid:scheme="h56131bcf" /></intent-filter>
</activity>

经过以上配置,可实现hbuilderx本地离线打包android项目,生成APK安装包。

首先下载jpush-hbuilder-demo Demo 应用。

拷贝 ./android/app/src/main/java/io.dcloud.feature.jpush 文件夹至你 Android Studio 工程的 /src/main/java/ 目录下。

拷贝 ./jpush.js 到你 Android Studio 工程的 /assets/apps/HBuilder应用名/js/ 下。

/assets/apps/你的应用名/www/manifest.json 文件中添加:

"Push": {"description": "消息推送"
}

/assets/data/dcloud_properties.xml 中添加(如果已存在 Push feature,可以直接修改):

<featurename="Push"value="io.dcloud.feature.jpush.JPushService" >
</feature>

app/build.gradle 中添加:

android {...defaultConfig {applicationId "com.xxx.xxx" // JPush 上注册的包名....ndk {// 选择要添加的对应 cpu 类型的 .so 库。abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'}manifestPlaceholders = [JPUSH_PKGNAME : applicationId,JPUSH_APPKEY : "应用的 AppKey", // JPush上注册的包名对应的 appkeyJPUSH_CHANNEL : "developer-default", // 暂时填写默认值即可]...}...
}
dependencies {...compile 'cn.jiguang.sdk:jpush:3.3.4'  // 此处以JPush 3.3.4 版本为例。compile 'cn.jiguang.sdk:jcore:2.1.2'  // 此处以JCore 2.1.2 版本为例。...
}

AndroidManifest.xml 中添加:

 <!-- since 3.3.0 Required SDK 核心功能--><!-- 可配置android:process参数将PushService放在其他进程中 --><!--User defined.  For test only 继承自cn.jpush.android.service.JCommonService--><service android:name="io.dcloud.feature.jpush.PushService"android:process=":pushcore"><intent-filter><action android:name="cn.jiguang.user.service.action" /></intent-filter></service><!-- User defined.  For test only  用户自定义接收消息器,3.0.7开始支持,目前新tag/alias接口设置结果会在该广播接收器对应的方法中回调--><!--since 3.3.0 接收JPush相关事件--><receiver android:name="io.dcloud.feature.jpush.PushMessageReceiver"><intent-filter><action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /><category android:name="${applicationId}"></category></intent-filter></receiver>
<receiverandroid:name="io.dcloud.feature.jpush.JPushReceiver"android:enabled="true"android:exported="false"><intent-filter><action android:name="cn.jpush.android.intent.REGISTRATION" /> <!-- Required 用户注册SDK的 intent --><action android:name="cn.jpush.android.intent.UNREGISTRATION" /><action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!-- Required 用户接收SDK消息的 intent --><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!-- Required 用户接收SDK通知栏信息的 intent --><action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!-- Required 用户打开自定义通知栏的 intent --><action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!-- Optional 用户接受 Rich Push Javascript 回调函数的intent --><action android:name="cn.jpush.android.intent.CONNECTION" /> <!-- 接收网络变化 连接/断开 since 1.6.3 --><category android:name="${JPUSH_PKGNAME}" /></intent-filter>
</receiver>

2.2 离线包制作

  1. 点击build -> build Bundle/APK -> Build APK
    在这里插入图片描述

  2. 点击右侧Gradle侧边栏,点击需要打包的module -> Tasks -> build -> assembleDebug/assembleRelease
    在这里插入图片描述

  3. APK文件生成路径见下图(build文件夹只有在project视图下可见)。
    在这里插入图片描述

  4. 复制APK文件到HBuilderX中
    在HBuilderX项目中创建创建unpackage目录,在unpackage目录中创建debug目录,将上述生成的APK文件拷贝到debug目录中。并重命名文件为android_debug.apk,目录结构参考下图。
    在这里插入图片描述

  5. 运行自定义基座
    将运行基座选为自定义基座。
    在这里插入图片描述

点击运行,直接运行到手机即可。

三、遇到的问题及解决方案

3.1 libs中sdk版本与app sdk版本不一致

uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [weex_videoplayer-release.aar] /Users/huaqiangsun/.gradle/caches/transforms-2/files-2.1/22285093409dba775963f444b0533dd8/weex_videoplayer-release/AndroidManifest.xml as the library might be using APIs not available in 16。Suggestion: use a compatible library with a minSdk of at most 16,or increase this project's minSdk version to at least 19,or use tools:overrideLibrary="io.dcloud.feature.weex_media" to force usage (may lead to runtime failures)

解决措施:需要在build.gradle(Moudle app)中minSdkVersion改为 19。

3.2 Suggestion: add ‘tools:replace=“android:resource”’ to element at AndroidManifest.xml to override

Attribute meta-data#android.support.FILE_PROVIDER_PATHS@resource value=(@xml/filepaths) from [lib.5plus.base-release.aar] AndroidManifest.xml:243:17-61
is also present at [torch-plgdtsdk-5.17.3157.aar] AndroidManifest.xml:48:17-57 value=(@xml/torch_file_paths).Suggestion: add 'tools:replace="android:resource"' to <meta-data> element at AndroidManifest.xml to override.

解决措施:在AndroidManifest.xml的根标签下加上 xmlns:tools="http://schemas.android.com/tools",然后在application标签下加入tools:replace="android:name"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.**"><application android:name="com.**.App"android:allowBackup="true"android:icon="@mipmap/app_icon"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"tools:replace="android:name"></application>
</manifest>

3.3 Android Studio未配置appkey或配置错误

官方给出的纠错步骤如下:

  1. 查看签名文件是否配置到了主APP的build.gradle

  2. 查看离线项目中dcloud_control.xml文件中的appid是否与申请AppKey时的appid一致。

  3. 检测离线项目的包名是否申请AppKey时的包名是否一致。

  4. 编译完通过apk解压获取一下签名信息与申请AppKey时填写的SHA1一致。

通过自查,发现是app的build.gradle里面离线项目的包名与申请AppKey时的包名不一致导致的,修改成与项目的Android包名一致就完美解决了。

在这里插入图片描述

注意⚠️:配置离线打包AppKey时,android需要填写的证书签名SHA1值其实是通过keytool命令获取的MD5值。不知道是不是DCloud得Bug!

keytool -list -v -keystore xxx-keystore.jks 

在这里插入图片描述

在这里插入图片描述

四、拓展阅读

  • uni-app官网本地打包指北
  • 《跨平台应用开发进阶(八) :uni-app 原生APP-云打包集成极光推送(JG-JPUSH)详细教程》

这篇关于跨平台应用开发进阶(九) :uni-app 实现Android原生APP-本地打包集成极光推送(JG-JPUSH)详细教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/715358

相关文章

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.