擁有自己的手機軟件工具箱是件非常有意義的事情。就目前國內 Android 的生態(tài)環(huán)境來說,混亂的不能再亂了。由于我們登錄不了官網(wǎng) App 商店,下軟件就只好在國內五花八門的軟件市場下載。由于這些市場的監(jiān)管不力,什么樣的軟件都有,就拿二維碼掃描軟件來說,好多都帶那種狗皮膏藥一樣的廣告插件,真是特別討厭。
在開源世界中有很多優(yōu)秀的軟件,其中 zxing 就是非常好的 Android 掃碼工具軟件。我們可以拿來即用還可以學習內部機制,然后做些定制化個性化。既可以自己享用,又可以跟大家分享。真是不錯。
zxing 在 github:https://github.com/zxing/zxing
zxing-master$ ls
android android-integration AUTHORS CONTRIBUTING.md core javase pom.xml src zxingorg
android-core androidtest CHANGES COPYING glass NOTICE README.md zxing.appspot.com
源碼很多,里面的 pom.xml 告訴我們需要用 maven 編譯??上н@個構建工具我用的并熟練,一切都要摸索著來。
Maven 官網(wǎng):https://maven.apache.org
在ubuntu下的安裝是很簡單的,下載 apache-maven-3.3.1-bin.zip 解壓(unzip)到你喜歡的目錄下如 /opt/apache-maven-3.3.1/ 。并將環(huán)境變量設置好,~/.bashrc 下填入下面內容:
#Maven
export PATH="$PATH:/opt/apache-maven-3.3.1/bin"
export MAVEN_OPTS="-Xms256m -Xmx512m"
前提是你的 Java7環(huán)境已經(jīng)配好。請參考 Android 實戰(zhàn)技巧之八:Ubuntu 下切換 JDK 版本
下面是我的 mvn 環(huán)境:
$ mvn -v
Apache Maven 3.3.1 (cab6659f9874fa96462afef40fcf6bc033d58c1c; 2015-03-14T04:10:27+08:00)
Maven home: /opt/apache-maven-3.3.1
Java version: 1.7.0_71, vendor: Oracle Corporation
Java home: /opt/jdk/jdk1.7.0_71/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-49-generic", arch: "amd64", family: "unix"
對于 zxing 的編譯,我沒有找到相關的文檔,所以都是我這個 maven 新人不斷的摸索,雖然不是特別正規(guī),但是達到我的目的是真的。
先在 zxing 根目錄下執(zhí)行 mvn compile,好家伙,一個勁的下載依賴包,都說這第一次編譯需要下載大量的包,如果我沒有做代理或庫的更改,那么需要漫長的等待。
我晚上跑步將近一個小時,以為回來就編譯好了??墒橇钗掖笫?,雖然包下完了,但是編譯有問題。再次執(zhí)行,這次編譯沒有報錯,但是我搜遍目錄沒有找到 jar 包。這是有問題的,我還是按照自己的節(jié)奏來工作吧。
android 目錄是一個 eclipse 項目,我直接轉換為 AS 工程然后編譯發(fā)現(xiàn)少了好多 zxing 的類。
android-core 下的 pom 是這樣的:
<artifactId>android-core</artifactId>
<version>3.2.1-SNAPSHOT</version>
<packaging>jar</packaging>
沒有其他依賴,直接編譯成 jar。我執(zhí)行 mvn package,漫長的等待后 jar 包編譯出來了。
$ ls android-core/target/
android-core-3.2.1-SNAPSHOT.jar
我引入這個 jar,發(fā)現(xiàn)里面只有一個類 com.google.zxing.client.android.camera.CameraConfigurationUtils
這顯然還不夠。
core 目錄才是重點,同樣 mvn package 再等待,如果中途遇到依賴其他目錄的 jar 就去編譯之。
$ ls core/target/
core-3.2.1-SNAPSHOT.jar
再將其引入 android 工程,編譯成功!