1

我正在编写一个 android 库项目,并想添加对 maven 的支持。我的库项目 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>my_group_id</groupId>
  <artifactId>my_artifactId</artifactId>
  <version>1.0.1</version>
  <packaging>apklib</packaging>
  <name>My Library Project</name>

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

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
    <sourceDirectory>src</sourceDirectory>
    <finalName>${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
        <artifactId>android-maven-plugin</artifactId>
          <version>3.8.2</version>
          <extensions>true</extensions>   
        <configuration>
          <sdk>
            <platform>19</platform>
          </sdk>
        </configuration>     
      </plugin>
    </plugins>
  </build>
</project>

我的主要项目 pom 文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.simpligility.android</groupId>
  <artifactId>helloflashlight</artifactId>
  <version>1.0.0</version>
  <packaging>apk</packaging>

  <name>HelloFlashlight</name>

  <dependencies> 
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
      <version>4.1.1.4</version>
      <scope>provided</scope>
    </dependency>        
    <dependency>
  <groupId>my_group_id</groupId>
  <artifactId>my_artifactId</artifactId>
  <version>1.0.1</version>
      <type>apklib</type>
    </dependency>               
  </dependencies>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <build>
    <sourceDirectory>src</sourceDirectory>
    <finalName>${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
        <artifactId>android-maven-plugin</artifactId>
          <version>3.8.2</version>
          <extensions>true</extensions>   
        <configuration>
          <sdk>
            <platform>19</platform>
          </sdk>
        </configuration>     
      </plugin>
    </plugins>
  </build>

</project>

我正在使用以下方法将库项目安装到我的本地存储库:

mvn clean install

然后我正在编译主项目并将其安装到我的本地存储库中:

mvn clean install

并使用以下方法生成 apk:

mvn android:deploy

现在,当我用 maven 编译项目时,就会出现问题。该项目编译成功,但是当我在设备上运行 apk 时,我在尝试对库项目内的资源执行 findById 时收到 NullPointerException。请注意,部分时间 findById 确实返回值,但并不总是正确的类型(例如,预期的布局但有一个按钮)。重要的是,在没有 maven 的情况下在 eclipse 中运行时,一切正常。

请指教

4

1 回答 1

0

最后我找到了解决方案,所以我会为未来的读者更新我的答案。这个问题的解决方案是使用 maven 创建 aar 文件而不是 apklib 文件。

于 2014-04-27T09:07:37.660 回答