1. 介绍
搭建了一个Linux环境的系统,需要将部分应用通过Linux进行编译打包。我们如果要执行这个需求,前提就是Linux环境下配置好Android SDK。之后,再通过Gradle等进行构造就可以了。而这里只是介绍下如何安装SDK环境和NDK环境。
我的测试环境是:Linux ubuntu
不管是什么环境,整体的过程是一样的。我这里介绍一下安装过程吧。
android SDK 和NDK都是免安装的,不管介绍多少总的来说都是三个步骤:
- 下载SDK和NDK。(很多安装工具都是在这个步骤上做的集成。没办法,很多时候链接访问超时,版本更新等等)
- 解压SDK和NDK。
- 配置环境变量。
2. 安装 SDK
通过 wget https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip
命令下当前最新的Linux环境工具。
如果想下载最新的:https://developer.android.google.cn/studio 可以通过官网页面滑动到页面底部。找到Command-line tools only
当我们下载完毕zip 压缩包之后,可以进行解压操作:
代码语言:javascript复制root@zy-pc:~/android# jar xvf commandlinetools-linux-8512546_latest.zip
因为我是将该压缩文件下载到了android目录下的。(PS: 这个目录可以通过mkdir
命令进行创建)
这个时候我们就得到了这样的文件:
代码语言:javascript复制root@zy-pc:~/android# ls
cmdline-tools commandlinetools-linux-8512546_latest.zip
其中cmdline-tools文件夹中的目录结构为:
代码语言:javascript复制root@zy-pc:~/android/cmdline-tools# ll
total 128
drwxr-xr-x 1 root root 512 Oct 26 14:53 ./
drwxr-xr-x 1 root root 512 Oct 26 14:59 ../
-rw-r--r-- 1 root root 109836 Jan 1 2010 NOTICE.txt
drwxr-xr-x 1 root root 512 Oct 26 14:53 bin/
drwxr-xr-x 1 root root 512 Oct 26 14:53 lib/
-rw-r--r-- 1 root root 84 Jan 1 2010 source.properties
我们要执行sdk下载的命令在cmdline-tools/bin
目录下。
root@zy-pc:~/android/cmdline-tools/bin# ll
total 56
drwxr-xr-x 1 root root 512 Oct 26 14:53 ./
drwxr-xr-x 1 root root 512 Oct 26 14:53 ../
-rw-r--r-- 1 root root 5321 Jan 1 2010 apkanalyzer
-rw-r--r-- 1 root root 5312 Jan 1 2010 avdmanager
-rw-r--r-- 1 root root 5280 Jan 1 2010 lint
-rw-r--r-- 1 root root 5253 Jan 1 2010 profgen
-rw-r--r-- 1 root root 5253 Jan 1 2010 retrace
-rw-r--r-- 1 root root 5309 Jan 1 2010 screenshot2
-rw-r--r-- 1 root root 5319 Jan 1 2010 sdkmanager
我们如果切换到该目录下,直接执行sh sdkmanager --list
会出现错误:
root@zy-pc:~/android/cmdline-tools/bin# sh sdkmanager --list
Error: Could not determine SDK root.
Error: Either specify it explicitly with --sdk_root= or move this package into its expected location: <sdk>/cmdline-tools/latest/
root@zy-pc:~/android/cmdline-tools/bin#
问题很简单, 我们如果要使用该命令的话,要么我们主动将工具的目录结构调整为
<SDK>/cmdline-tools/latest/
目录结构。 要么就是我们在该命令后面添加上 --sdk_root=路径
。如下所示:
root@zy-pc:~/android/cmdline-tools/bin# sh sdkmanager --list --sdk_root=/root/android/sdk/
Warning: Observed package id 'cmdline-tools;7.0' in inconsistent location '/root/android/sdk/tools' (Expected '/root/android/sdk/cmdline-tools/7.0')
Warning: Observed package id 'cmdline-tools;7.0' in inconsistent location '/root/android/sdk/tools' (Expected '/root/android/sdk/cmdline-tools/7.0')
Installed packages:=====================] 100% Computing updates...
Path | Version | Description | Location
------- | ------- | ------- | -------
cmdline-tools;7.0 | 7.0.0 | Android SDK Tools 7 | tools
Available Packages:
Path
...后面的内容我就省略了
解释一下上面的这些配置的意思。
我们下载的cmdline-tools只是一个sdk的下载工具。Android 的各个系统版本的sdk很庞大。所以我们先获取的是一个下载工具。之后再根据实际需求下载不同版本的SDK。
而这个下载工具就需要我们配置一个sdk的文件下载目录。给了我们两个选择:
- 通过--sdk_root 命令指定一下Android SDK的下载路径。(繁琐,每次执行命令都需要配置这个选项)
- 将cmdlise-tools工具调整目录: SDK下载目录/cmdline-tools/latest/ 目录结构。
我们当然是选择第二种模式了。这样简单很多。
调整方法为1.创建一个android/sdk/cmdline-tools/latest的文件目录:
代码语言:javascript复制root@zy-pc:~/android/sdk# mkdir cmdline-tools
root@zy-pc:~/android/sdk# ls
cmdline-tools
root@zy-pc:~/android/sdk# cd cmdline-tools/
root@zy-pc:~/android/sdk/cmdline-tools# mkdir latest
root@zy-pc:~/android/sdk/cmdline-tools# ls
latest
然后就是将我们解压得到的cmdline-tools目录中的数据全部移动到latest文件夹中。
代码语言:javascript复制root@zy-pc:~/android# cp -r cmdline-tools/* sdk/cmdline-tools/latest/
root@zy-pc:~/android#
之后我们再执行相关命令就可以正常下载了:
代码语言:javascript复制root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager --list
[=======================================] 100% Computing updates...
Available Packages:
Path
有些Linux版本 是通过 ./sdkmanager 执行命令的。 我们只需要将sh sdkmanager 换为:./sdkmanager 就可以了。后面的内容是一样的。
之后就是根据要求下载SDK了。
例如:安装build-tools
工具: 根据需求,下载不同的版本哦
root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager "build-tools;33.0.0" "build-tools;31.0.0" "build-tools;30.0.3" "build-tools;30.0.2" "build-tools;30.0.0" "build-tools;29.0.3" "build-tools;29.0.2" "build-tools;29.0.1" "build-tools;29.0.0"
"build-tools;28.0.3" "build-tools;28.0.2" "build-tools;27.0.3"
安装:cmake:
代码语言:javascript复制root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager "cmake;3.6.4111459" "cmake;3.18.1" "cmake;3.10.2.4988404" "cmake;3.22.1"
安装platforms:
代码语言:javascript复制root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager "platforms;android-21" "platforms;android-22" "platforms;android-23" "platforms;android-24" "platforms;android-25" "platforms;android-26" "platforms;android-27" "platforms;android-28" "platforms;android-29" "platforms;android-30" "platforms;android-31" "platforms;android-32" "platforms;android-33"
安装platform-tools 工具:
代码语言:javascript复制root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager "platform-tools"
执行命令后,在输出的 Accept 确认中,输入 y 就会进行安装了。
代码语言:javascript复制Accept? (y/N): y
2.1 配置到环境变量(可选)
将我们的sdk的路径配置到环境变量中。这个根据大家的实际需求配置。并不一定要配置到环境变量中。
代码语言:javascript复制root@zy-pc:~/android# export ANDROID_HOME=/root/android/sdk
root@zy-pc:~/android# export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$PATH
root@zy-pc:~/android# source /etc/profile
2.2 卸载 SDK
我们如果安装的工具太多了。或者platforms版本过时我们想卸载。可以通过: --uninstall
进行卸载操作。
root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager --uninstall "platform-tools"
3. 安装NDK
有两种安装方式,一种是通过sdkmanager工具进行安装:
代码语言:javascript复制root@zy-pc:~/android/sdk/cmdline-tools/latest/bin# sh sdkmanager "ndk;16.1.4479499"
"ndk;17.2.4988734" "ndk;18.1.5063045" "ndk;19.2.5345600" "ndk;20.0.5594570" "ndk;20.1.5948944" "ndk;21.0.6113669" "ndk;21.1.6352462" "ndk;21.2.6472646" "ndk;21.3.6528147" "ndk;21.4.7075529" "ndk;22.0.7026061" "ndk;22.1.7171670" "ndk;23.0.7599858" "ndk;23.1.7779620" "ndk;23.2.8568313" "ndk;24.0.8215888" "ndk;25.0.8775105" "ndk;25.1.8937393"
上面是列出了,可以通过sdkmanager进行下载的全部ndk工具。大家基于
该文件下载完毕后,会在android/sdk/ndk
文件夹中出现。 和我们通过其他手段下载的ndk 是一样的。
然后配置以下环境变量就可以了:
代码语言:javascript复制root@zy-pc:~/android# export NDK_HOME=/root/android/sdk/ndk/21.4.7075529
root@zy-pc:~/android# export PATH=$PATH:$NDK_HOME
root@zy-pc:~/android# source /etc/profile
就可以通过ndk命令进行操作了。