alighters

程序、写作、人生

RN 通信

| Comments

JS 桥

Android: Webkit 的 JavaScriptCore ios: 自带的 javascriptcore

在 Android 的代码,其提供了一个 CatalystInstance 的接口,来做 JS 与 Native 的高度抽象的接口:

LeakCanary 浅析

| Comments

内存分析工具

关于内存分析,在 LeakCanary 之前,可以用到的工具主要以 MAT 为主,在新版的 AS 3.0 中,又提供了 Memory Profiler,可进一步帮助我们定位内存出现的问题。

图片加载理解之 UIL

| Comments

针对Android 的图片加载,有着太多的细节问题,需要注意,本文针对 Universal Image Loader 的一些技术点,进行细致的剖析一番。由于涉及的内容,所以打算分成三个系列,分别从视图(View),数据(Cache),网络等三个大的方面讲起:

React Native 之 JS 分离

| Comments

项目中遇到了要使 JS 与客户端分离的问题,即由前端开发人员开发相应的 JS 部分,客户端人员(Android 和 Ios)开发对应的 Native 部分。

不过幸运的是,React Native 对这部分内容已经做了支持。主要的思想是,当进入手机端的 RN 界面时,通过加载 JS 部分生成的 bundle,来达到 JS 测试开发的目的。

在前端开发时,需要通过启动 npm server,连接手机端的 server,来进行开发。 下面对其中的过程做一笔记:

理解 Multidex 生成

| Comments

介绍

在 Android 开发中,提到 65536 问题,就不得不提 Multidex 的解决方案。具体问题就是在 Android 打包的期间,是需要对 java 文件编译成 class 文件,class 文件信息过多而又冗余,这就再经过一步合并变成 dex 文件的过程(这一步是 dx 工具来处理的),其才是 Davilk 虚拟机加载识别的东西。而单个 dex 文件,其对方法数、字段数做了限制,即不能超过 65536,这便是问题的由来了。

当然,解决这个问题也是很简单的。在 gradle 中启用 Multidex,在 application 中添加 Multidex.install 方法。乍以为万事大吉了,但在我们项目中还是遇到了 65536 的问题,主要是因为项目太大,在生成 mainDex 的过程中,还是出现了方法数超过了 65536 的问题,解决这个问题的思想是要将 mainDex 中的一些类移除至其它的 dex 中。那这一步,应该怎么玩呢?这里先看一些 dx 工具为我们提供了什么?

Multidex 的问题

| Comments

降低启动速度的问题

文章中提到的一点,在 Android 设备 4.4 及其之前的版本,当开启 Multidex 的时候,启动速度会延长 15% 。而 5.0及以上的设备因使用 ART 的方式,其默认支持多 dex 的加载。

NoClassDefFoundError 的问题

创建 Gradle Plugin

| Comments

在使用 Android Studio 开发的同时,必定离不开 Gradle,再加之最近对 Gradle 在 InstanRun 所扮演的角色颇有兴趣。所以,这里先有一个开篇,理解并编写简单的 gradle plugin。

写一个简单的插件

创建一个 build.gradle 文件

位运算之巧用

| Comments

之前接触到位运算的时候,总是似懂非懂,一脸萌比。最近花点时间,细细研究,其实发现也相当简单。下面来举两个相当实用的例子,来彻底掌握位运算。

异或实现交换

在涉及到两个数的相交换的诸多实现中,一个不错的及格的算法,就是利用加法来做。如下:

Mac 下 Terminal 快捷键

| Comments

在mac下,是没有meta键的。具体的修改方法:

  • 若是系统自带的terminal,在设置的键盘选项中,将“使用option键作为meta键”
  • 若是在iterm下,需要在profiles->keys中,将“Left option key acts as”修改为“+Esc”即可。