存档在 ‘Android’ 分类

APP接口安全设计

2016年11月19日
  • 方案一 (客户端token方式)
  • 客户端生成token传给服务端校验,一致就通过用户验证。
    通过时间戳+用户唯一标识+MD5加密=token(算法自定义),并且把时间戳传给后台,后台通 过后台系统的时间戳和客户端传过去的时间戳可以规定当前用户在1分钟内这次接口可以正常使用,也就是 说,当黑客从路由获取到连接后,只有1分钟的时间可以使用这次接口(时间后台可以自定义),这样很大程度 上确保了接口的安全性,同时,这种方式也可以有效的解决用户登入过期,也就是使用session的方式的不足,但是有个问题,如果客户端和服务端系统时间不一致,就不能这样用了,所以这个时间戳如何获取,也是一个关键点,可能通过接口从后台接口获取,也可以使用其他方式,有好的建议可以一起探讨

  • 方案二 (服务端token方式-session)
  • 这种方式用得是最多的,但是有个前提,用户登入接口一定要安全,也就是各种加密处理登入,后台返回sessionId作为token,客户端携带token命牌请求接口,后台从session中拿到sessionId和参数中的sessionId去验证一致性通过用户验证,这样其他人就算拿到这个链接通过其他客户端去调接口是不会成功的,因为每个客户端的session是不一样的,那么这种方式的缺点就是sessin过期的问题,客户端用户调接口时有可能登入已经过期了,解决的办法就是接口规范了,也就是后台要返回用户登入是否过期的字段,客户端通过这个字段判断是否跳转到登入页面。这种处理方式也是和网站的处理方式差不多一致的
    以上两种方式是用户需要登入APP的用户数据安全问题解决办法
    另外,对于接口参数加密处理是一般性的安全问题,以免太多数据信息暴露给外界,防止别人篡改参数拿去调接口,所以参数加密再配合上述两种方式去做接口安全,是很有意义的。

Eclipse崩溃后无法启动的问题解决

2016年9月7日

一次Eclipse发生内存溢出(ADT环境,多打开几个xml文件内存占用就会飚升),强制结束任务,再次启动Eclipse发现闪退。查看workspace/.metadata/.log文件发现如下错误信息:

!ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2016-09-07 22:29:38.086
!MESSAGE Unable to execute early startup code for an extension
!STACK 1
org.eclipse.core.runtime.CoreException: Plug-in "org.eclipse.equinox.p2.ui.sdk.scheduler" was unable to instantiate class "org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler".
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:194)
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:186)
at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:273)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:52)
at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:269)
at org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension(EarlyStartupRunnable.java:117)
at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.Workbench$54.run(Workbench.java:2412)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)
Caused by: java.lang.NullPointerException
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler.<init>(AutomaticUpdateScheduler.java:68)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
... 11 more
!SUBENTRY 1 org.eclipse.equinox.registry 4 1 2016-09-07 22:29:38.086
!MESSAGE Plug-in "org.eclipse.equinox.p2.ui.sdk.scheduler" was unable to instantiate class "org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler".
!STACK 0
java.lang.NullPointerException
at org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler.<init>(AutomaticUpdateScheduler.java:68)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:273)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:52)
at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:269)
at org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension(EarlyStartupRunnable.java:117)
at org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.Workbench$54.run(Workbench.java:2412)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

解决方法是删除workspace/.metadata/.plugins/目录下的org.eclipse.equinox.p2.ui和org.eclipse.e4.workbench这两个文件夹,之后启动Eclipse恢复正常。

Channel is unrecoverably broken and will be disposed!

2016年9月7日

调试一Android程序时,总是提示如下信息,09-07 13:49:49.855: E/InputDispatcher(280): channel ‘2ca76fa0 com.test/com.test.MainActivity (server)’ ~ Channel is unrecoverably broken and will be disposed! 该信息相对比较晦涩,也没直接抛出异常之类

出错原因:调用TextView的setText函数时,传递了一个整数,该函数需要一个字符序列。

Android sdk离线更新

2016年9月7日

最近需要下载android sdk 4.1 (android-16),发现代理代理mirrors.neusoft.edu.cn:80也不好使了,提示错误“Download interrupted: URL not found.Done. Nothing was installed.”

发现两个可以离线下载的下载地址:

另外附上对照表:

Platform Version API Level VERSION_CODE Notes
Android 4.4 19 KITKAT Platform Highlights
Android 4.3 18 JELLY_BEAN_MR2 Platform Highlights
Android 4.2, 4.2.2 17 JELLY_BEAN_MR1 Platform Highlights
Android 4.1, 4.1.1 16 JELLY_BEAN Platform Highlights
Android 4.0.3, 4.0.4 15 ICE_CREAM_SANDWICH_MR1 Platform Highlights
Android 4.0, 4.0.1, 4.0.2 14 ICE_CREAM_SANDWICH
Android 3.2 13 HONEYCOMB_MR2
Android 3.1.x 12 HONEYCOMB_MR1 Platform Highlights
Android 3.0.x 11 HONEYCOMB Platform Highlights
Android 2.3.4
Android 2.3.3
10 GINGERBREAD_MR1 Platform Highlights
Android 2.3.2
Android 2.3.1
Android 2.3
9 GINGERBREAD
Android 2.2.x 8 FROYO Platform Highlights
Android 2.1.x 7 ECLAIR_MR1 Platform Highlights
Android 2.0.1 6 ECLAIR_0_1
Android 2.0 5 ECLAIR
Android 1.6 4 DONUT Platform Highlights
Android 1.5 3 CUPCAKE Platform Highlights
Android 1.1 2 BASE_1_1
Android 1.0 1 BASE

YHS-自动清刷仪第二阶段代码完成

2016年8月10日

git链接:http://git.oschina.net/creater/YHS-FLUSH

Android存储系统之架构篇

2016年8月2日

本文讲述Android存储系统的架构与设计,涉及到最为核心的便是MountService和Vold这两个模块以及之间的交互。上一篇文章Android存储系统之源码篇从源码角度介绍相关模块的创建与启动过程,那么本文主要从全局角度把握和剖析Android的存储系统。

MountService:Android Binder服务端,运行在system_server进程,用于跟Vold进行消息通信,比如MountService向Vold发送挂载SD卡的命令,或者接收到来自Vold的外设热插拔事件。MountService作为Binder服务端,那么相应的Binder客户端便是StorageManager,通过binder IPC与MountService交互。

Vold:全称为Volume Daemon,用于管理外部存储设备的Native daemon进程,这是一个非常重要的守护进程,主要由NetlinkManager,VolumeManager,CommandListener这3部分组成。

链接:Android存储系统之架构篇

15 个 Android 通用流行框架大全

2016年5月30日

1. 缓存

2.图片加载

3. 图片处理

4. 网络请求

  • Android Async HTTP  Android异步HTTP库
  • AndroidAsync    异步Socket,HTTP(客户端+服务器),WebSocket,和socket.io库。基于NIO而不是线程。
  • OkHttp  一个Http与Http/2的客户端
  • Retrofit    类型安全的Http客户端
  • Volley  Google推出的Android异步网络请求框架和图片加载框架

5. 网络解析

  • Gson    一个Java序列化/反序列化库,可以将JSON和java对象互相转换
  • Jackson Jackson可以轻松地将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象
  • Fastjson    Java上一个快速的JSON解析器/生成器
  • HtmlPaser   一种用来解析单个独立html或嵌套html的方式
  • Jsoup   一个以最好的DOM,CSS和jQuery解析html的库

6. 数据库

  • OrmLite JDBC和Android的轻量级ORM java包
  • Sugar   用超级简单的方法处理Android数据库
  • GreenDAO    一种轻快地将对象映射到SQLite数据库的ORM解决方案
  • ActiveAndroid   以活动记录方式为Android SQLite提供持久化
  • SQLBrite    SQLiteOpenHelper 和ContentResolver的轻量级包装
  • Realm   移动数据库:一个SQLite和ORM的替换品

7. 依赖注入

8. 图表

9. 后台处理

  • Tape    一个轻快的,事务性的,基于文件的FIFO的库
  • Android Priority Job Queue  一个专门为Android轻松调度任务的工作队列

10. 事件总线

  • EventBus    安卓优化的事件总线,简化了活动、片段、线程、服务等的通信
  • Otto    一个基于Guava的增强的事件总线

11. 响应式编程

  • RxJava  JVM上的响应式扩展
  • RxJavaJoins 为RxJava提供Joins操作
  • RxAndroid   Android上的响应式扩展,在RxJava基础上添加了Android线程调度
  • RxBinding   提供用RxJava绑定Android UI的API
  • Agera   Android上的响应式编程

12. Log框架

  • Logger  简单,漂亮,强大的Android日志工具
  • Hugo    在调试版本上注解的触发方法进行日志记录
  • Timber  一个小的,可扩展的日志工具

13. 测试框架

Android自带很多测试工具:JUnit,Monkeyrunner,UiAutomator,Espresso等

14. 调试框架

  • Stetho  调试Android应用的桥梁,使得可以利用Chrome开发者工具进行调试

15. 性能优化

  • LeakCanary  内存泄漏检测工具
  • ACRA  Android应用程序崩溃报告

android ndk multiple target patterns解决办法

2016年5月26日

出现问题:/Users/macmini/Documents/ME/Project/CODE/SerialAPI/obj/local/mips/objs/serialport/SerialPort.o.d:1: *** multiple target patterns. Stop.

解决办法:
删除Obj目录下以前生成的文件,重新ndk-build即可

[mips] Compile        : serialport <= SerialPort.c
[mips] SharedLibrary  : libserialport.so
[mips] Install        : libserialport.so => libs/mips/libserialport.so