Ошибка компиляции Android в Maven - PullRequest
2 голосов
/ 14 декабря 2011

Я создаю приложение для Android и создал собственный вид для анимации. Я создал пользовательское представление, расширяя ImageView и реализуя ValueAnimator.AnimatorUpdateListener.

Когда я пытаюсь скомпилировать это с помощью maven, происходит сбой с "пакетом android.animation не существует" Тем не менее, при построении в Intellij Idea он строится нормально. После сборки в Idea можно даже успешно запустить mvn install. Успешная сборка работает нормально в эмуляторе, но не на моем физическом устройстве. При попытке запустить его на устройстве я получаю:

Failed resolving Lno/derp/myapp/view/MyAnimatedView; interface 7 'Landroid/animation/ValueAnimator$AnimatorUpdateListener;'
Link of class 'Lno/derp/myapp//view/MyAnimatedView;' failed
Could not find class 'no/derp/myapp/view/MyAnimatedView', referenced from method no/derp/myapp.MainActivity.onCreate

, а затем

java.lang.ClassNotFoundException: no/derp/myapp.MyAnimatedView in loader dalvik.system.PathClassLoader[/data/app/no/derp/myapp-2.apk]

pom.xml:

 <packaging>apk</packaging>
 <name>My App</name>

 <dependencies>
   <dependency>
     <groupId>com.google.android</groupId>
     <artifactId>android</artifactId>
     <version>2.3.3</version>
     <scope>provided</scope>
   </dependency>
 </dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>com.jayway.maven.plugins.android.generation2</groupId>
      <artifactId>android-maven-plugin</artifactId>
      <version>3.0.0</version> 
      <configuration>
        <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
        <assetsDirectory>${project.basedir}/assets</assetsDirectory>
        <resourceDirectory>${project.basedir}/resources</resourceDirectory>
      <undeployBeforeDeploy>true</undeployBeforeDeploy>
    </configuration>
    <extensions>true</extensions>
  </plugin>

  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <target>1.6</target>
        <source>1.6</source>
    </configuration>
  </plugin>
</plugins>

Я использую последнюю версию SDK. Класс, импортирующий упомянутый пакет, не компилируется, это не просто представление. То же самое происходит с версией 2.8.3 android-maven-plugin (или maven-android-plugin, как его называли)

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 14 декабря 2011

android.animation доступен начиная с уровня API 11, вам нужно установить свою зависимость в вашем pom.xml, чтобы использовать 3.0+ для компиляции кода в командной строке.

Причиной, по которой он работает в Intellij, является то, что в IDE обычно используются default.properties для разрешения SDK, используемого для компиляции исходного кода. Я полагаю, вы используете правильный уровень API в ваших default.properties.

Надеюсь, эта помощь.

1 голос
/ 15 декабря 2011

Кажется, вам не хватает конфигурации плагина для уровня платформы / API. Проверьте, например, helloflashlight пример официальных образцов.

В вашем случае вам придется добавить

                <sdk>
                    <!-- platform or api level (api level 4 = platform 1.6)-->
                    <platform>4</platform>
                </sdk>

с уровнем API 9 или 10 или что вам нужно. См. API уровень документации .

И чтобы плагин компиляции имел правильный API, у вас должна быть правильная зависимость от Android. Возможно, вам придется использовать мой Maven Android SDK Deployer , чтобы вставить зависимость в локальный репозиторий

0 голосов
/ 15 декабря 2011

Maven Android SDK Deployer помог, так как я получил

  <dependency>
      <groupId>android</groupId>
      <artifactId>android</artifactId>
      <version>4.0_r2</version>
      <scope>provided</scope>
  </dependency>

Но приложение по-прежнему падает на моем телефоне, так же, как и раньше, "Link of .. fail".Что естественно, так как у меня, вероятно, Android 2.X на моем телефоне.Причина, по которой Idea компилируется, заключается в том, что Android SDK настроен вручную, я думаю, что он не использует плагин maven.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...