在开发IoT App往往需要WiFi配网功能,所以需要用到获取当前SSID的API接口,在Android9.0上获取的权限更加严格。
权限
ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION (需要动态申请)
ACCESS_WIFI_STATE 和 ACCESS_NETWORK_STATE
1 | <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
在开发IoT App往往需要WiFi配网功能,所以需要用到获取当前SSID的API接口,在Android9.0上获取的权限更加严格。
ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION (需要动态申请)
ACCESS_WIFI_STATE 和 ACCESS_NETWORK_STATE
1 | <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |
工程 compileSdkVersion 28
,preview
一片空白,无法预览布局,降低 sdk
版本也不行。
点击旁边的 红色圆点叹号
,出现
1 | Failed to load AppCompat ActionBar with unknown error. |
应该是 ActionBar
出了问题,按照以下修改可预览:
1 | <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> |
借助网上的一段描述:
若以银行账户为类比,这 5 个词分别对应内容如下:
地址=银行卡号
密码=银行卡密码
私钥=银行卡号+银行卡密码
助记词=银行卡号+银行卡密码
Keystore+密码=银行卡号+银行卡密码
Keystore ≠ 银行卡号
1 | implementation 'org.web3j:core:3.3.1-android' |
org.web3j:core
这个库是Java的,org.web3j:core:x-android
是兼容Android平台,所有接口和工具类都是为Java应用设计的,所以在Android上使用的时候要注意变通一下。
下载web3j-3.4.0
解压目录
1 | . |
进入bin目录,编写一个测试合约代码 SimpleStorage.sol
1 | pragma solidity ^0.4.17; |
为了防止交易重复进行,以太坊要求每笔交易必须有一个nonce数值。nonce值从0开始递增,每发送一笔交易,nonce便加1。
交易处理从nonce值较小的开始,所以nonce的值太大的话,交易会被延迟处理。
如何合理的获取nonce的值:向以太坊节点获取。
1 | /** |
我们使用 Js / Java / Go 等语言调用以太坊 ethereum
的服务时,以太坊是通过 JSON-RPC
提供服务的,那么什么是 JSON-RPC
?
JSON-RPC是一种无状态轻量级远程过程调用(RPC)协议。本规范定义了数据结构及 相应的处理规则。规范本身是传输无关的,可以用于进程内通信、Socket套接字、HTTP 或各种消息通信环境。规范使用JSON(RFC 4627)数据格式。
相较于一般的 RESTAPI
通过网址(如 GET /user)调用远程服务器,JSON-RPC
直接在内容中定义了欲调用的函数名称,如 {“method”: “getUser”},JSON-RPC
更加简单和轻量级。
眼下主流语言都已有 JSON-RPC
的实现框架,Java语言中较好的JSON-RPC
实现框架有 jsonrpc4j、jpoxy、json-rpc
。三者之中 jsonrpc4j
既可独立使用。又可与 spring
无缝集合,比較适合于基于 spring
的项目开发。
平时写Android App和Web服务器的通讯是通过JSON的数据格式,然而自己对响应数据的定义的一般是使用Java Bean的继承来实现,下面是web3j的设计,也差不多这样,但是他的泛型用的挺的,以后可以参考。
比如:
1 | package org.web3j.protocol.core.methods.response; |
Response类的 result
字段使用了泛型 T
:
1 | package org.web3j.protocol.core; |
打开就可以了,设置一下HOSTNAME
1 | implementation ('org.web3j:core:3.3.1-android') |
这个库完全实现了以太坊的 Json-RPC
客户端的协议,包含HTTP和IPC,我们就用HTTP的就可以了, Documentation 。
multipart/form-data
用以向服务器发送二进制数据,一般用于多个文件和参数一起发送。
1 | @RequestMapping("/test/multipart") |
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。
客户端给服务器发送数据也一样可以使用 Chunk 传输,比如,客户端要上传数据,但是数据没有完全生成,通过chunk分块传输,就可以一边生成数据一边上传,典型的比如:上传录音。
1 | @PostMapping(value = "/upload") |
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具。Jenkins非常灵活,不过需要自己部署服务器,功能非常强大。可以通过配置插件,实现各种项目的 编译
- 打包
- 部署
等一条龙服务工作。
……篇幅较长,还是看别人的吧 《搭建jenkins实现自动化部署》
travis-ci 是在线托管的CI服务,用Travis来进行持续集成,不需要自己搭服务器,使用方便,对Github开源项目是免费的,支持多数主流语言。
1 | language: java |
在github看到很多项目根目录都有 .editorconfig
文件,所以去了解一下。
这个文件是 EditorConfig 用来统一不同编辑器的代码风格的配置。
各种IDE的风格自然不一样,通过这样一个配置文件定义的标准统一风格,比如缩进用x个空格。再有就是多人一起协同开发一个项目,editorconfig
能起到很好的效果。
示例:
1 | # EditorConfig: http://editorconfig.org/ |
自己搜索的内容含有 csdn.net 的,但这个网站要登录才能看,所以这些搜索结果是无用的,所以要过滤掉这些无用的结果。
如某搜索,这样搜索:关键字 -site:csdn.net
就是过滤掉 csdn.net 的搜索结果。
目前Android4.x也算是老设备了,今天做的一个项目访问客户的 HTTPS
服务器,在Android4.x一直抛异常
1 | javax.net.ssl.SSLException: Connection closed by peer |
这是由于 Android4.x
默认关闭 TLS
的支持和 OkHTTP3.x
的问题,这个问题的讨论在于 issues/2372 。