Kaede Akatsuki

中二病也要开发 Android

ProGuard 又搞了个大新闻

一般情况下,Android项目经常开启ProGuard功能来混淆代码,一方面可以降低应用被反编译后代码的友善度,增加被逆向的难度,另一方面开可以通过精简Java API的名字来减少代码的总量,从而精简应用编译后的体积。

ProGuard有个比较坑爹的问题。在开发阶段,我们一般不启用ProGuard,只有在构建Release包的时候才开启。因此,如果有一些API被混淆了会出现BUG,那么在开发阶段我们往往无法察觉BUG,只有在构建发布包的时候才发现,甚至要等发布到线上了才能发现,这种时候解决问题的成本就很大了。
不过今天被ProGuard坑的不是混淆API导致的BUG,这货在之前相当长的一段时间里一直相安无事,最近突然又搞了个大新闻,而且问题排查起来相当蹊跷、诡异。

阅读全文

IDEA 注释优化插件:Comment Formatter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//               +---------------------------------------------+
// | public static final FiledA mFiledA; // xxx |
// | private static final FiledB mFiledB; // xxx |
// | public FiledC mFiledC; // xxx |
// | protected final FiledD mFiledD; // xxx |
// | FiledE mFiledE; // xxx |
// | | |
// | v |
// | public static final FiledA mFiledA; // xxx |
// | private static final FiledB mFiledB; // xxx |
// | public FiledC mFiledC; // xxx |
// | protected final FiledD mFiledD; // xxx |
// | FiledE mFiledE; // xxx |
// +---------------------------------------------+

Comment Formatter is an IntelliJ IDEA plugin (also works in Android Studio) that formats comments as above. It will force all the comments to align to the longest one.

Getting Started

  1. Install CommentFormatter from release or IntelliJ Plugin Repository.
  2. Select all the lines which you wanna format.
  3. Select Tool - Format comment or toggle Ctrl + Cmd + L to format.

Check it out.

通过预安装给 MultiDex 加速

在Android Kikat及以前的Android系统上,构建或安装Apk会出现“65535方法数超标”以及“INSTALL_FAILED_DEXOPT”问题,MultiDex是Google为了解决这个问题问题而开发的一个Support库。MultiDex出现的具体背景、使用方式可以参考给App启用 MultiDex功能,而MultiDex Support库的工作机制、源码分析可以参考MultiDex工作原理分析和优化方案

MultiDex的使用虽然很简单便捷,但是有个比较蛋疼的问题,就是在App第一次冷启动的时候会产生明显的卡顿现象。经过测试和统计,根据Apk包的大小、Android系统版本的不同,这个卡顿时间一般是2000到5000毫秒左右,极端的情况下甚至可以到20000+毫秒。通过之前的分析,我们知道具体的卡顿产生在MultiDex解压、优化dex这两个过程,而且只在第一次冷启动的时候才会触发这两个过程。那么优化的方式也很简单,在安装Apk前先对新版本的Apk做好解压和优化工作,就能在安装后第一次冷启动的时候避开这两个耗时的过程了。

阅读全文

MultiDex 工作原理分析和优化方案

动态加载技术(插件化)系列已经坑了有一段时间了,不过UP主我并没有放弃治疗哈,相信在不就的未来就可以看到“系统Api Hook模式”和插件化框架Frontia的更新了。今天要讲的是动态加载技术的亲戚 —— MultiDex。他们的核心原理之一都是dex文件的加载。

MultiDex 是Google 为了解决 “65535方法数超标” 以及 “INSTALL_FAILED_DEXOPT” 问题而开发的一个Support库,具体如何使用MultiDex现在市面已经有一大堆教程(可以参考给 App 启用 MultiDex 功能),这里不再赘述。这篇日志主要是配合源码分析MultiDex的工作原理,以及提供一些MultiDex优化的方案。

阅读全文

Android Logging 的正确姿势

LOG 是任何一种编程语言的第一个API,通常被初学者用来打印 Hello, World!。 有研究显示,不使用 LOG 或者使用姿势错误的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情需要书写,不能是一整张白纸。

LogCat是Android开发者们最熟悉不过的日志打印工具,几乎每一个Android项目里面都包含着大量的Log相关代码。不过,或许是因为Log实在是太过于普通,所以许多人在使用它的时候就显得非常随意,这些错误的使用姿势却会在不经意间给我们带来不少的大坑。

阅读全文

黑苹果初体验 - 富士通 LH532

高中开始折腾电脑DIY,当然硬件玩不起,只是折腾系统,一开始折腾重装Windows系统,玩腻了就折腾Linux,到后来开始打算折腾Mac。在普通PC上安装苹果的OSX系统(现在叫MacOS)的行为叫做黑苹果(Mackintosh),相反的,苹果自家产品自带的系统叫做白苹果(Mackintosh)。不过安装黑苹果比起Windows和Linux实在是难多了,所以那时候看教程看得一脸懵逼就结束了。

最近在公司开始正式切换到Mac系统上进行开发工作,但是回到家里就得用WIN10(Fujitsu LH532)进行开发,有个非常头疼的问题,就是Mac上的快捷键和Windows大相径庭,所以又产生了安装黑苹果的想法。看了一周的攻略之后,我迫不及待地开始了。

阅读全文

自动给你的博客的中英文间加上空格

关于“是否应该在中文和英文之间加上空格”的争论在 知乎 上的争论历来已久,我本喜欢加上空格,只是对于英文单词频繁穿插的中文句子来说实在是有点繁琐和难看(特别是技术向文章),自从发现了有自动在博客的中英文间加上空格的脚本后,就放弃手动加空格的做法,这些频繁的工作,就交给脚本去做吧。

阅读全文

Hexo 主题 Themia 1.7

Themia 是一个华丽的Hexo响应式主题,由 LouisBarranqueiro 开发的主题TranquiPeak的基础上改造而来,大部分功能都是原有主题的,只是为了我自己的需求做了小部分的修改,主要是针对中文适配做的修改。
特点

  1. 增加1080P等大屏显示器下的SideBar样式;
  2. 调整文章的样式,比如字体、字体大小、对齐等;
  3. 中英混排自动加入空格(参考 pangu.js);
  4. 同步更新至 TranquiPeak 1.7.1;

将项目根目录的所有文件复制进一个文件夹,并把该文件夹复制进Hexo项目的themes目录下,再把Hexo的配置文件_config.yml中的theme标签的指改为该文件夹的名称即可。