コンパイル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公式サイトで直接ダウンロードし、~/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

片付ける.
より優雅に、を参照して、実行スクリプトを書きます.
#!/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 ':' '
' | grep -v $vmdir | tr '
' ':')     export PATH=$JAVA_HOME/bin:$PATH          java -version }

このリファレンススクリプトでは、PATHディレクトリは、複数回の`setjdk`を実行することによってjdkディレクトリを累加しないことを保証しています(trの役割は、grep-vで元のjdkを削除するために、コロンを改行文字に変換することです).
また、MACシステムでは、10.5以降javaディレクトリは/usr/libexec/java_ホーム取得(詳細は): 
➜  ~  /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home

では少し時代遅れですが、javaのディレクトリは10.5以前は/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