发现已经不止两次踩坑踩在在Linux上的Android编译上了,网上也没多少相关文献,这里特做记录。

背景

期望在Linux机器上使用Android gradlew命令进行编译。
看似就一行代码./gradlew assembledebug。然而实际上会遇到诸多报错问题。梳理了以下问题和解决方案,可以对症下药。

目的

执行./gradlew clean assembledebug时,快乐BUILD SUCCESS

问题

1. jvm需求内存过大

报错内容

1
os::commit_memory(0x00000005c0000000, 5726797824, 0) failed; error='Cannot allocate memory' (errno=12)

解决方案

1
2
gradle.properties 修改org.gradle.jvmargs,降低为1536m
org.gradle.jvmargs=-Xms1536m -Xmx1536m

一般情况可写4096m(4G)

2.内网maven无法下载

报错内容

1
maven下载失败

解决方案

1
2
3
4
5
6
7
gradle.properties 增加相关代理
参考:https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy

e.g gradle.properties文件中添加
## Server使用代理请求Maven库
systemProp.http.proxyHost=xxx.com
systemProp.http.proxyPort=1234

3.Linux机器中无SDK

报错内容

1
空SDK文件夹/SDK文件夹不存在

解决方案

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
1.下载SDKManager
    https://developer.android.com/studio#downloads
    下载Command line tools only的linux版本
2.在自建位置解压
    解压后文件需要在名为cmdline-tools的文件夹下,不然使用会报错
    如放在/home/test/Android/cmdline-tools中
    link: https://stackoverflow.com/questions/60440509/android-command-line-tools-sdkmanager-always-shows-warning-could-not-create-se
3.找到仓库对应sdk版本
    在Android文件中搜索ANDROID_BUILD_SDK_VERSION关键字
4.下载
    ./bin/sdkmanager install "XXX" --sdk_root="/data/android-sdk"

4.机器/home/user/多出.gradle文件夹

问题内容

在用户根目录多了个.gradle文件夹

配置方案

该文件夹为gradle默认缓存位置
更改位置的方式:
到Android仓库根目录中,gradle.properties文件增加一行
systemProp.gradle.user.home=XXX
XXX写新位置。

5.直接使用./gradle打包,就是报错

问题内容

别人的机器上打包不报错,就你报错

解决方案

Java1.8,大家都爱它
不用1.8,崩溃齐刷刷
请确认自己使用的java版本是否为1.8
java -version