升级到OS X Yosemite后 Android Studio启动崩溃 Symbol not found: _CGContextSetAllowsAcceleration

Mac OS 升到Yosemite后, 打开 Android Studio报

Symbol not found: _CGContextSetAllowsAcceleration   
Referenced from: /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Libraries/libawt.jnilib

解决方法,是重新安装Apple的Java支持:
Apple官网下载或者本站下载

Mac SSD TRIM的终极方案

该方法在 Mac 10.9.1 版本上面有效。

Enable SSD TRIM for Mac, Ultimate Solution. TRIM终极方案 我的Mac机型是Mac mini Late 2012,把硬盘换成了SSD。试了多种打开SSD TRIM的教程,总不能成功,有一次还弄到系统无法启动。今天大盘开始盘整了,于是可以静下心来把那些教程仔细debug一遍,发现了问题所在,成功开启了SSD TRIM。

最重要的先讲:在做这个工作之前,用Time Machine备份机器。

其次是怎么会弄到系统无法启动?原因是在改写IOAHCIBlockStorage这个文件的时候,把权限破坏了。一旦权限不对,系统会显示警告窗口,说无法加载IOAHCIBlockStorage。千万不要忽视这个警告,去重启机器,而是应该先修复权限。最简单最彻底的办法就是使用Disk Utility,选择系统盘,然后Repare Disk Permissions.

为什么有些教程会不起作用呢?这是因为不同的系统版本,如10.8.1、10.8.2,加上不同的机型,特别是新机型,系统文件有可能是不一样的。
如果教程不起作用,那就要先理解这些开启SSD TRIM办法的实质:其实就是把IOAHCIBlockStorage文件中硬盘型号的字符“APPLE SSD”这九个字节抹去,替换成全零字节。但是在整个文件中做全替换也不行,只能替换含义为硬盘型号字符的字节。
就因为各种系统和机型的文件不同,同时又要选择性地做替换,于是出现了不同的教程。这里介绍的终极方案,就是先查看你机器上的IOAHCIBlockStorage文件,然后修改教程中的一条命令,然后再执行那些命令。

ugmbbc_001734902074378

用一个二进制编辑器(比如说“Hex Fiend”)打开

/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage

搜索十六进制“52 6F 74 61 74 69 6F 6E 61 6C 00”,也就是“Rotational”字串加上0结尾。整个文件我就只搜到一个匹配的。查看后面是不是9个字符的“APPLE SSD”,如果是的话,就看“APPLE SSD”接下来的字符是什么。图中是“Time To Ready”,记下这个字串的第一个字符,是“T”,他的十六进制是54。

接下来就修改那些教程中的命令,请看https://gist.github.com/3334193,点击“Download Gist”下载文件,然后双击打开,就会自动解压缩。修改文件enable_trim.sh中的(x00{1,20}x51)中的51为上文的54,修改完就是(x00{1,20}x54),保存文件。解压的这个enable_trim.sh文件是没有执行权限的,那就在控制台运行“chmod 755 enable_trim.sh”,赋予执行权限。

注意,对于由于某墙封锁导致的不能访问github 问题,可以直接复制如下代码来自己生成sh文件

#!/bin/bash
#
# Enable TRIM support for 3rd Party SSDs. Works for Mountain Lion
#
# Source: http://digitaldj.net/2011/07/21/trim-enabler-for-lion/

set -e
set -x

# Back up the file we're patching
sudo cp \
  /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage \
  /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage.original

# Patch the file to enable TRIM support
sudo perl -pi -e 's|(\x52\x6F\x74\x61\x74\x69\x6F\x6E\x61\x6C\x00{1,20})[^\x00]{9}(\x00{1,20}\x51)|$1\x00\x00\x00\x00\x00\x00\x00\x00\x00$2|sg' \
  /System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage

# Force a reboot of the system's kernel extension cache
sudo touch /System/Library/Extensions/

echo "Now reboot!"

在运行“./enable_trim.sh”之前,一定要保证你现在的

/System/Library/Extensions/IOAHCIFamily.kext/Contents/PlugIns/IOAHCIBlockStorage.kext/Contents/MacOS/IOAHCIBlockStorage

文件一定是未经修改的原系统文件。执行完毕后,系统如果没有弹出什么提示框,那就万事大吉了。有兴趣的话,你还可以用Hex Fiend查看一下修改后的文件,和原文件相比,有啥不同。

ugmbbc_0016571229804857
手工重启机器后,应该就是成功了。
ugmbbc_0017201152901000

参考连接 http://www.cnbeta.com/articles/219752.htm

Mac Gradle 编译报告Failure initializing default system SSL context

Mac 10.9 版本下使用Gradle 编译 Android 项目,报告错误

Failure initializing default system SSL context

使用 -debug 参数,得到的详细输出如下

2:34:15.273 [ERROR] [org.gradle.BuildExceptionReporter]     at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
22:34:15.278 [ERROR] [org.gradle.BuildExceptionReporter]     at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
22:34:15.279 [ERROR] [org.gradle.BuildExceptionReporter]     at org.gradle.launcher.GradleMain.main(GradleMain.java:26)
22:34:15.281 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.io.FileNotFoundException: /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/security/cacerts (No such file or directory)
22:34:15.284 [ERROR] [org.gradle.BuildExceptionReporter]     at java.io.FileInputStream.open(Native Method)
22:34:15.285 [ERROR] [org.gradle.BuildExceptionReporter]     at java.io.FileInputStream.<init>(FileInputStream.java:106)
22:34:15.286 [ERROR] [org.gradle.BuildExceptionReporter]     at org.apache.http.conn.ssl.SSLSocketFactory.createSystemSSLContext(SSLSocketFactory.java:299)
22:34:15.288 [ERROR] [org.gradle.BuildExceptionReporter]     at org.apache.http.conn.ssl.SSLSocketFactory.createSystemSSLContext(SSLSocketFactory.java:366)
22:34:15.289 [ERROR] [org.gradle.BuildExceptionReporter]     ... 147 more

可以看到,异常信息为

22:34:15.281 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: java.io.FileNotFoundException: /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/security/cacerts (No such file or directory)

到具体的目录下面去看,这个文件果然是不存在的,有些版本链接到了一个不存在的目录,这种情况一般是经历过系统升级,往往会造成这个现象,另外,就是系统安装的Java 是Apple 提供的 Java 版本,而不是 Orcale 官网下载的独立版本。

解决方法是可以到Orcale 官网下载最新版本的 Java ,安装替换即可解决问题。

使用 Homebrew 安装指定版本的软件

在命令行下使用

$ brew install FORMULANAME

就可以安装 FORMULANAME 对应的工具,它会处理好依赖关系,非常方便。默认情况下,安装最新版本。但是现在在使用 Gradle 的时候,最新版本的 Gradle 是1.10,但是编译Android 的项目失败,只能降级成 1.9 版本的才行,解决方法如下

1.查看 brew 支持哪些版本的 gradle

$ sudo brew versions gradle
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
1.10     git checkout 2b10422 Library/Formula/gradle.rb
1.9      git checkout 5bab5e9 Library/Formula/gradle.rb
1.8      git checkout 9214e60 Library/Formula/gradle.rb
1.7      git checkout f826cc9 Library/Formula/gradle.rb
1.6      git checkout fff7c0b Library/Formula/gradle.rb
1.5      git checkout 57931e0 Library/Formula/gradle.rb
1.4      git checkout 0b7303a Library/Formula/gradle.rb
1.3      git checkout c259bda Library/Formula/gradle.rb
1.2      git checkout 9b7d294 Library/Formula/gradle.rb
1.1      git checkout 7941972 Library/Formula/gradle.rb
1.0      git checkout dff67fb Library/Formula/gradle.rb
1.0-rc-3 git checkout 5f9e348 Library/Formula/gradle.rb
1.0-rc-2 git checkout f72e33f Library/Formula/gradle.rb
1.0-rc-1 git checkout e2438cf Library/Formula/gradle.rb
1.0-milestone-9 git checkout c27c667 Library/Formula/gradle.rb
1.0-milestone-8a git checkout 69eb948 Library/Formula/gradle.rb
1.0-milestone-8 git checkout 34da975 Library/Formula/gradle.rb
1.0-milestone-7 git checkout 6a8c437 Library/Formula/gradle.rb
1.0-milestone-6 git checkout dae625d Library/Formula/gradle.rb
1.0-milestone-5 git checkout baff305 Library/Formula/gradle.rb
1.0-milestone-3 git checkout d9f2e06 Library/Formula/gradle.rb
1.0-milestone-4 git checkout 4b1230c Library/Formula/gradle.rb
1.0-milestone-2 git checkout 6801464 Library/Formula/gradle.rb
1.0-milestone-1 git checkout 0476235 Library/Formula/gradle.rb
0.9.2    git checkout 38b9338 Library/Formula/gradle.rb
0.9.1    git checkout f986d7d Library/Formula/gradle.rb
0.9      git checkout 45e09d7 Library/Formula/gradle.rb
0.8      git checkout e6f608f Library/Formula/gradle.rb

可以看到,支持 1.9 版本的。

2. 进入 brew 所在的git仓库

$ cd `brew --prefix`

3.复制粘贴刚才 brew versions gradle 命令的提示,我们需要1.9 版本的,因此执行

$ git checkout 5bab5e9 Library/Formula/gradle.rb

此时,本地仓库中的gradle 就被替换成了 1.9 的链接地址信息。

4. 安装

$ sudo brew install gradle
==> Downloading http://services.gradle.org/distributions/gradle-1.9-bin.zip

可以看到输出的信息已经是 1.9 的版本了。

Java: Finding/Setting JDK/$JAVA_HOME on Mac OS X

As long as I’ve been using a Mac I always understood that if you needed to set $JAVA_HOME for any program.

On my machine this points to the 1.6 JDK:

$ls -alh `whereis java`
lrwxr-xr-x  1 root  wheel    74B 10 24 16:19 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

This was a bit surprising to me since I’ve actually got Java 7 installed on the machine as well so I’d assumed the symlink would have been changed:

$ java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

Andres and I were looking at something around this yesterday and wanted to set $JAVA_HOME to the location of the 1.7 JDK on the system if it had been installed.

We eventually came across the following article which explains that you can use the /usr/libexec/java_homecommand line tool to do this.

For example, if we want to find where the 1.7 JDK is we could run the following:

$ /usr/libexec/java_home -v 1.7
/Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home

And if we want 1.6 the following does the trick:

$ /usr/libexec/java_home -v 1.6
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

We can also list all the JVMs installed on the machine:

$ /usr/libexec/java_home  -V
Matching Java Virtual Machines (2):
    1.6.0_35-b10-428, x86_64:	"Java SE 6"	/Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home
    1.6.0_35-b10-428, i386:	"Java SE 6"	/Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home

Mac OS X 10.9 Android NDK r9c 编译 FFTW 3.3.3

在Mac OS X 10.9 上使用 NDK  r9c 编译 FFTW 3.3.3

1.下载FFTW源代码

2.建立一个Android 工程,并且添加 NDK 支持

3.解压缩FFTW的源代码到刚刚建立的Android 目录下面 文件夹名字为 fftw-3.3.3

4.建立编译脚本 build.sh 并在命令行下执行

#!/bin/sh
# build.sh
# Compiles fftw3 for Android
# Make sure you have NDK_ROOT defined in .bashrc or .bash_profile

INSTALL_DIR="`pwd`/jni/fftw3"
SRC_DIR="`pwd`/fftw-3.3.3"

cd $SRC_DIR

export
PATH="$NDK_ROOT/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/:$PATH"
export SYS_ROOT="$NDK_ROOT/platforms/android-8/arch-arm/"
export CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT"
export LD="arm-linux-androideabi-ld"
export AR="arm-linux-androideabi-ar"
export RANLIB="arm-linux-androideabi-ranlib"
export STRIP="arm-linux-androideabi-strip"

mkdir -p $INSTALL_DIR
./configure --host=arm-eabi  --prefix=$INSTALL_DIR LIBS="-lc -lgcc" --enable-float

make
make install

exit 0
  • INSTALL_DIR tells make to install the compiled library in our project's jni directory
  • PATH tells make to look for our tool chain in the NDK directory. Note that you might have to change this value - explore your NDK directory to make sure that the path exists
  • SYS_ROOT tells make where to look for system libraries and header files
  • ./configure --host=arm-eabi  tells make that we are cross-compiling a ARM architecture.

5.修改Android.mk 文件

# jni/Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := fftw3

LOCAL_SRC_FILES := fftw3/lib/libfftw3.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/fftw3/include

include $(PREBUILT_STATIC_LIBRARY)

华为Android手机在MAC系统下ADB识别

使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在DDMS中查看LOGCAT,唯独华为的手机不可识别。USB开发调试也设置了,但是在Windows下却可以识别,为什么呢?别急,有工程模式:

在拨号界面输入:

*#*#2846579#*#*

找到->"ProjectMenu"->“后台设置”->“USB端口设置” 改成 "GOOGLE模式"

注意,此时手机提示要重启,但是不要重启。重启之后会还原为正常模式的。

如果还是不能识别,则切换成其他模式,反复切换一下,最后设置成"GOOGLE模式" ,或者重新插拔一下数据线,就可以识别到了。

Mac图片圈点软件Skitch

一直想在Mac下面找一个免费的好用的图片圈点,截图,截屏软件,增加点注释啊,画个箭头啊什么简单的功能,只要好用即可,找了半天,总算找到一个好用的软件Skitch。 在Mac商店中搜索Skitch ,然后下载即可。现在是免费的了,被Evernote收购之后就免费了,蛮好用的,强烈推荐。