Плагин maven для Android: нет пути для Android SDK.

Я использую версию maven-android-plugin 3.3.2. Когда я пытаюсь создать свой проект андроида, у меня есть следующее исключение:

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.

Можете ли вы мне помочь?

Ответ 1

Похоже, в то время как env var доступен в оболочке, которую вы запускаете, она недоступна в оболочке Maven.

Независимо от этого, вместо того, чтобы обойти его, лучше создать файл настроек с набором свойств. Минимальный будет выглядеть так (сбрасывая верхнюю часть моей головы, так как у меня нет доступных файлов настроек):

<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 в WindowPreferences...MavenUser Settings.

Ответ 2

Из документации

Вы можете настроить его в разделе конфигурации android-maven-plugin в файле pom.xml с помощью <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

В качестве третьего варианта вы можете установить SDK из командной строки, передав аргумент Maven:

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

Ответ 3

Да, я решил эту проблему. Добавляя файл settings.xml в папку ~/.m2

<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-загрузки и откройте файл pom.xml и проверьте следующую строку

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

16 - установленный или не установленный уровень sdk

Ответ 4

Самый простой способ - установить export ANDROID_HOME=pathToAndroidSdk прямо из целевого развертывания репозитория.

Переменная будет установлена ​​только для текущей оболочки и всех процессов, запущенных из текущей оболочки.