【android应用】在Linux环境下编译android应用以及碰到的问题

最近在弄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、查看安装命令

  1. 查看命令
    android list sdk --all

    用来查看sdk版本,用于按序列号安装的序列号查询。

  2. 按序列号安装
    android update sdk -u --all --filter 9,50

    小编选择了 “ 9- Android SDK Build-tools, revision 28”和“50- SDK Platform Android 9, API 28, revision 6”

  3. 安装所有包

    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的安装

参考:Ubuntu下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

  1. 命令 
    //官网:https://developer.android.com/studio/index.html
    
    wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip

    Linux环境下直接用wget下载,然后解压。

  2. 配置环境

    跟上面的一样,就不细说了。

  3. 生成licenses
    ./sdkmanager --licenses

    sdkmanager命令在android-sdk-linux/tools/bin/中。

  4. 将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目录)

最后给大家推介一个技术公众号,据说里面有很多大佬。

在这里插入图片描述

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值