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