如何主动PUSH SDK更新给开发者

之前苹果禁用jspatch时,涉及到的SDK全部需要更新。此时开发者得全面排查所使用SDK是否需要更新。怎么查?一个一个去SDK官网查看是否有更新解决方案。啰嗦,实现上就是想维护Github上面可怜的Star,所以想利用Github的开放api更新了SDK给他们发个邮件

1、查询Star的api
文档:https://developer.github.com/v3/activity/starring/
调用:https://api.github.com/repos/2tu/fit/stargazers
发现只有user,没有其邮箱

2、查询用户信息
文档:https://developer.github.com/v3/users/
调用:https://api.github.com/users/2tu
发现并没有想要的email,提示如下:
Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). The publicly visible email address only displays for authenticated API users.
只能显示用户自己的email,虽然可以通过爬虫直接爬取,但是不正当,该想法搁置

一个万能算法压缩所有图片?

图片越来越多,相素越来越高,导致越来越大的图片必然绕不开压缩。
作为基础功能的图片压缩,本身问题却很多。如:

  • android压缩下来比iOS大,质量却低
  • h5压缩图片导致崩溃
  • 微信号每天上传图片限制10w张
  • 压缩后图片变形、不清晰
    各路大神提供了诸多解决方案,
    解决质量速度问题的libjpeg-turbo,android7.0之后也采用该库;
    解决裁剪问题的uCrop
    压缩策略Luban
    压缩质量、裁剪技术方案都是无需质疑选型使用就好。那么压缩策略呢?
    Luban(鲁班) —— Android图片压缩工具,仿微信朋友圈压缩策略。Luban可能是最接近微信朋友圈的图片压缩算法,有微信强大的用户量背书,我们是否可以在项目中直接使用该策略呢?
    答案是NO
    压缩策略其实与业务需求关系非常紧密。比如聊天时、展示文章等这个算法都特别合适,一般情况下该算法压缩出来的图片不大且可以被用户清晰辨识,如果看不清楚,可以点击下载查看原图。但是如果是拍证件,如身份证、银行卡这种就不需要。
    废话太多,写不下去了。总之,没有万能算法,要做的是分析自己的业务应用场景。

Android正确获取IP及MAC

每个产品都会统计用户终端信息。稍不注意就会经我们的手造成公司得到的数据错误,造成分析甚至战略错误。(假装是程序猿缔造了世界)

设备:Oppo R9s、vivo X9
系统:Android 6.0.2
网络:4G
错误IP和MAC分别为


fe80::188c:24ff:fe49:8e54%dummy0
02:00:00:00:00:00

错误代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static String getLocalIpAddress() {
try {
for (
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
networkInterfaces.hasMoreElements(); ) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
for (Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
inetAddresses.hasMoreElements(); ) {
InetAddress inetAddress = inetAddresses.nextElement();
if (!inetAddress.isLoopbackAddress()) {
String ipAddress = inetAddress.getHostAddress().toUpperCase();
return ipAddress;
}
}
}
} catch (SocketException e) {
}
return null;
}

然后根据搜索结果认为,直接将“%dummy0%2”去掉结果即为ipv6地址。不管你信不信反正当时我是信了,后来脑海里有一个声音时不时告诉我这不对,世界不是这样的。(程序猿后遗症)

Read More

use RestTemplate in Spring

Spring中提供RestTemplate方便访问Web服务,不再需要使用HttpClient、HttpComponents等

差异

使用方式详细见api,唯一注意区别参数uriVariables,遵循RESTful风格为uri变量,如:https://api.github.com/users/2tu
可以写成

restTemplate.getForObject("https://api.github.com/users/{userName}", String.class, "2tu");  
Map<String, String> uriVariables = Collections.singletonMap("userName", "2tu"); 
restTemplate.getForObject("https://api.github.com/users/{userName}", String.class, uriVariables);
注:SpringBoot默认采用jackson

参考:
Consuming a RESTful Web Service
RestTemplate API

android数据共享,Application\Singleton存储数据出错的问题

两天终于完成了某模块的数据共享问题的改造。此次问题就是传说中万恶的Application及Sigleton存数据的问题。
曾经有大拿老张疑惑说Android怎么可能没有一个安全的临时存储数据的地方。接下来我们看一下在本次应用中实际发生的问题。并查看解决知名app掘金v3.1.1出现的这个问题
采用官方提供api机制来解决问题。

一、问题

应用切换到后台返回程序Crash或数据丢失。甚至在小内存手机中调用系统相机再回来应用就已经重启了

二、解决办法

采用Intent及setArgments的方式来传值,采用onSaveInstanceState保存数据以供恢复。

Activity中Fragment恢复

Read More

使用AndroidStudio开发JNI并开启Native Debugger

不使用eclipse开发JNI,使用谷歌亲儿子AndroidStudio,并开启Native Debugger

一、创建JNI工程

1、android.useDeprecatedNdk=true

在gradle.properties中添加“android.useDeprecatedNdk=true”,否则会报
”Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.“

2、创建CLog类

添加native方法
public static native void i();

3、采用javah使用生成头文件

创建JNI目录

Read More

TV Apps Checklist

最近开发一款定制运行于Letv的 TV应用(流云TV),主要用于数据报表展示及小部份交互。本文主要参考于电视猫、VST两款应用,适配小米电视及乐视。

SDK版本及分辨率

国内目前的电视都是从4.x的Phone SDK修改,所以我们的适配如下表

应用 minSdkVersion targetVersion 分辨率
电视猫 8 16 1280*720
VST 15 19 1920*1080
流云TV 14 19 1920*1080(xxhdpi)

Read More

O2O收货地址管理——做一个有节操的码畜

前言

O2O的收货地址与传统电商不同,前者自动带入地区属性,所以不需要传统B2C一样选择省市区、填写详细地址及邮编。应显示标志性位置如“新干线大厦”,不是“重庆市渝中区村55号”,也不是“重庆市渝中区两路口新干线大厦“。

做产品时,通常会饱受各方质疑。这个功能不应该这样,那个功能应该那样,客户说、用户说、老板说、测试说、程序说。每个人说的都不一样,每个人都有道理。产品说好,那我改,我兼容,这样的产品永远不可能获得认可。每个人的出发点,使用场景不同,当然所要的就不同。我们所需要找的是产品的使用场景、切入点,找准这两个问题其它的一切问题自然不复存在。

用户端中两个地方显示地址

Read More