List All Classes after Multidex

Intro

Google recently posted an article to solve the 65K Reference Limit problem.
It is such a relief that we will not need to worry about the following errors any more.

1
2
3
4
5
6
Conversion to Dalvik format failed:
Unable to execute dex: method ID not in [0, 0xffff]: 65536
//--or--
trouble writing output:
Too many field references: 131000; max is 65536.
You may try using --multi-dex option.

Problem

After configuring multidex in the module, some projects may encounter the loss of part of the the classes when using reflection to list all the classes in the apk.
The usual code may like this:

1
2
3
4
5
6
7
8
9
//get the apk path
String path = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0).sourceDir;
//use DexFile the unzip the apk, find the *classes.dex* in the apk
DexFile dexfile = new DexFile(path);
//get all the classes in this dex
Enumeration<String> dexEntries = dexfile.entries();
while (dexEntries.hasMoreElements()) {
classNames.add(dexEntries.nextElement());
}

令人惊叹的电音

不是摇滚,而是电音。
不是躁杂,而是节奏。
生命和心脏一起律动,
思维完全沉浸入音乐中,
是未来,是科学,是电子,是光,是电,是宇宙的文明在歌唱。

闹了好久的音乐荒,今天终于发现了新大陆。

Yosemite:安装和修复开发环境

OS X Yosemite昨天如期而至,更新自不待说。有了上次升级OS X Yosemite Beta失败的经验,这次在按下那个大大的继续之前,先用Time Machine做了一个备份。

等待的过程尤其漫长,论坛上看到很多人都卡在大约剩余2分钟。我倒是没有出现这种情况,我只是卡在大约剩余1分钟而已(._.)。在安装界面使用CMD+L可以看到系统在不断拷贝texlive的文件,也算是蛮拼的了。

大约一个半小时后,锵锵,全新的OS X长这样。

OS X Yosemite

然后就是修复我的开发环境,毕竟还要靠它赚钱吃饭呐。

Bandwagon 被黑小记

最近使用Azure和Bandwagon搭建了一个APNP梯子,顺畅无比。可惜好景不长,昨天下午突然就不能用了,心想不会那么快没流量吧。结果登上KiviVM一看,我的VPS居然被Suspend了,原因是Spam Email,顿时感到不妙,花了个擦,我的小梯子居然成了肉鸡?

Gson在Spring MVC中的使用

最近在用Spring MVC搭建一套Restful API,整个过程的最后一步就是数据序列化。Spring MVC默认使用Jackson,但在使用过程中并不如想象中的顺手。因而尝试转向Gson

Gson是Google出品的用来进行Java Object和JSON转换的类库。有人曾对Gson和Jackson的性能做过比较,Gson在读取和写入方面的速度都要逊于Jackson。不过现前并不需要在性能上作过多要求,容易上手和提高开发效率才是这个项目的重中之重。

基本

使用Gson来反序列化JSON十分简单,如下:

User
1
2
3
4
5
6
7
public class User{
private String name;
private String password;

public User(String name, String password){...}
...
}
Gson反序列化User
1
2
3
4
5
Gson gson = new Gson();
gson.toJson(new User("hello", "world"), User.class);

// Result:
// {"name": "hello", "password": "world"}

但Gson的优点不仅仅在于这点,而是在自定义序列化方面。