介绍
编译so
库源码,在Linux
环境下要比windows
环境下方便很多。出现问题的几率也少。
如果你不知道如何安装子系统,可以参考我这篇文章。Windows 11 开启 WSL2 运行Linux操作系统-Ubuntu (zinyan.com)
而在采用Linux环境进行编译任何项目的时候,都会需要配置各种开发环境才行。
本篇就是记录我的配置过程,希望能够给大家一个参考。主要是依靠apt命令进行的安装与更新。
sudo apt upgrade
:更新全部安装的软件包。
sudo apt update
: 查看可更新的包,同时它也进行了源链接地址的刷新。
1.安装环境
安装前,建议大家修改apt的源,改为国内镜像源。下载速度将会得到飞速提高。
切换方法可以参考:Ubuntu apt下载源改为阿里云镜像 (zinyan.com)
2. 安装 Git,make,yasm
- Git:用来从github上拉取项目代码。
- make:用来进行makefile编译的工具。
- yasm:用来进行汇编代码编译。FFmpeg的编译需要这个库来编译x86和amd64指令。支持跨平台的库。
zinyan@LAPTOP-141OG4MA:~$ sudo apt-get install git make yasm
例如我的git
已经安装了。后面安装了make
和yasm
。
2.1 apt-cache policy xxx 检测是否安装
安装完毕后可以通过命令查询是否安装,例如:apt-cache policy git
查询git
是否安装
还有相同的 apt-cache policy yasm
,apt-cache policy make
。
如果没有安装的话,就会返回 :Unable to locate package xxxx。
3. 安装 jdk,ndk,sdk
-
jdk: java 的jdk环境。毕竟ijkplayer部分代码是依赖java的。
-
ndk: 编译Android so库需要的环境。
-
sdk:Android SDK 环境。编译Android 库所需要的环境。
这三个环境,你明白了才能进行安装。
3.1 安装jdk
例如,我们打算安装java jdk-8 版本。那么可以通过apt-cache search jdk-8
查询一下当前源仓库中的安装包。
我们如果想安装jdk 11
那么: apt-cache search jdk-11
也可以查询一下。
我们根据左侧的名称,进行下载指定的jdk进行安装。
zinyan@LAPTOP-141OG4MA:~$ sudo apt-get install openjdk-8-jdk
效果图如下:
或者我们通过 java -version 也可以看到我们的jdk 版本等信息。
使用apt安装的方式可以不用我们主动配置环境变量。如果你采用手动下载并解压等操作。需要配置环境变量告诉系统你的jdk是在哪个地方。
3.2 安装ndk
搜索ndk
得到google-android-ndk-installer
安装库。
那么我们就安装该库: sudo apt-get install google-android-ndk-installer
然后会出现下面的界面。
然后让我们选择三个镜像下载地址:分别是google 官网地址:dl.google.com, 微软的镜像地址, qq 。通常情况下,建议大家选择第一个。
然后开始进行安装。我安装的版本是: https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip 这个文件的大小为655MB
的压缩包。
如果不想用这种模式的话,我们也可以主动 直接通过wget
命令+ HTTP地址进行安装。
官网的NDK下载链接:NDK 下载 | Android NDK | Android Developers (google.cn)
我开始选择了微软的镜像地址,结果一直连接超时 没办法,只能杀进程。重新安装google-android-ndk-installer 并选择了dl.google.com
安装完毕后,通过ndk-build -v
指令检测。(该指令需要ndk路径已经配置到环境变量之中了)
如果正常,就会出现版本信息等信息。如果不会就会出现:ndk-build: command not found
。
说明ndk 的路径并没有被配置上去。根据安装逻辑最后输出的结果
我在usr/lib
文件夹中找到了android-ndk
文件。
说明ndk
已经下载并解压成功了。我们主动配置一下环境变量就可以了。
zinyan@LAPTOP-141OG4MA:~$ sudo vim /etc/profile
在打开的profile
文件中的最后添加下:
export NDK_HOME=/var/lib/android-ndk //此处为你的ndk安装路径
export PATH=$PATH:$NDK_HOME
效果图如下:
然后保存文档,并关闭vim
编辑模式。
然后为了让配置生效,我们需要 执行:source /etc/profile
然后该配置就生效了
我们再通过: ndk-build -v 就能看到ndk的相关信息了。效果如下图。
source /etc/profile 只会在当前窗口中生效。你如果启动了多个ubuntu窗口,那么其他窗口可能ndk-build -v 命令还是不能生效的。
你如果要都生效,需要reboot 重启整个系统才能生效。
3.3 安装 sdk
ndk
安装完毕后,下一步就是安装sdk
了Android SDK
。简单的安装方法就是通过安装Android Studio
实现安装。而Linux
版本Android Studio
可以在Android
官网中查询到最新的版本信息。
Download Android Studio and SDK tools | Android Developers (google.cn)
而我们当前只是需要sdk
,并不需要Android Studio
。那么我们可以继续滑动页面得到sdk
工具的下载链接。
sudo wget https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip?hl=zh_cn
进行下载Android SDK
。
文件大小约114M左右。然后我们可以通过mv
命令对下载的文件夹对象进行重命名。
sudo mv commandlinetools-linux-8092744_latest.zip\?hl\=zh_cn androidtoolsss
例如我将下载的文件命名为了 androidtoolsss
。
使用 sudo jar xvf androidtoolsss
进行解压缩。
你就将得到cmdline-tools文件夹了,里面有android SDK 库的管理工具。
如果你不给命令添加sudo
,可能会出现下面的错误:
java.io.IOException: cmdline-tools/bin : could not create directory
at sun.tools.jar.Main.extractFile(Main.java:1064)
at sun.tools.jar.Main.extract(Main.java:981)
at sun.tools.jar.Main.run(Main.java:311)
at sun.tools.jar.Main.main(Main.java:1288)
那么大概率是因为你没有权限在该文件目录下创建文件夹权限。
我们解压完毕后,如果要清理掉压缩包文件对象。可以使用 :sudo rm -f xxx
删除该文件
3.3.1 调整目录结构
我们下载解压的目录结构为cmdline-tools/bin
。
而实际目录结构需要改为:cmdline-tools/tools/bin
也就是说将cmdline-tools目录下的全部内容移动到tools文件夹里面去。效果图如下:
3.3.2 配置环境变量
参考ndk
的配置方式,将sdk路径配置到/etc/profile
之中。
export ANDROID_SDK=/usr/lib/cmdline-tools
export PATH=${PATH}:$ANDROID_SDK/tools;$ANDROID_SDK/platform-tools
为了让配置生效,我们需要 执行:source /etc/profile
然后该配置就生效了。
下面开始启动sdkmanager
工具进行下载操作。
我们在Linux中启动的所有指令都要添加个sh
才能操作,否则提示sdkmanager
找不到。
例如:zinyan@LAPTOP-141OG4MA:/usr/lib/cmdline-tools/tools/bin# sh sdkmanager --list
才会有下面的命令输出结果
更多的关于sdkManager 的指令可以参考:sdkmanager | Android 开发者 | Android Developers (google.cn)
到这里所有的环境配置就结束了。
按照上面的方法下载后,我们的platform存储在了/usr/lib
目录下。如果sdk各种插件下载完毕后,都放在该目录下就有点混乱了。
可以在下载路径后面添加指定的存储路径。
示例:
然后下载的platform-tools就在我们指定的文件目录下了。
我们如果要卸载不用在意存储路径可以直接卸载:
root@LAPTOP-141OG4MA:/usr/lib/cmdline-tools/tools/bin# sh sdkmanager --uninstall "platform-tools"
到这里,算是将整个环境都给配置好了。
配置完毕后,我们可以通过adb 等指令检测sdk是否安装完毕。
其他
如果你安装过程中出现了一些问题,以下指令可能会给你一点帮助吧。
ps -aux //列出所有的进程
sudo kill [pid] //删除指定的pid 的进程
sudo apt-get remove [package] --purge //删除包,包括配置文件等
sudo apt-get install [package] --reinstall //重新安装包
sudo apt-get -f install //修复安装
评论区