| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 使用android studio实现阿里云物联网平台数字签名(Signature)(附源代码) -> 正文阅读 |
|
[移动开发]使用android studio实现阿里云物联网平台数字签名(Signature)(附源代码) |
摘要:本文讲解如何在安卓移动端实现阿里云物联网平台数字签名,使用的是android studio编写apk的方式进行,win7 x64系统下实现,文中提供了如何配置android studio的国内镜像,文末提供源代码链接。作为敲开云端控制大门的钥匙,本文非常重要,建议收藏。 目录 使用eclipse实现阿里云物联网平台数字签名(Signature)(附源代码) 2.1 配置gradle-wrapper.properties ?编程环境:android studio 3.5.2,gradle 5.4.1,win7 x64。 1.数字签名基本知识数字签名是各个物联网平台必备的基础业务,在物联网知识中地位非常重要。 要实现对基于阿里云物联网平台的设备的控制,就需要调用阿里云的API。这些API不会让我们随意调用,而是有相当严格的审核机制,确保数据的安全。这种机制就是“签名机制”,我们每调用一次可以对硬件进行操作的API,就需要提供一次“数字签名”,阿里云物联网平台对每个接口访问请求的发送者进行身份验证,所以无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名(Signature)信息。 上篇文章介绍了如何使用eclipse在PC上计算出来数字签名,同时对签名机制做了比较详细的介绍,本文就不再详细讲解。需要的同学可以点击下文连接进行了解。 使用eclipse实现阿里云物联网平台数字签名(Signature)(附源代码)2.配置android studio目前android studio的资源非常丰富,阿里、腾讯都提供了有关资源连接。本文介绍的数字签名程序也需要这些配置,否则可能导致同步、编译速度缓慢。 2.1 配置gradle-wrapper.properties当android studio打开一个工程时,首先就会打开这个文件,从而知道这个工程需要哪个版本的gradle(gradle不用多说了吧)。然后就会去找电脑上安装的gradle,如果找不到,就会自动从网上下载,默认的网址是:
就是这个网址导致的我们下载几百兆的gradle特别慢的。 我们推荐使用腾讯的镜像,速度飞起。
设置好的界面如下图 ?2.2 配置工程build.gradle一个默认的工程build.gradle是这样的,这段代码配置了当前的项目可以从哪些仓库上拉取依赖库以供使用。如下图所示,有google(),还有jcenter()。这两个都是远程仓库,访问速度非常慢。 其中google()顾名思义是谷歌的仓库,相当于官方仓库,android不就是谷歌家里的嘛。jcenter()是就是JCenter仓库,很多Android第三方库的代码都会提交到这。那么可以想象,如果JCenter不能够使用,那么很多库都不能够正常使用,这对于Android开发者来说影响是比较巨大的。 ?那么有没有其他的库进行替代?当然有了! 阿里云就提供了非常棒的“云效”仓库。至于为什么叫做“云效”,那就不晓得了。 我们将两个默认仓库修改为:
修改完成的效果如下图所示,一共修改两个地方。 2.3配置应用build.gradle我们知道,一个android工程有2个gradle。下面开始配置第二个gradle。双击打开第二个build.gradle。然后将minSdkVersion修改为21,原因是最小sdk版本太低,会导致导入依赖包的时候,数量有限制。这是第一处修改,后面还需要第二处修改,讲到具体依赖包的时候再说。修改效果如下图所示。 ?2.4修改gradle.properties文件这里需要将android.enableJetifier=true修改为false。 如果是true则表示将依赖包也迁移到AndroidX 。如果取值为 false ,表示不迁移依赖包到AndroidX,但在使用依赖包中的内容时可能会出现问题。 AndroidX 是对 android.support.xxx 包的整理后产物。由于之前的 support 包过于混乱,所以,Google 推出了AndroidX。Jetifier字面意思为“喷射器”。Jetifier会自动将support libraries所有依赖项转换为依赖项AndroidX,如果您未将其设置为true则您的项目将同时支持AndroidX软件包。 也就是说从支持库迁移到AndroidX时,启用Jetifier很重要,对于本文例子来说,设置为false。 设置的效果如下图所示。 2.5修改AdroidMainfest.xml文件添加对网络的权限,跟阿里云连接,肯定需要网络权限的吧。
?3.为工程新建数字签名所需的类文件android studio设置完成后,下面开始编程实现数字签名功能。 根据阿里云物联网平台官方文档介绍,签名机制需要4个文件,分别是Config.java,UrlUtil.java,SignatureUtils.java和Main.java。 https://help.aliyun.com/document_detail/30563.html?spm=a2c4g.11186623.6.804.5b863f83S2O8xh 我们知道,android studio采用java语言编程,但是与PC机运行的java还是有很大的区别的。 因此,将这4个文件原封不动复制过来,肯定是无法正常运行的。比如android studio内就没有?public static void main(String[] args)方法。下面带领大家一步步来编程和改错。 3.1 新建Config.java文件在Android视图下,在java的目录上右键,选择“New”----“Java Class”。这个操作的意思是新建一个类。 在弹出的对话框中,填写类名Config,其他内容不变。 这样Config类的框架就生成完毕了。可以看到是一个空类,里面没有内容。 ?下面复制阿里云官方文档的内容到框架内部 填写到框架内,第一个文件就制作完成了。这个文件不会提示错误,因为这个类中只有我们的accessKey和accessKeySecret。 3.2新建UrlUtil.java文件按照新建Config.java的步骤新建UrlUtil.java,并且复制阿里云帮助文档的代码到文件中。 这次提示出现了错误。 ?原因是需要增加依赖包才行。 增加的方法是在应用的build.gradle中新增一个依赖。这就是前文所说的第二处修改。
?新增依赖之后,再clean一下工程 ?然后错误就消失了。 ?3.3新建SignatureUtils.java文件按照前面的方法新建SignatureUtils.java文件,然后复制官方代码到这个文件中。复制结束后,由出现了一个错误。根据前面的经验,也是依赖库没有添加导致的。但是这个库就没有刚才lang3库那么好解决了,请往下看。 这个库在PC端eclipse编程的时候,可以直接依赖,但是在android studio下进行编程,就不行了。原因是没有这个库的安卓版本!!!! 它不是一个标准的安卓库,而我们又需要这种base64编码,怎么办?只能找一个安卓能用的base64编码库来代替了。这个在阿里云官方文档中没有提到。 我们先复习一下base64编码,安卓官方库中,有android.util.Base64,可以直接import而不用添加依赖。 直接使用android.util.Base64库,不用添加依赖,看似更加方便了,但事实并非如此。 尽管都叫做Base64,但是库函数的原型未必一致。参数也未必相同。 阿里云帮助文档中的代码是下面这个语句,调用的方式是Base64.encodeBase64(bytes, false)。其中两个参数bytes和false。bytes是binary data,false是isChunked。其中isChunked的意思是字符超过76个之后怎么处理,如果是false,就继续连成一串,如果是true,就会换行。
上面的语句是在org.apache.commons.codec.binary.Base64类库下,也就是PC端运行java程序可以正常执行的语句。 参数定义是 ?那么在android.util.Base64类库下,它的参数是什么呢?如果一致,那么就可以直接使用它来代替原来的函数。 下图是函数说明,可以看到,这个函数的参数和org.apache.commons.类的函数参数是不同的,也就是说,阿里云的源代码中,涉及encode的函数需要重写。 ?下面我们查找flags怎么样才能实现阿里云帮助文档的源代码效果。我们找到了参数的说明。可以发现,“NO_WRAP”参数可以达到org.apache类库函数相同的效果。 几种参数运行起来的效果如下图所示,我们的确需要的是NO_WRAP参数。 ?明白了原理,我们就对SignatureUtils.java文件进行修改。一共修改2处。 第一处是import类库改变,如下图红框所注,导入的是安卓自带的库。 ?第二处是文件末尾,将原来的代码
修改为
?效果如下图所示,这样就不再提示错误了。 ?3.4修改MainActivity.java文件在android studio里,是没有java程序的main方法的,所以我们需要将阿里云帮助文档中的main.java文件内容想办法“移植”到“主活动”里面。方法如下: 首先导入几个库
?然后在MainActivity类中新建一个public String signature()方法。代码如下
修改完成的效果如下图所示。 ?在activity_main.xml主界面上添加一个按钮button,一个文本显示textview。 在button响应代码中添加数字签名的代码,这样的话,点击按钮之后,textview就显示签名计算结果了。
代码修改后的效果如下图所示。 4.编译运行使用Build APK(s)编译APK文件,然后下载到手机,安装,运行。也可以通过模拟器运行。 ?运行效果如下图,打开软件 点击BUTTON,textview就显示了计算出来的签名字符串。 ?当你拥有了这个签名字符串,就拥有了调用阿里云物联网API的钥匙。 下一步,将实现一个安卓程序,控制一个智能灯,从而实现一个完整的移动端物联网应用。 源代码可以通过两种途径获取。 第一种是通过CSDN资源下载,链接是: https://download.csdn.net/download/youngwah292/20496144 第二种是通过微信索取。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/11 23:58:16- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |