2011-12-14 4 views
2

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

Когда я пытаюсь скомпилировать это с помощью 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, как его называли)

Любые идеи?

ответ

2

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

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

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

1

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

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

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

с уровнем апи 9 или 10, или все, что вам нужно. См. API level doc.

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

+0

.. Не имеет значения. У меня установлен только уровень api 14, поэтому, если я не вставил платформу 14, он жалуется, что у меня нет правильного SDK. Установка его на 14 не влияет. – Marvin

+0

Запуск Maven Android SDK Deployer сделал, тем не менее, эффект, установив android: android: 4.0_r2 в мой репозиторий. – Marvin

0

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

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

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

+0

хорошо. конечно, если вы не используете API 11 или выше на своем телефоне, вы не можете использовать API из него, если не используете отражение. Это не имеет никакого отношения к сборке. –

Смежные вопросы