Comments

如果你的 App 因为权限原因需要设置 android:sharedUserId="android.uid.system" 那么 IDE 编译出的包通常是无法直接安装的,查看控制台会发现报 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 错误。这是必须的,随随便便一个 App 声明一下就可以和系统用户共享 ID ,岂不乱套了?

解决方法有如下两种:

第一种

如果你 repo sync 了 android 的整个源码,那么可以直接把你的 app 放到 /packages/apps 下面去 mm ,不过要记得在 Android.mk 中增加 LOCAL_CERTIFICATE 属性,这个属性具体有三个值:

系统中所有使用 android.uid.system 作为共享 UID 的 APK ,都会首先在 manifest 节点中增加android:sharedUserId=“android.uid.system”,然后在 Android.mk 中增加 LOCAL_CERTIFICATE := platform。可以参见 Settings 等

系统中所有使用android.uid.shared作为共享 UID 的 APK,都会在 manifest 节点中增加android:sharedUserId=“android.uid.shared”,然后在 Android.mk 中增加 LOCAL_CERTIFICATE := shared。可以参见 Launcher 等

系统中所有使用 android.media 作为共享 UID 的 APK,都会在 manifest 节点中增加android:sharedUserId=“android.media”,然后在 Android.mk 中增加 LOCAL_CERTIFICATE := media。可以参见 Gallery 等。

第二种

当然,毕竟不是每个人都有机会,或者有必要下载整个源码的。 简单地,当你用 IDE 编出 apk 之后,可以去 /build/tools/signapk/ 找到 signapk.jar 文件;再去 /build/target/product/security/ 里找到 platform.pk8platform.x509.pem 这两个文件。把它们连同你的 apk 扔进一个文件夹,然后 cd 到该文件夹下执行 java -jar signapk.jar platform.x509.pem platform.pk8 Origin.apk Signed.apk,得到的 Signed.apk 就可以直接 adb install了。

Comments

今天起正式加入大魅科技。我要感谢这段时间以来组里每个同事给予我的帮助和指导,尤其是帅气的珠海市市长!!

新的环境,机遇和挑战会越来越多,除了加油,没有别的!

Comments

一年后的今天,当我鼓起勇气再一次打开 Android Studio,这 Linux 下华丽的字体渲染再一次把我亮瞎了。

治疗 Linux 下 Android Studio 的字体渲染症,你需要如下几个步骤:

首先,vim 一下 android-studio/bin 下的 studio64.vmoptions 文件(32位系统则对应 studio.vmoptions ),在最后面作如下修改和添加:

1
2
3
-Dawt.useSystemAAFontSettings=on
-Dswing.aatext=true
-Dsun.java2d.xrender=true

然后,安装 macfonts.tar.gz 包中提供的所有字体,这是 Mac 的默认西文字体,逼格尽显:

1
tar zxvf macfonts.tar.gz && sudo cp -r macfonts/ /usr/share/fonts/ && sudo fc-cache -f -v

接着,你需要用 font-forge 处理一下字体的 hint 信息。当然如果你比较懒,是的没错我在压缩包里已经提供好了处理后的字体,你只需要安装一下就好。

最后,打开 Android Studio 的 Settings,“Appearance” 里面的字体选择 “LucidaMac”,Code 的字体选择 “Ubuntu Mono”,或者选择上面一步中你安装的字体。

重启一下 Android Studio ,尽情享受吧!

Comments

Ubuntu 14.04

相信我,Ubuntu 14.04 一定是 Canonical 迄今为止做出的最漂亮的 Ubuntu,当然,也是最事儿逼的。因为它让我两天内很无语地重装了三次。。。

以下这些问题大多数人在安装过时或者安装后一定都会遇到,希望你能在这里找到真正有效的答案。

F&Q

1.如何禁用触控板

如果你在装完 14.04 之后发现你亲爱的触控板开关快捷键不起作用了,请 vim 一下 /etc/modprobe.d/blacklist.conf ,在文件最后加入以下语句,保存,重启即可:

1
blacklist psmouse

2.adb 提示 No such method or directory

此问题是由于 adb 是32位的,你无法直接在 64 位系统上运行。你需要使用如下命令安装这些 library packages:

1
2
3
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

3.android studio 编译时提示 aapt error=2

此问题原因同上,但这次你是需要这几个包:

1
2
sudo apt-get install lib32stdc++6
sudo apt-get install lib32z1

4.VMware 虚拟机启动时提示 Could not open /dev/vmmon:

遇到这个问题,先用手动把你的 VM 服务调起来:

1
/etc/init.d/vmware start

然后把这个服务添加到系统里去跟着开机启动

1
2
cd /etc/init.d/
chkconfig -a vmware

5.有童鞋表示竟然不会配 JDK ,我表示只能默默贡献出我的 .bashrc 了:

1
2
3
4
5
export JAVA_HOME=/opt/java
export ANDROID_HOME=/opt/adt/sdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib::${JRE_HOME}/lib:$CLASSPATH
export PATH=${JAVA_HOME}/bin:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:$PATH

别忘了完事儿之后指定一下系统 java 常见命令的默认版本:

1
2
 sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/java/bin/javac" 1
 sudo update-alternatives --install "/usr/bin/java" "java" "/opt/java/bin/java" 1

6.开机提示”/检查磁盘时发生严重错误“

这个问题基本可以确定为 14.04 最奇葩的一个bug,因为身边也有小伙伴出现了这样的问题。如果你不愿意折腾,可以在它提示的时候按 i 键跳过。如果愿意折腾,可以参考一下这里

Web
Comments

因为预感到接下来的一段时间自己电脑要用 Windows 搞很多东西,所以昨晚回到了 Windows 8.1。然后这个事儿逼的操作系统真的好好地把我的博客艹了一番。。。

说几个注意事项吧,供兄弟们参考。

首先,因为 Octopress 是静态的,所以备份网站就很简单,直接把你网站的文件夹保存下来就好。

然后到了 Windows 下,你需要安装Git,不说了;然后是 Ruby ,Ruby 别装 2.0 的,1.9.2就好,否则会出问题;然后要装 DevKit ,虽然我也不知道为什么 Windows 下要装这货。。。另外,如果你运气不好,可能在下 Bundle 的时候会出问题,这个时候可以把你网站根目录下的 Gemfile 打开,修改一下第一行为 http://ruby.taobao.org/,感谢淘宝!

最后,高潮来了。请千万记住 Windows 这默认的垃圾命令行是 fucking gbk 编码的,而你必须在纯 utf-8 命令行模式下执行 ruby 命令。因此,请千万记得使用 chcp 65001 将命令行切换到 utf-8 模式,否则整个网站是无法生成的。

Windows,呵呵。

Comments

起这个标题可以有一种弄弄的时代感,仿佛只有上个年代那些工厂才会有一本油腻腻的簿册,上面红色印刷着四个大字——《工作日志》。

好吧跑远了。来到大魅科技实习一个星期了,感慨还是有一些的。

首先,来的那天上午刚到哈工大二楼,一眼就看到了蛋哥拿着 macbook 穿梭在人群间。然后在研发助理那报道,东西还没写完就被翻总拉进了会议室认识小伙伴们,看到 timgor 的时候整个人瞬间产生了一股强烈的空间错乱感。。。昔日微博上关注的大神一下子变成了身边的同事,有种说不出来的激动和紧张。。。。接着就是翻总领着小伙伴们大家做自我介绍,于是我又很没出息地汗流了一地,话说珠海这温度跟江苏完全不在一个 level 上啊有木有。组里的小伙伴还是非常给力的,能感受到氛围的和谐,有问题就会互相沟通。Ps,前天才知道原来我们组很多兄弟都有在软件中心上架自己的 app,果然大神都是藏龙卧虎有木有!

然后就是总结一下这一个星期以来的工作。应该说,基于 framework 的 android 开发和平时的开发工作还是有些许不同的,因为不是用的 android SDK ,所以在项目导入后你必须忍着 project 上的红叉去改代码,这一点刚来那几天确实很不适应。问了一下周围的前辈们都说也是从那个阶段过来的,所以也就尝试着去接受吧。

最后还是有必要贴一些技术上的分享了吧。基于 framework 的 android 开发难免要和 android 源码打交道,好后悔当初在学校的时候没有自己 repo sync 过 android 源码,否则现在应该就能更加轻车熟路了吧。贴几个链接,这是我这周以来参考到的:

在这个周围充满各种大牛的大环境里,我得加油了!

Comments

之前写过一篇关于反编译 android 软件的总结,不过那是针对一些第三方应用的。针对系统应用,需要一些“特殊”的办法。

Why odex?

在 android 系统中,所有的系统级软件都被分解成了两个文件,而不是单纯的“apk file”。以图库为例,在 /system/app 下可见 “Gallery2.apk”和“Gallery2.odex” 两个文件。至于为什么要这样分解,下面这段文字可以解释:

In Android file system, applications come in packages with the extension .apk. These application packages, or APKs contain certain .odex files whose supposed function is to save space. These ‘odex’ files are actually collections of parts of an application that are optimized before booting. Doing so speeds up the boot process, as it preloads part of an application. On the other hand, it also makes hacking those applications difficult because a part of the coding has already been extracted to another location before execution.

Let’s hack on!

要想逆向这些系统级应用,你需要如下5步:

  1. 下载 baksmali-2.0.3.jarsmali-2.0.3.jar 两个 jar 包.如果你连他们都搜不到,我相信你暂时还不适合做这行。

  2. 将 /System/framework 文件夹拽到你的本地硬盘。同时拽出你要 reverse 的系统app,比如第一段中说的 “Gallery2.apk”和“Gallery2.odex” 。

  3. OK,你现在拥有2个 jar 文件,1个 apk 文件,1个 odex 文件,1个 /framework 文件夹。Now,在你本地硬盘上新建一个文件夹,把这些东西全部放在一起。然后在终端 cd 到这个目录,执行 java -jar baksmali.jar -d ./system/framework -x “Gallery2.odex

  4. 执行 java -Xmx512M -jar smali.jar out -o classes.dex ,将 第三步中得到的 out 文件夹中的 class 文件编译成 classes.dex

  5. 有了 dex 文件,再用 dex2jar 转换成 jar 文件,拿 JD-GUI 打开就可以查看了。

注意,第3步中的 -d 参数告诉了反编译器 /framework 文件夹的位置,里面有一些系统的核心 jar 包是反编译时需要调用的。这个参数不加,会抛一个 org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/core.odex 的 exception。如果你按部就班照着网上的教程来,呵呵,大部分会卡在这一步。

Good luck! :)

Copyright © 2014 - 2018 - linshen - @ . +