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
Mac是苹果自1984年起以“Macintosh”开始的个人消费型计算机,如:iMac、Mac mini、Macbook air、Macbook pro、Mac pro等计算机。使用独立的Mac os系统,最新的OS X系列基于NeXT系统开发,不支持兼容。是一套完备而独立的生态系统。
在Mac OSX上如果想使用OpenCV,可以通过自己手动编译源码的方式,但比较繁琐。
推荐使用Homebrew来进行安装,步骤很简单,如下:
$sudo brew tap homebrew/science $sudo brew install opencv
等待几分钟,即可安装成功。
该方法在 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文件,然后修改教程中的一条命令,然后再执行那些命令。
用一个二进制编辑器(比如说“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查看一下修改后的文件,和原文件相比,有啥不同。
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 ,安装替换即可解决问题。
在命令行下使用
$ 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 的版本了。
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 上使用 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 directoryPATH
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 existsSYS_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)
使用MACOS发现在Android开发环境完整的情况下,接入小米,SAMSUNG,HTC,ZTE等手机都可以自动识别,如果暂时不能识别,只需要在 adb_usb.ini 中设置之后也可以识别,并可以在DDMS中查看LOGCAT,唯独华为的手机不可识别。USB开发调试也设置了,但是在Windows下却可以识别,为什么呢?别急,有工程模式:
在拨号界面输入:
*#*#2846579#*#*
找到->"ProjectMenu"->“后台设置”->“USB端口设置” 改成 "GOOGLE模式"。
注意,此时手机提示要重启,但是不要重启。重启之后会还原为正常模式的。
如果还是不能识别,则切换成其他模式,反复切换一下,最后设置成"GOOGLE模式" ,或者重新插拔一下数据线,就可以识别到了。
工作中很多时候需要编辑修改16进制的文件,在Windows下面常用UltraEdit来编辑,切换到Mac下面后,找了很多,最后发现一个免费的好用软件 Hex Fiend
一直想在Mac
下面找一个免费的好用的图片圈点,截图,截屏软件,增加点注释啊,画个箭头啊什么简单的功能,只要好用即可,找了半天,总算找到一个好用的软件Skitch
。 在Mac
商店中搜索Skitch
,然后下载即可。现在是免费的了,被Evernote
收购之后就免费了,蛮好用的,强烈推荐。