maven android插件:找不到Android SDK路径

问题描述 投票:11回答:4

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

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

但是环境变量ANDROID_HOME设置为android sdk路径。

你能帮我么?

java android maven m2eclipse
4个回答
25
投票

听起来,虽然env var在您运行的shell上可用,但它在Maven运行的shell上不可用。

无论如何,最好使用属性集创建a settings file,而不是解决它。最小的一个看起来像这样(写下我的头顶,因为我现在没有我的设置文件):

<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中设置它。


4
投票

从文档中

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

解决方案1

我已经定义了一个名为ANDROID_SDK(而不是ANDROID_HOME)的Android SDK系统变量,并以这种方式在我的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

作为第三个选项,您可以从命令行设置SDK,将参数传递给Maven:

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启动。

© www.soinside.com 2019 - 2024. All rights reserved.