Kaede Akatsuki

中二病也要开发 Android

黑苹果初体验 - 富士通 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 标签的指改为该文件夹的名称即可。

动态创建 Activity 模式

还记得我们在代理 Activity 模式里谈到启动插件 APK 里的 Activity 的两个难题吗,由于插件里的 Activity 没在主项目的 Manifest 里面注册,所以无法经历系统 Framework 层级的一系列初始化过程,最终导致获得的 Activity 实例并没有生命周期和无法使用 res 资源。

使用代理 Activity 能够解决这两个问题,但是有一些限制:

  • 实际运行的 Activity 实例其实都是 ProxyActivity,并不是真正想要启动的 Activity;
  • ProxyActivity 只能指定一种 LaunchMode,所以插件里的 Activity 无法自定义 LaunchMode;
  • 不支持静态注册的 BroadcastReceiver;
  • 往往不是所有的 APK 都可作为插件被加载,插件项目需要依赖特定的框架,还有需要遵循一定的 “开发规范”;

特别是最后一个,无法直接把一个普通的 APK 作为插件使用。这个其实也不算是限制,如果我们需要进行插件化开发,我们总希望能够通过一些框架限制和规范插件的行为,在加载插件前就知道插件大概有哪些功能,这样不仅能方便对插件行为的控制,还能在一定程度上确保插件的安全(运行一个完全未知的可执行文件鬼知道它会做些什么)。不过这样做就要求插件必须依赖特定的框架,这对插件是一种侵入式开发,也就是说,开发插件时不能像开发普通 APP 那样自由。

那么有办法避开这些限制,做到完全非侵入式开发吗?比如,通过动态加载框架,不用安装就直接运行《Flappy Bird》的 APK 安装包。这听起来好像是只有获得 ROOT 权限才能做到的事情,要不然随便写个空壳的 APK 加载别人的游戏安装包就直接能运行了。不过,确实有人做到了,通过动态生成 Activity 类的方式。

阅读全文

双屏显示器配合机械键盘食用更佳

我一直计划着打造自己的工作室(工作平台),因为我觉得除了相关姿势扎实以外,优秀的生产工具也是提高办公效率的利器,而且好玩的生产工具还能提高自己工作的积极性,减少咸鱼状态。所以,适当地买一些优质的生产工具犒劳自己,也是我自己为数不多的乐趣。说到开发相关的生产工具,则莫过于大屏显示器和机械键盘了。

阅读全文

代理 Activity 模式

简单模式中,使用 ClassLoader 加载外部的 Dex 或 Apk 文件,可以加载一些本地 APP 不存在的类(或者更新本地已存在的类),从而执行一些新的代码逻辑,但是使用这种方法却不能直接启动插件里的 Activity 等组件,也没办法使用 res 资源,如果不解决这两个问题,则使用插件化的方式开发 Android 业务会非常繁琐。

阅读全文

魔都漫展 ComicCup18 Day1

转眼间来 B 站工作已经有 2 个月了,这是第一天粗来玩,9 号一个人逛 CP18,找基友章鱼的摊位,被安利了一张 CD,现场许多萌妹子,发了不少牢骚(求个妹纸一起吃自助餐、看电影、逛漫展)。

简单的动态加载模式

从这个章节开始,加载 SO 库的问题算是告一段落,现在开始谈及的动态加载,主要是指基于 ClassLoader 的加载方式,这也是这个动态加载系列文章的核心。

Java 程序中,JVM 虚拟机是通过类加载器 ClassLoader 加载 .jar 文件里面的类的。Android 也类似,不过 Android 用的是 Dalvik/ART 虚拟机,不是 JVM,也不能直接加载 .jar 文件,而是加载 .dex 文件。

通过 Android SDK 提供的 DX 工具 把 .jar 文件优化成 .dex 文件,然后 Android 的虚拟机才能加载。注意,有的 Android 应用能直接加载 .jar 文件,那是因为这个 .jar 文件已经经过优化,只不过后缀名没改(其实已经是 .dex 文件)。

如果对 ClassLoader 的工作机制有兴趣,具体过程请参考 动态加载基础 ClassLoader 的工作机制,这里不再赘述。

阅读全文

123456