簡體   English   中英

Maven:我如何獲得捆綁在包中的.so庫

[英]Maven: How do I get .so libraries bundled in package

我有一個第三方庫,附帶.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中,如上所述Native庫(.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>

我建議查看Assembly插件: http//maven.apache.org/plugins/maven-assembly-plugin/我還沒有在任何Android項目中使用過它,但我確實在我的常規java服務器項目中使用它要求非maven項目在預期的位置。

我建議你使用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前綴重新發布它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM