最近在弄android 应用编译的问题,做一个总结方便以后查阅。
编译命令
请查看小编的另一篇博客:【命令】android编译命令---gradlew命令
一、搭建编译环境
平台:windows 7
ubuntu:ubuntu 18.04
jdk:1.8.0
android sdk:28.0.0
gradle:Gradle 4.4.1
android 工具(sdk、ndk、tools)下载地址:https://www.androiddevtools.cn/
1、Linux 环境下android sdk的安装
我是通过查看这篇文章解决的:Linux -- 安装配置Android SDK
做个总结:
1、下载Android SDK:http://tools.android-studio.org/index.php/sdk/ 我下载的是:android-sdk_r24.4.1-linux.tgz
2、解压Android SDK
tar -zvxf android-sdk_r24.4.1-linux.tgz -C /usr/local/
3、配置环境变量
该博主是配置,在文件/etc/profile末端添加;我是在~/.bashrc文件末尾加的;
export ANDROID_HOME=/usr/local/android-sdk-linux export PATH=$ANDROID_HOME/tools:$PATH
然后生效(具体看配置的是哪个文件);
source /etc/profile 或者 source ~/.bashrc
4、查看安装命令
- 查看命令
android list sdk --all
用来查看sdk版本,用于按序列号安装的序列号查询。
- 按序列号安装
android update sdk -u --all --filter 9,50
小编选择了 “ 9- Android SDK Build-tools, revision 28”和“50- SDK Platform Android 9, API 28, revision 6”
安装所有包
android update sdk --no-ui
这个命令慎用,等待时间较长。
2、安装jdk
sudo apt install openjdk-8-jre-headless
sudo apt-get install openjdk-8-jdk
3、安装gradle
sudo apt install gradle
4、Linux 环境下android NDK的安装
做个总结,基本跟sdk一样就不详细说明了:
1、下载android Ndk(这个版本太低了,可以更换):http://dl.google.com/android/ndk/android-ndk64-r10b-linux-x86_64.tar.bz2
2、解压
sudo tar -vxf android-ndk64-r10b-linux.tar.bz2 -C /usr/local/
3、配置环境
export NDK=/usr/local/android-ndk-r10b export PATH=${PATH}:$NDK
4、验证
ndk-build看看咱们配置环境变量成功没,只要没出command not found就证明环境变量配置成功,如果成功显示如下,
5、将ndk目录下的东西拷贝到sdk目录下ndk-bundle目录
二、搭建环境遇到问题
1、“: /usr/bin/env: "bash\r": 没有那个文件或目录
1.1 log:
1.2 原因:
这主要是因为sh后面多了\r这个字符的原因。在linux终端下,输出\r会什么都不显示,只是把光标移到行首。于是终端虽然输出了/usr/bin/env sh,但是碰到\r后,光标会被移到行首,接着输出了:No such file or directory把前面的覆盖掉了。于是出现了那个莫名其妙的出错信息了
1.3 解决办法:
用vim打开sh脚本文件, 重新设置文件的格式
:set ff 然后回车 再重新设置下文件格式:
:set ff=unix 然后保存退出
:wq! 回车
2、“Remote host closed connection during handshake”
2.1 log
xxx@xxx:~/work/VPSClient$ ./gradlew version
Downloading https://services.gradle.org/distributions/gradle-5.1.1-all.zip
Exception in thread "main" javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:994)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.followRedirect0(HttpURLConnection.java:2735)
at sun.net.www.protocol.http.HttpURLConnection.followRedirect(HttpURLConnection.java:2647)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1830)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
at org.gradle.wrapper.Download.downloadInternal(Download.java:66)
at org.gradle.wrapper.Download.download(Download.java:51)
at org.gradle.wrapper.Install$1.call(Install.java:62)
at org.gradle.wrapper.Install$1.call(Install.java:48)
at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:69)
at org.gradle.wrapper.Install.createDist(Install.java:48)
at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:107)
at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:61)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:505)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)
... 18 more
2.2 原因
jdk1.8.0_162 之上的版本已经将
crypto.policy 默认设置为unlimited
2.3 解决方案
参考:Java加密套件强度限制引起的SSL handshake_failure
只要修改Java\jre\lib\security\java.security文件,修改这一行注释并启用就可以了。
crypto.policy=unlimited
3、“com.android.builder.sdk.LicenceNotAcceptedException:”
3.1 log
3.2 原因
没有获得android的licenses
3.3 解决方案
下载安装sdk-tools
- 命令
//官网:https://developer.android.com/studio/index.html wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip
Linux环境下直接用wget下载,然后解压。
- 配置环境
跟上面的一样,就不细说了。
- 生成licenses
./sdkmanager --licenses
sdkmanager命令在android-sdk-linux/tools/bin/中。
- 将licenses目录拷贝过去
生成的文件在解压目录android-sdk-linux下。
4、“Could not find tools.jar. Please check that /usr/lib/jvm/java-8-openjdk-amd64 contains a valid JDK installation.”
4.1 log
~/work/VPSClient$ ./gradlew assembleRelease
> Task :ijkplayer-java:compileReleaseJavaWithJavac FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':ijkplayer-java:compileReleaseJavaWithJavac'.
> Could not find tools.jar. Please check that /usr/lib/jvm/java-8-openjdk-amd64 contains a valid JDK installation.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.1.1/userguide/command_line_interface.html#sec:command_line_warnings
BUILD FAILED in 1m 18s
21 actionable tasks: 21 executed
4.2 原因
装了jre,也就是只有运行环境,没有编辑工具。
4.3 解决方案
sudo apt-get install openjdk-8-jdk
还有个更简单的方式,推介给大家:Linux命令行安装配置Android SDK
总结一下,配置三个东西就好了:
- 1、sdk(要下载sdk、tools)
- 2、licenses
- 3、ndk(移入sdk的ndk-bundle目录)
最后给大家推介一个技术公众号,据说里面有很多大佬。