一、写在前面
GraphHopper 是一个快速且高效的路径规划引擎,它默认使用OpenStreetMap和GTFS数据, 也可以导入其他数据源。它可以用作java库或独立的web服务器,去计算两个或多个点之间的线路的距离,时间,转弯指令和许多道路属性。除了“A-to-B”的路径规划能力之外,它还支持“snap to road”、等时线计算、移动导航等。
graphhopper-ios 是 graphhopper 的oc版本,它使用j2objc将.java源代码转换为Objective-C代码, 以供iOS平台的开发者来使用。该库在成功编译后会生成一个libgraphhopper.a的静态库文件。
接下来介绍该库在终端命令行模式下的编译过程
二、Mac 环境下的编译步骤
2.1 编译前的准备工作
- JDK 8
首先查看你的Mac 系统是否已经安装了JDK,打开终端窗口并输入
java -version,如果没有安装过jdk会提示需要安装。 JDK下载地址: www.oracle.com/java/techno… 先选择MacOS平台 , 再选择架构 x64 or arm64的.dmg文件。 如果不知道本机的Mac支持哪种架构, 可以通过如下命令来查看
uname -a
-
Maven
下载后解压,重名名为
Maven,并放入到资源库/Library/Maven下. 接下来配置Maven的环境变量
(1)打开终端, 输入命令 vim ~/.bash_profile . 打开.bash_profile文件,在文件中添加设置环境变量的语句
export M2_HOME=/Library/Maven
export PATH=$PATH:$M2_HOME/bin
添加完之后执行:wq保存退出
(2) 输入 source ~/.bash_profile 使环境变量生效
(3) 输入mvn -v查看是否安装成功
表示安装成功
- j2objc 首先,到 github 上下载文件。下载地址:github.com/google/j2ob…
下载上图中标记的.zip文件, zip文件是被编译后的,可以直接拿来用。 资源比较大
1.79GB , 下载完成后,备用。
2.2 开始编译
- 第一步:打开命令行, clone项目
git clone https://github.com/graphhopper/graphhopper-ios.git
项目下载完成后,进入并打开该目录
cd graphhopper-ios
open .
重要步骤:
将下载的
j2objc.zip解压, 并将解压后的文件夹重名名为j2objc并将其移动到graphhopper-ios目录下
- 第二步:更新git的子模块
git submodule init
git submodule update
- 第三步: 编译
make class.list
make translate
make
正常编译成功后,会在graphhopper-ios 文件夹下生成一个build 文件夹, 其中就包含已经编译出来的libgraphhopper.a的静态库文件
可以通过命令
lipo - info xxx 来查看库支持的构架
cd build
lipo -info libgraphhopper.a
可以看到该静态库即支持模拟器环境的
x86_64架构, 也支持真机环境下的 arm64架构
三、遇到的问题
3.1 JDK not supported. Please set JAVA_HOME to JDK 1.8 or 11. I need help
开始以为是没有正确配置 JAVA_HOME 的环境变量导致的
打开终端, 先使用如下命令查看Mac上的所有 java版本
/usr/libexec/java_home -V
有时候会返回两种结果
Matching Java Virtual Machines (2):
1.8.181.13 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
1.8.0_281 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home
在.bash_profile 中配置JAVA_HOME 环境变量
export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_281)
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib
完成后记得更新
source ~/.bash_profile
尝试后发现还是报如上错误, 干脆把 '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home' 尝试删除试试。
sudo rm -rf /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
删除后,重新编译还真就不报错了。
参考自: stackoom.com/en/question… github.com/google/j2ob…