我使用android的新命令行工具是因为android的旧sdk-tools存储库不再可用了。所以我更改了gitlab-ci来加载CommandLinTools。但当我尝试运行它时,却出现以下错误:
Warning: Could not create settings
java.lang.IllegalArgumentException
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.<init>(SdkManagerCliSettings.java:428)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:152)
at com.android.sdklib.tool.sdkmanager.SdkManagerCliSettings.createSettings(SdkManagerCliSettings.java:134)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:57)
at com.android.sdklib.tool.sdkmanager.SdkManagerCli.main(SdkManagerCli.java:48)
我已经试过用手执行那些命令,但我得到了同样的错误。此外,如果运行sdkmanager--version
,也会出现相同的错误。我的gitlab-ci看起来像:
image: openjdk:9-jdk
variables:
ANDROID_COMPILE_SDK: "29"
ANDROID_BUILD_TOOLS: "29.0.3"
ANDROID_SDK_TOOLS: "6200805"
before_script:
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
- unzip -d android-sdk-linux android-sdk.zip
- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" "platforms;android-${ANDROID_COMPILE_SDK}" >/dev/null
#- echo y | android-sdk-linux/tools/bin/sdkmanager "platform-tools" >/dev/null
- echo y | android-sdk-linux/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}" >/dev/null
- export ANDROID_HOME=$PWD/android-sdk-linux
- export PATH=$PATH:$PWD/android-sdk-linux/platform-tools/
- chmod +x ./gradlew
# temporarily disable checking for EPIPE error and use yes to accept all licenses
- set +o pipefail
- yes | android-sdk-linux/tools/bin/sdkmanager --licenses
- set -o pipefail
stages:
- build
- test
lintDebug:
stage: build
script:
- ./gradlew -Pci --console=plain :app:lintDebug -PbuildDir=lint
assembleDebug:
stage: build
script:
- ./gradlew assembleDebug
artifacts:
paths:
- app/build/outputs/
debugTests:
stage: test
script:
- ./gradlew -Pci --console=plain :app:testDebug
不是为每次执行命令传递参数--sdk_root
,而是让我们深入探讨真正的原因。
从Android SDK命令行工具1.0.0(6200805)开始,与Android SDK 26.1.1(4333796)相反,Tools
目录层次结构发生了更改。以前它被放置在android_home
中(这是不推荐的,我们将在本段的其余部分使用术语android_sdk_root
),现在它仍然被命名为tools
(解压缩下载的commandlinetools zip文件后您将得到的唯一东西),但不同的是,您必须将它单独放置在一个名为cmdline-tools
的目录中。名称cmdline-tools
来自其包名,您可以从listing packages命令sdkmanager-list
,其输出包括cmdline-tools;1.0 1.0 Android SDK命令行工具
。
在cmdline-tools
目录中包装tools
目录将使其工作,并帮助您摆脱讨厌的--sdk_root
参数。但其他部分呢?
好吧,你要改变的就是这些。让我再解释一下。
SDKManager
位于cmdline-tools/tools/bin
中,您最好在path
环境变量cmdline-tools
不应设置为android_sdk_root
。因为以后更新Android SDK或安装更多软件包时,其他软件包将放在android_sdk_root
下,而不放在cmdline-tools
下。android_sdk_root
目录结构如下所示,它由几个子目录组成:build-tools
,cmdline-tools
,emulator
,licens
,patcher
,platform-tools
,platforms
,platforms
,platforms
,您可以很容易地指出build-tools
和cmdline-tools
是同级,都位于父级android_sdk_root
中。
让我简单地重述一下:
- 设置您首选的
android_sdk_root
(与前面一样) - 下载commandlinetools zip文件并将其解压缩到名为
cmdline-tools
的目录中,该目录位于android_sdk_root
内 - 将目录
$android_sdk_root/cmdline-tools/tools/bin
追加到环境变量path
中,以便系统知道在哪里可以找到sdkmanager
!!更新!!
自build
6858069
(Android SDK命令行工具3.0)之后,该行为再次发生了更改:
- 解压缩包后,您将得到的最顶部目录是
cmdline-tools
。 - 将解压缩目录从
cmdline-tools
重命名为tools
,并将其置于$android_sdk_root/cmdline-tools
下,因此现在它应该像:$android_sdk_root/cmdline-tools/tools
。在它的内部,您应该有:notice.txt bin lib source.properties
。实际上,根据官方的命令行工具文档,树结构应该是android_sdk/cmdline-tools/version/bin/
,但我已经检查过,使用version
或Tools
在这里没有区别。 - 对于您的环境变量
path
,我建议您这样设置:path=$path:$android_sdk_root/cmdline-tools/latest/bin:$android_sdk_root/cmdline-tools/tools/bin
,因为以后更新后,您将得到最新的sdkmanager
放在$android_sdk_root/cmdline-tools/latest/bin
下,把它放在前面会使它具有更高的优先级。
我试图在我的Ubuntu上安装androidSDK,但当我试图在tools/bin/sdkmanager文件夹上运行SDK管理器时,我得到以下消息: 我的Ubuntu是最近安装的,除了Java8和Android Studio之外什么都没有。 我的SDK文件夹是默认的~/android/SDK。
工欲善其事,必先利其器。学好SQLite的命令行工具,对于我们学习SQLite本身而言是非常非常有帮助的。最基本的一条就是,它让我们学习SQLite的过程更加轻松愉快。言归正传吧,在SQLite的官方下载网站,提供了支持多个平台的命令行工具,使用该工具我们可以完成大多数常用的SQLite操作,就像sqlplus之于Oracle。以下列表给出了该工具的内置命令: 命令名 命令说明 .help 列出所
命令行工具 meteor help 获取 meteor 命令行使用帮助。运行 meteor help 会列出meteor所有命令。运行meteor help <command>会打印出关于meteor <command>的详细帮助。 meteor create <name> 创建一个名为<name>的子目录,并在里面新建一个Meteor应用。 met
web3j的完全jar文件分发包对每一次发布都提供命令行工具。命令行允许你从终端(terminal)使用web3j的一些功能: 这些工具提供: 钱包创建 钱包密码管理 从一个钱包转移到另一个钱包以太币 solidity智能合约封装包的产生 命令行工具可以从github项目存储库的releases页面下载zipfile/tarball包,或者通过源代码自己编译获得;OS X用户也可以通过Homebr
命令行工具 web3j的jar包为每一个版本都提供命令行工具。命令行工具允许你直接通过一些命令使用web3j的一些功能: 钱包创建 钱包密码管理 资金从钱包转移到另一个 solidity编写的智能合同功能打包 请参阅文档以获得命令行相关的进一步的信息。
命令行是程序员的好伙伴 作为一名优秀的程序员,熟练的命令行操作也是必不可少的。在『Laravel 实战教程』系列课程中,我们的很多操作都会使用到命令行,如: Git 操作; 虚拟机管理; 部署到线上等。 工欲善其事、必先利其器,命令行工具的选择也尤其重要。这里为了课程讲解的一致性,也为了避免读者在学习中犯不必要的错误,我们为各个平台挑选了专属的命令行工具,请大家配合使用。 Mac 用户 Mac O