在编译android如何来回切换JDK

原生android 4.4.4 (KitKat)开始使用Java 7,但现在芯片厂商的codebase用的还是Java 6,需要来回切换,纠结吧~

先说一下原生android KitKat,参照android developer官网,安装openjdk即可:

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

openjdk会直接安装到/usr/bin/目录下

➜  ~T  which javac
/usr/bin/javac
➜  ~T  javac -version           
javac 1.7.0_55

如果要切回Java 6,可以通过修改环境变量,我的java 6是直接在oracle官网<link>下载,放入了~/bin/目录里,因此单独把设置环境变量的脚本独立出来

➜  ~  cat ~/bin/set_java_1.6 
export JAVA_HOME=~/bin/jdk1.6.0_45
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME
➜  ~  source ~/bin/set_java_1.6 
➜  ~  which javac
/home/caohong/bin/jdk1.6.0_45/bin/javac
➜  ~  javac -version
javac 1.6.0_45

搞定。


更优雅的,参考<OSX setjdk>, 写一个执行脚本

#!/bin/bash
function setjdk {
    #local vmdir=/System/Library/Frameworks/JavaVM.framework/Versions
    #修改成自己的jdk所在的目录,并且要把目录名从jdk1.6.0_45改成jdk/1.6, 执行起来:setjdk 1.6
    local vmdir=~/bin/caohong/bin/jdk/
    local ver=${1?Usage: setjdk <version>}
 
    [ -d $vmdir/$ver ] || {
    echo Unknown JDK version: $ver
    return 1
    }
 
    echo -n "Setting this terminal's JDK to $ver ... "
 
    export JAVA_HOME=$vmdir/$ver/Home
    PATH=$(echo $PATH | tr ':' '\n' | grep -v $vmdir | tr '\n' ':')
    export PATH=$JAVA_HOME/bin:$PATH
    
    java -version
}

这个参考脚本里,PATH目录保证了不会因为执行多次`setjdk`而把jdk目录累加起来(tr的作用是把冒号换成换行符,以便用grep -v把原来设置的jdk删除)

另外,MAC系统里,从10.5之后,java目录可以通过 /usr/libexec/java_home获得(详细参考<apple developer: how to get jdk on max osx>): 

➜  ~  /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home

对于<OSX setjdk>里稍微有点过时,因为10.5之前,java的目录都是放在/System/Library/Frameworks/JavaVM.framework/Versions 目录下,default值是通过软链接来指定的:

➜  ~  ls -l /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
lrwxr-xr-x  1 root  wheel  59  6 30 19:21 /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents


你可能感兴趣的:(java,jdk,android,shell)