使用Maven和ADT的自定义Android库

时间:2014-09-26 08:22:45

标签: android eclipse maven adt m2eclipse

我是Maven的新手,我试图在我的Android项目中使用它。 我有ADT,我已经为Eclipse安装了m2e插件 右键单击,我已经在Maven项目中转换了项目,并且我已经用Maven替换了(几乎)所有jar库文件。
现在我正在尝试运行我的项目,它使用自定义库项目(也使用Maven),但是我每次更改pom时都会得到一个新错误。

这是我图书馆的pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.group.id</groupId>
<artifactId>com.my.artifact.id</artifactId>
<version>0.1</version>


<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>4.0.0-rc.1</version>
            <configuration>
                <sdk>
                    <path>${env.ANDROID_HOME}</path>
                    <platform>10</platform>
                </sdk>
                <deleteConflictingFiles>true</deleteConflictingFiles>
            </configuration>
            <extensions>true</extensions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
        </plugin>
    </plugins>
</build>

<dependencies>
    [All my dependencies in Maven]
</dependencies>

这是我项目的pom文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.project.groupid</groupId>
<artifactId>com.my.project.artifactid</artifactId>
<version>0.4</version>
<packaging>apk</packaging>

<dependencies>
    <dependency>
         <groupId>com.my.group.id</groupId>
         <artifactId>com.my.artifact.id</artifactId>
        <version>0.1</version>
    </dependency>
    [All other dependencies]
</dependencies>


<build>
    <sourceDirectory>src</sourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>4.0.0-rc.1</version>
            <configuration>
                <sdk>
                    <path>${env.ANDROID_HOME}</path>
                    <platform>10</platform>
                </sdk>
                <deleteConflictingFiles>true</deleteConflictingFiles>
            </configuration>
            <extensions>true</extensions>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
        </plugin>
    </plugins>
</build>

现在,使用此配置,当我尝试启动应用程序时出现此错误:

[2014-09-26 09:45:44 - Dex Loader] Unable to execute dex: Multiple dex files define Lorg/xmlpull/v1/XmlPullParser;
[2014-09-26 09:45:44 - MyProjectName] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lorg/xmlpull/v1/XmlPullParser;

这是我的一个依赖项所使用的库。 在这两个项目中,在Properties - &gt;构建路径 - &gt;订单和导出我只检查了Maven依赖项。

但是,如果我尝试在两个项目中取消选中此项,我可以运行该应用程序,但是当我尝试实例化我的库项目类时,应用程序崩溃时出现此错误:

09-26 10:08:16.318: E/AndroidRuntime(2023): FATAL EXCEPTION: main
09-26 10:08:16.318: E/AndroidRuntime(2023): Process: com.example.myapp, PID: 2023
09-26 10:08:16.318: E/AndroidRuntime(2023): java.lang.NoClassDefFoundError: com.example.myapp.MyExampleClassTask

在部署和启动时,我的app logcat打印出来:

09-26 10:05:44.318: W/dalvikvm(2023): Unable to resolve superclass of Lcom/example/myapp/MyExampleClassTask; (30)
09-26 10:05:44.318: W/dalvikvm(2023): Link of class 'Lcom/example/myapp/MyExampleClassTask;' failed
09-26 10:05:44.318: E/dalvikvm(2023): Could not find class 'com.example.myapp.MyExampleClassTask', referenced from method com.example.myapp.MainFragment$1.onClick
09-26 10:05:44.318: W/dalvikvm(2023): VFY: unable to resolve new-instance 68 (Lcom/example/myapp/MyExampleClassTask;) in Lcom/example/myapp/MainFragment$1;

MyExampleClassTask是一个扩展我的库类的类。

我希望有人可以帮助我。谢谢=)

1 个答案:

答案 0 :(得分:0)

您的Android App Maven依赖项中的Android库POM 似乎缺少包装类型apklib

<groupId>com.my.group.id</groupId>
<artifactId>com.my.artifact.id</artifactId>
<version>0.1</version>
<packaging>apklib</packaging>

这样你的POM看起来像this

此外,您需要将Android Library签出到本地Eclipse工作区,以便ADT查找和编译源代码。