5

我有一个带有 .jar 和 .so 文件的第三方库。

我将 pom.xml 配置如下:

<dependency>
    <groupId>com.abc.def</groupId>
    <artifactId>sdc</artifactId>
    <version>1.1</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.abc.def</groupId>
    <artifactId>sdc</artifactId>
    <version>3</version>
    <scope>compile</scope>
    <type>so</type>
</dependency>

使用此配置,我通过 Intellij 成功测试,目标下的 apk 文件包含 lib/armeabi/sdc.so 之类的结构

但是,在我这样做之后mvn clean package,生成的 apk 文件不包含 sdc.so 文件,并且在 android 设备上安装 apk 文件后,lib 文件夹为空。

通过互联网搜索,并没有找到答案。

顺便说一句,我确实添加<nativeLibrariesDirectory>${project.basedir}/libs</nativeLibrariesDirectory>到 pluginManagement 中,因为提到的本机库(.so 文件)没有添加到 android 项目中,但没有帮助。

更新:

如果有人遇到与我相同的问题,即 SO 文件没有复制过来,请尝试手动复制 so 文件,如下所示:

 <build>
  <plugins>
   <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.1</version>
      <executions>
        <execution>
          <id>copy</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>copy</goal>
          </goals>
          <configuration>
            <artifactItems>
               <artifactItem>
                 <groupId>com.abc.def</groupId>
                 <artifactId>libdef</artifactId>
                 <version>2.1.3</version>
                 <type>so</type>
                 <destFileName>libdef.so</destFileName>
             </artifactItem>
            </artifactItems>
            <outputDirectory>${project.build.directory}/libs/armeabi</outputDirectory>
           </configuration>
         </execution>
      </executions>
    </plugin>
  </plugins>
 </build>
4

2 回答 2

1

我建议您使用 maven-android-plugin 版本 2.8.3 或更高版本。

您的本机库的范围必须是runtime(不确定是否需要,但无论如何这是事实)

artifactId 必须以 lib 开头(即它必须是 libsdc)

<dependency>
    <groupId>com.abc.def</groupId>
    <artifactId>libsdc</artifactId>
    <version>3</version>
    <scope>runtime</scope>
    <type>so</type>
</dependency>

artifactId 将是库名称,因此请使用这行代码加载它

System.loadLibrary("sdc");

参考

注意:我不知道 sdc 是否是真正的 artifactId,但如果是这种情况,您必须考虑使用lib前缀重新发布它。

于 2013-08-28T19:53:13.297 回答
0

我建议查看 Assembly 插件:http ://maven.apache.org/plugins/maven-assembly-plugin/我还没有在任何 Android 项目中使用它,但我确实在我的常规 java 服务器项目中使用它要求非 Maven 项目位于预期位置。

于 2013-08-28T19:12:51.510 回答