我有一个第三方库,附带.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>
添加到插件管理中,如Native libraries (.so files) are not added to an android project所述,但没有帮助。
更新
如果有人遇到与我相同的问题,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>
答案 0 :(得分:0)
我建议查看Assembly插件:http://maven.apache.org/plugins/maven-assembly-plugin/我还没有在任何Android项目中使用它,但我确实在常规的Java服务器项目中使用它,这些项目要求非maven项目在预期的位置。
答案 1 :(得分:0)
我建议您使用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 前缀重新发布它。