項(xiàng)目上線之余潘靖,應(yīng)老板要求轉(zhuǎn)換一個(gè)Java庫到OC中使用穿剖,程序猿總是對新技術(shù)充滿熱情的,匍匐前進(jìn)中卦溢,為免忘記糊余,試驗(yàn)未成,筆錄先行单寂。
必備用品:1.j2objc庫 用于將Java轉(zhuǎn)成OC 將其放在與項(xiàng)目同級目錄下
下載地址:https://github.com/google/j2objc/releases
2.Maven工具 (如無Java環(huán)境贬芥,需先安裝,很簡單宣决,自行百度)用于查詢Java代碼所需的所有直接和間接依賴
下載地址:http://maven.apache.org/download.cgi (紅色標(biāo)注) 下載后 $mvn install 進(jìn)行安裝蘸劈,成功后可$mvn -version 查看maven版本
Xcode配置:
-
Other Linker Flags 設(shè)置為 -ljre_emul
OtherLinkFlags.png -
設(shè)置j2objc庫的路徑,對應(yīng)j2objc庫中相應(yīng)的文件
j2objc_path.png
j2objc.png
其中 User-Defined 是點(diǎn)擊紅色標(biāo)注的?號添加而來 定義了j2objc庫的路徑
- 添加 Java source files 點(diǎn)擊紅色標(biāo)注的?號添加
Javasourcefiles.png
注意:此配置文件中 TestJ2Objc 為當(dāng)前工程名尊沸,切勿完全復(fù)制粘貼
if [ ! -f "${J2OBJC_HOME}/j2objc" ]; then echo "J2OBJC_HOME is not correctly defined, currently set to '${J2OBJC_HOME}'"; exit 1; fi;
"${J2OBJC_HOME}/j2objc" -d ${DERIVED_FILES_DIR} -sourcepath "${PROJECT_DIR}/TestJ2Objc" --no-package-directories -use-arc --prefix org.j2objc=OJ -use-arc --prefix org.j2objc.subpackage1=OJS -g ${INPUT_FILE_PATH};
注意:下方的Output Files 也要添加 (完成此上三步威沫,編譯后即可導(dǎo)入Java類贤惯,快活地使用它了)
其中 --prefix 后面定義了包名的簡寫(OC調(diào)用Java類 類名前面需要加上包名)
-use-arc --prefix org.j2objc=OJ -use-arc --prefix org.j2objc.subpackage1=OJS 定義了兩個(gè)包名,以致可以如下調(diào)用棒掠,否則只能如第一個(gè)箭頭所指 拼寫全稱調(diào)用
紅色箭頭兩行代碼等價(jià)
以上只是能成功使用簡單獨(dú)立的Java文件孵构,若轉(zhuǎn)換大型的Java庫,需要添加很多庫所需的直接和間接依賴,此時(shí)我們先前安裝的Maven就有用武之地了
到對應(yīng)文件夾下 查找目標(biāo)庫的依賴樹
$mvn dependency:tree
此過程中可能會提示某個(gè)包不能解析烟很,例如
其中類似 org.apache.maven:maven-plugin-registry:jar:2.0.6 語句就是指明缺少的依賴包
可以去此倉庫中查詢并下載 : http://search.maven.org/ ( 查詢不到的去github下載)
下載后安裝jar的姿勢:(舉栗)
需要的依賴包信息:org.apache.maven : maven-plugin-registry : jar : 2.0.6
(分別為對應(yīng)的jar包所在路徑颈墅,groupId,artifactId雾袱,version恤筛,類型)
$mvn install:install-file -Dfile=/Users/test/Desktop/Download/maven_need/maven-plugin-registry-2.0.6.jar -DgroupId=org.apache.maven -DartifactId=maven-plugin-registry -Dversion=2.0.6 -Dpackaging=jar
安裝成功后繼續(xù)查詢依賴 $mvn dependency:tree
附上遇見的一些錯(cuò)誤:
編譯生成cling-core-2.1.2-SNAPSHOT.jar
$mvn install -DskipTests=true