Kaede Akatsuki

中二病也要开发 Android

使用 so 库时要注意的一些问题

正好动态加载系列文章谈到了加载 SO 库的地方,我觉得这里可以顺便谈谈使用 SO 库时需要注意的一些问题。或许这些问题对于经常和 SO 库开发打交道的同学来说已经是老生长谈,但是既然要讨论一整个动态加载系列,我想还是有必要说说使用 SO 库时的一些问题。

在项目里使用 SO 库非常简单,在 加载 SD 卡中的 SO 库 中也有谈到,只需要把需要用到的 SO 库拷贝进 jniLibs (或者 Eclipse 项目里面的 libs) 中,然后在 JAVA 代码中调用 System.loadLibrary ("xxx") 加载对应的 SO 库,就可以使用 JNI 语句调用 SO 库里面的 Native 方法了。

但是有同学注意到了,SO 库文件可以随便改文件名,却不能任意修改文件夹路径,而是 "armeabi"、"armeabi-v7a"、"x86" 等文件夹名有着严格的要求,这些文件夹名有什么意义么?

阅读全文

如何加载 SD 卡中的 so 库

Android 中 JNI 的使用其实就包含了动态加载,APP 运行时动态加载 .so 库并通过 JNI 调用其封装好的方法。后者一般是使用 NDK 工具从 C/C++ 代码编译而成,运行在 Native 层,效率会比执行在虚拟机的 Java 代码高很多,所以 Android 中经常通过动态加载 .so 库来完成一些对性能比较有需求的工作(比如 T9 搜索、或者 Bitmap 的解码、图片高斯模糊处理等)。此外,由于 .so 库是由 C++ 编译而来的,只能被反编译成汇编代码,相比 Smali 更难被破解,因此 .so 库也可以被用于安全领域。

与我们常说的基于 ClassLoader 的动态加载不同,SO 库的加载是使用 System 类的(由此可见对 SO 库的支持也是 Android 的基础功能),所以这里这是作为补充说明。不过,如果使用 ClassLoader 加载 SD 卡里插件 APK,而插件 APK 里面包含有 SO 库,这就涉及到了对插件 APK 里的 SO 库的加载,所以我们也要知道如何加载 SD 卡里面的 SO 库。

阅读全文

海淘 Filco 忍者 87 青轴键盘

机械键盘这种东西就像 SSD 硬盘一样,一旦用上了就回不去。
想我这种穷惯了的人,一直以来都是用着买 PC 送的双飞燕或者大白鲨键鼠套,从来就不会想着花大价钱买一个键盘。第一买键盘大概是我高二的时候,那时候买电脑送的键盘都用烂了,就琢磨着买一个新的,之后周末在我生活的小城市(潮州)的市区逛了一个下午,愣是没有决定买哪一款,最后还挑着最便宜的买了一款。
上大学的时候,我就想着自己居然选了计算机专业,就得给自己买个好点的键盘,所以那时候买了学校数码店最贵的微软套装,不过马上就后悔了,因为微软的键盘印了大量的中文数字,对我这个喜欢简洁的人来说实在难以接受,而且,比同行贵了一大截的微软键盘居然有按键冲突问题,所以这时候开始我更加决心 "键盘能用就行了,没必要买贵的"。
直到后来开始工作了,我见识到公司研发机的 SSD 硬盘的好处,所以开始给自己入手 SSD。SSD 让我意识到了生产工具对于提高工作效率的作用,所以我开始把目光放到键盘上。

阅读全文

Android 动态加载技术的类型

现在网络上有许多关于动态加载的介绍的文章,谈及的关键词汇有动态加载、插件化、热部署、热修复等,对于一些刚接触这方面开发技术的人来说,可能容易混淆。
虽然我在动态加载系列的文章中或多或少有谈到这些概念的区别,但是我觉得认识这些区别对于使用动态加载技术还是挺重要的,所以特别开这个新的文章进行分析。

阅读全文

Learning in Android

3 年 Android 程序设计的自我吐槽。
春节期间,因为使用 VPN 梯子的姿势不对,导致 Chrome 的 Google 书签和 xMarks 书签发生了冲突,所以有一些重要的书签可能丢失了,我需要整理一下。看了一边满屏的技术教程,顿时产生了颇多的思绪。
Okay,来看看都有哪些书签

阅读全文

有没有必要阅读 Android 源码

或许对于许多 Android 开发者来说,所谓的 Android 工程师的工作 "不过就是用 XML 实现设计师的美术图,用 JSON 解析服务器的数据,再把数据显示到界面上" 就好了,源码什么的,看也好不看也罢,反正应用层的开发用不上,再加上现在优秀的轮子越来越多,拿来主义泛滥,能用就是,反正老板也不关心是不是你自己写的,用我现在老大的话来说,阅读源码似乎只是一种 "锦上添花" 的事,有自然好,没有也罢。
那么,作为 Android 开发者的自我修养,到底有没有必要阅读 AOSP 以及其他开源项目的源码呢?

阅读全文

ClassLoader 的工作机制

早期使用过 Eclipse 等 Java 编写的软件的同学可能比较熟悉,Eclipse 可以加载许多第三方的插件(或者叫扩展),这就是动态加载。这些插件大多是一些 Jar 包,而使用插件其实就是动态加载 Jar 包里的 Class 进行工作。这其实非常好理解,Java 代码都是写在 Class 里面的,程序运行在虚拟机上时,虚拟机需要把需要的 Class 加载进来才能创建实例对象并工作,而完成这一个加载工作的角色就是 ClassLoader。

阅读全文

1 2 3 45 6

AltStyle によって変換されたページ (->オリジナル) /