Maven Android插件:找不到Android SDK路径

11
我使用的是版本为3.3.2的maven-android-plugin。当我尝试构建我的android项目时,出现以下异常:

org.apache.maven.plugin.MojoExecutionException:找不到Android SDK路径。您可以在POM文件的插件配置部分中使用<sdk><path>...</path></sdk><properties><android.sdk.path>...</android.sdk.path></properties>进行配置,或者在命令行中使用-Dandroid.sdk.path=... 或通过设置环境变量ANDROID_HOME来进行配置。

然而,环境变量ANDROID_HOME已经设置为android sdk路径。

请问可以帮我解决这个问题吗?


Windows还是Linux?如果在命令行中键入“echo %ANDROID_HOME%”,会发生什么?这是否指向有效的SDK路径? - gunar
我在 Linux 上工作。当我执行 echo ANDROID_HOME 时,会输出 SDK 安装路径。 - Naja
如果你运行adbaapt命令会发生什么?操作系统能够解析它们吗? - gunar
运行 adb 给我 Android Debug Bridge 版本 1.0.31,但 aapt 是未知命令。 - Naja
然后,您需要将构建工具的路径添加到系统PATH中。Maven失败是因为它无法解析aaptaidl和其他使用的工具。 - gunar
显示剩余2条评论
4个回答

26

听起来,虽然环境变量可以在你运行的shell上使用,但在Maven运行的shell上不可用。

无论如何,最好是创建一个设置文件并设置属性,而不是绕过它。 一个最小的设置文件看起来像这样(我随口写出,因为现在我没有我的设置文件):

<settings>
  <profiles>
    <profile>
        <id>android-settings</id>
        <properties>
            <android.sdk.path>/path/to/android/sdk</android.sdk.path>
        </properties>
    </profile>
  </profiles>
  <activeProfiles>
        <activeProfile>android-settings</activeProfile>
  </activeProfiles>
</settings>

将其放入您的.m2文件夹中,或通过Eclipse在Window->Preferences...->Maven->User Settings中设置。


6

从文档中得知

您可以在pom.xml文件的android-maven-plugin配置部分中使用<sdk><path>...</path></sdk><properties><android.sdk.path>...</android.sdk.path></properties>进行配置,也可以通过命令行使用-Dandroid.sdk.path=...或设置环境变量ANDROID_HOME来配置。

解决方案1

我定义了一个名为ANDROID_SDK的Android SDK系统变量(而不是ANDROID_HOME),并在我的pom.xml中引用它:

  <groupId>...</groupId>
  <artifactId>...</artifactId>
  <version>...</version>
  <packaging>apk</packaging>
  <name>...</name>
  <description>...</description>

  <properties>
    <android.sdk.path>${env.ANDROID_SDK}</android.sdk.path>
    ...
  </properties>

解决方案2

作为另一种选择,您也可以在android-maven-plugin部分中进行配置:

<plugin>
<extensions>true</extensions>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>${android-maven-plugin.version}</version>
<configuration>
  <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
  <assetsDirectory>${project.basedir}/assets</assetsDirectory>
  <resourceDirectory>${project.basedir}/res</resourceDirectory>
  <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
  <sdk>
    <android.sdk.path>${env.ANDROID_SDK}</android.sdk.path>
    <platform>16</platform>
  </sdk>
  <undeployBeforeDeploy>true</undeployBeforeDeploy>
</configuration>
</plugin>

解决方案3

第三种选择是通过在Maven中传递参数来从命令行设置SDK:

mvn clean install -Dandroid.sdk.path="C:\\Program Files (x86)\\Android\\android-sdk"


2

是的,我解决了这个问题。通过在 ~/.m2 文件夹中添加 settings.xml 文件。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <profiles>
        <profile>
            <id>android</id>
            <properties>
                <android.sdk.path>
                  ANDROID SDK PATH
                </android.sdk.path>
            </properties>
        </profile>
    </profiles>
    <activeProfiles> <!--make the profile active all the time -->
        <activeProfile>android</activeProfile>
    </activeProfiles> 
</settings>

打开你的android-bootstrap-master应用程序,然后打开pom.xml文件并检查以下行:

<sdk>
    <platform>16</platform>
</sdk>

16是当前已安装的SDK级别还是未安装?


1
最简单的方法是在目标部署存储库中设置export ANDROID_HOME=pathToAndroidSdk。该变量仅为当前shell和从当前shell启动的所有进程设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接