标签:
android
sdk
internal
adt
it
|
|
上午发布的文章《自行修改android.jar使其包含隐藏api》(
点击阅读),按照文章所述替换了 android.jar 后,会发现依然无法使用
com.android.internal 包下的资源,这是由于 ADT 插件作了限制,如果您使用 Intellj IDEA
作为开发环境,那么可以路过这篇文章,IDEA 并不会对 internal 包作任何限制,本篇仅针对使用 eclipse + ADT
方式开发的工程师。
先讲一下原理,ADT 插件针对 internal
包的限制在 AndroidClasspathContainerInitializer.class 文件内,该文件位于 ADT
插件包的 com.android.ide.eclipse.adt.internal.project 空间内
该文件指出了要被过滤的包,即 com.android.internal,仅需要将该字符串替换即可正常使用 internal
包
同样的,我也写了一个脚本来完成这项工作
#!/bin/sh
ADT=$1
OUT=$2
cp $ADT adt.zip
unzip -o adt.zip
com/android/ide/eclipse/adt/internal/project/AndroidClasspathContainerInit
在开发中时常会遇到要用到android隐藏api的情况,通常的做法是通过反射去调用,但是反射带来性能上的影响,代码也不够直观,我更偏爱直接使用那些api。
于是这就是本文的开始,自己改造一个android.jar,使其包含隐藏api
其实步骤很简单,因为android系统内带的framework.jar已经包含了隐藏api,只需将其抽取并放到android.jar内就好了,整理一下就是:
1) 从指定版本的rom内获取到framework.jar
2) 解压framework.jar和android sdk内的android.jar
3) 将framework.jar解出来的东西拷到android.jar解出来的东西内,进行覆盖
4) 重新打包
5) 用新的android.jar替换原先的
方便起见,写了一个脚本来完成以上工作,其中解framework.jar用到dex2jar工具,请自行下载并配置环境变量
#!/bin/sh
DEX=$1
AJAR=$2
OUT=$3
d2j-dex2jar.sh $DEX -o framework-dex.jar
mv framework-dex.jar framework-dex.zip
unzip -d framework-d
标签:
macpro
linux
ubuntu
keyboard
fn
it
|
|
在Macbook Pro上装好Ubuntu13.04后, FN键默认是不生效的, 这对于我日常的操作产生了很大的影响,
按F1~F12极不方便, 而且还不能在图形化界面下直接改, 于是查了一下文档, 发现操作其实很简单, 如下几个命令就能搞定了
$ echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode
$ echo options hid_apple fnmode=2 | sudo tee -a /etc/mod
(2013-06-30 19:51)
标签:
android
actionbar
style
reflect
it
|
|
ActionBar的确提供了许多方便,不过要改起来也挺伤脑筋,不熟悉样式的肯定改不了(废话),熟悉的也会发现一些坑,这次不幸踩到一个。起因不说了,发现的问题是,当我用以下代码修改了ActionButton样式后,却发现返回按钮和标题栏的样式未发生变化。
以上代码的预期效果如图1所示,但是却同时发生了图2所示的情况,Home按钮并没有被改过来

(图1)
(2013-05-21 11:18)
标签:
android
studio
google
io
it
|
|
Android Studio 中,有一些概念是和 eclipse 不同的,从 eclipse 迁移至 Android Studio
会有很多上手不顺的情况发生,当然在明确了概念的不同之后,还是容易可以切换过来。
|
eclipse |
Android Studio |
工作区 |
workspace |
project |
项目 |
project |
module |
引用 |
preference |
module dependency |
看这个表就很清楚了,其实并不是 Android Studio 无法建立多个项目,而是应该建立 module
以下是建立一个标准的 Android Application
安装了 Ubuntu 13.04 后,发现 appmenu 已经很好用了,无需再将其删除。
但是在安装了 lazarus (from source) 后,它一直 crash,经查是 appmenu
的问题,当然官方源内的 lazarus 也并不是完全正常的。
所以解决方案么,把 lazarus 换成最新版,并且想办法让它在运行时不加载 appmenu。
具体操作过程如下
1. 先卸载lazarus相关的全部文件,包括fpc
$ sudo apt-get purge lazarus fpc
fpc-source
有可能无法删除干净,这个时候使用以下命令再进行判断
$ sudo dpkg -l | grep lazarus (同样也可判 fpc /
fp)
若是找到,使用 dpkg -r 或 dpkg -P 全部删除
2. 删除原lazarus的配置文件
在 /usr/lib,/usr/share 内找 lazarus 开头的目录并删除之
在 /etc 目录找 lazarus 开头的目录并删除之,找 fpc
开头的文件删除之
在 $HOME 目录找 .lazarus 目录并删除之
(2013-01-05 15:33)
在Android下,并不能通过onKeyDown这样的事件来截获Home键的消息,其原因在Android的文档中已经明确的说过了

翻译就不做了,总之就是App无法截获Home键的事件(曾经有高人在2.3以下的系统中,使用偏门方法来截获Home,但是在4.0以后已经失效了,故在此不提)
那么,如何才能得到Home键按下的消息呢,办法还是有的,在此需要说明的是,由于Home键的特殊性,它的逻辑在framework内被处理,因此无法做到截获/屏蔽Home键,而只能得到它的消息,但是在得到消息后,如果要把已经退到后台的app再启动起来,也并非不能(界面会闪一下)
以下代码用于捕捉到Home键的按下消息:

(2012-02-05 12:53)
标签:
android
go
coding
programming
|
|
Go 语言的高效一直让我想将之用于 Android 的开发上,很多事情,单纯从代码角度考虑,用 Go
来写会方便很多。这篇文章只是一个实例,没啥实质性的意思,只是开发时的一些记录。
同样的参考官方网站所述,我们可以将 Go 环境编译为支持 arm 的,使用该环境编译出的程序,也可运行于
Android。
那么先编译 Go 本身,让它可以编译 arm 下的应用,修改一下 .bashrc 文件
在最后加上以下条目
(2012-01-23 10:05)
众所周知的,在后台跑太多的进程,会大幅增加耗电量。而目前却有很多软件,杀也杀不掉,一直跑在后台,但是你却又因为种种原因不愿意卸载它,只想禁用它的某些功能。
这个时候,就需要有一个工具可以对所有的服务及广播进行管理,禁止服务自动启动,或是禁止广播接收器收消息,这样你的后台就会变得非常干净,同时也更省电了。另外,禁用一些不安全的服务,也可以避免程序让手机偷偷的上传下载数据,尽可能的减低风险。
软件使用方法:
这款软件的使用方法非常简单,启动软件后,会自动扫描手机内所有安装的软件,并指出它所拥的组件数量和启用禁用情况
假设我们现在需要禁用 iReader 内的两个服务,那么即点击 iReader
项,程序会列出该程序所拥有的组件明细
(2011-11-27 14:01)
标签:
android
hosts
root
it
|
|
Continue fucking the GFW! Go!
NSHosts 的前身是我写的 HtcHosts,原本是一款用于修改 Hosts,以使访问 Google
等服务更稳定的工具,HtcHosts 采用内置一套 IP 列表的方式,为每一位用户都固定的更换
Hosts,但是它面临了很大的挑战,也就是 Hosts 容易失效的问题,到目前为止,HtcHosts 再也不可使用了,因为里面的 IP
已全部失效。取而代之的工具,就是这一款 NSHosts。
NSHosts 采用了全新的 IP 获取方式,不再从一套内置的文件内获取,而是动态的从网络上进行获取。若是 IP
失效,只需要再次搜索,添加,并且清除已失效的 IP 就可以了,操作非常方便。用户也可以在一个简单友好的界面里,对 Hosts
进行编辑,如果你是高手,也可以用纯文本模式自行修改,当然这并不推荐一般用户使用。
软件界面截图: