发现已经不止两次踩坑踩在在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
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
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