You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docker run -it -v "D:\dockerbuilds:/andriod/app/build" soapgu/androiddockertest:v1.0 ./gradlew assembleDebug
这里把打包apk的输出目录映射到本地
PS D:\WorkSpace\PlayPen\DockerBuildApk> docker run -it -v "D:\dockerbuilds:/andriod/app/build" soapgu/androiddockertest:v1.0 ./gradlew assembleDebug
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
Checking the license for package Android SDK Build-Tools 30.0.2 in /opt/app/android-sdk/licenses
License for package Android SDK Build-Tools 30.0.2 accepted.
Preparing "Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)".
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" ready.
Installing Android SDK Build-Tools 30.0.2 in /opt/app/android-sdk/build-tools/30.0.2
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" complete.
"Install Android SDK Build-Tools 30.0.2 (revision: 30.0.2)" finished.
Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/7.0.2/userguide/command_line_interface.html#sec:command_line_warnings
BUILD SUCCESSFUL in 1m 58s
27 actionable tasks: 27 executed
终于成功了,可以看到apk了
验证APK
连上安卓手机
PS D:\dockerbuilds\outputs\apk\debug> adb devices
List of devices attached
47DDU20A10008976 device
PS D:\dockerbuilds\outputs\apk\debug> adb install .\app-debug.apk
Performing Streamed Install
Success
引言
接着上回未完的博客,一定要把革命进行到底。上回Android SDK没有安装造成编译apk失败。所以首先要把工作内容回到Android SDK的安装。
Linux环境安装Android SDK
我们已经太习惯了Android Studio这个IDE了,现在技术已经逐渐成熟,是时候脱离拐杖自己走路了。
sdkmanager说明
Command line tools only 下载页 一定要选Linux
基本思路确定好。改写Dockerfile
脚本解析
编译Docker Image
用编译完成的Docker Image来编译APK
这里把打包apk的输出目录映射到本地
终于成功了,可以看到apk了
验证APK
连上安卓手机
中间碰到的问题
前面你看到的都是比较流畅的完整流程。实际过程远远没这么顺利,前前后后差不多花了两天时间。一方面我Docker的水平确实是渣渣。
问题一:弄坏PATH环境变量
这个问题一开始就存在了,设了cmdline-tools/bin的PATH,注意PATH是要merge进去的而不是设置进去的。这个结果造成后面所有的Linux命令都不能用了,吐血啊。后来排查好久才发现的问题。一个很愚蠢的低级失误。
问题二:sdkmanager 命令必须要设置sdk_root变量
这条其实比较好找,报错信息也比较清晰,不难对付
问题三:docker里面加了slim前缀究竟有啥用?
这个其实是实践过程中的问题,加了slim的tag好像同比大小小一点。用了之后果然小有小的道理,unzip不能用,如果用slim版本还要自己写脚本装,算了偷个懒还是算了吧。
问题四:似懂非懂的JAVA版本
这个问题也造成我非常多的困扰和主要的消耗时间。本来胜利就在眼前,结果build直接出一个错。深不见底的堆栈里也看不出头绪,是个非常底层的JAVA堆栈报错。搜了一圈资料,有指出是JAVA版本问题。
这是本机的JAVA环境,编译完全没有问题
我原来的环境是 openjdk:11.0.10-jre-buster
再对一下JAVA 的version
OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189) != OpenJDK Runtime Environment 18.9 (build 11.0.10+9)
OpenJDK 64-Bit Server VM (build 11.0.10+0-b96-7249189, mixed mode) != OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9, mixed mode, sharing)
后面两行不同
尝试换到JAVA8,后面两行是一样了,gradle7又不能用了,一定要JAVA11,昏过去。
最后找下老一点的镜像 openjdk:11.0.2-jre-stretch,总算是JAVA11,后面两行一致,编译通过。里面的道道还没摸透。还需要进一步深入。
经验总结
先到这里,其实后面还有很多要完善的细节
The text was updated successfully, but these errors were encountered: