【问题标题】:Maven Repo That Generates .so File, use as dependency in Maven Project生成 .so 文件的 Maven 存储库,在 Maven 项目中用作依赖项
【发布时间】:2016-05-05 14:10:13
【问题描述】:

地狱,

首先,我正在使用 Android,当涉及到在我的 Android 项目中自动使用本机库时,我对 maven 构建过程有一些疑问。我说自动化,因为目前我可以获取本机项目(repo)并构建我需要的 .so 文件(通过 maven 构建过程)然后我只需复制该 .so 文件并将其放入我的主项目本机库文件夹(即 mainProject /src/main/libs/armeabi-v7a/nativeLib.so)。所以...我的本机项目 pom.xml 踢出 .so 文件如下所示(构建区域)

<packaging>so</packaging>
<properties>
    <android.ndk.args>V=1 -B NDK_DEBUG=1 -j8</android.ndk.args>
    <arch>armeabi-v7a</arch>
    <mavenAntrunPluginVersion>1.8</mavenAntrunPluginVersion>
</properties>

<build>

    <extensions>
        <extension>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-webdav</artifactId>
            <version>1.0-beta-2</version>
        </extension>
    </extensions>

    <plugins>

        <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>${mavenAntrunPluginVersion}</version>
            <executions>
                <execution>
                    <phase>validate</phase>
                    <configuration>
                        <tasks>
                            <exec
                                    dir="${project.basedir}/src/main/java/com/abc/myClass"
                                    executable="javac"
                                    failonerror="true">
                                <arg value="myClass.java"/>
                            </exec>
                            <exec
                                    dir="${project.basedir}"
                                    executable="javah"
                                    failonerror="true">
                                <arg value="-d"/>
                                <arg value="${project.basedir}/target/jni/include"/>
                                <arg value="-classpath"/>
                                <arg value="${project.basedir}/src/main/java"/>
                                <arg value="com.abc.myClass.MyClass"/>
                            </exec>
                        </tasks>
                    </configuration>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>

            </executions>
        </plugin>

        <plugin>
            <groupId>com.simpligility.maven.plugins</groupId>
            <artifactId>android-ndk-maven-plugin</artifactId>
            <version>1.0.1-SNAPSHOT</version>
            <extensions>true</extensions>
            <configuration>
                <target>${project.artifactId}</target>
                <finalLibraryName>${project.artifactId}</finalLibraryName>
                <ndkPath>${android.ndk.path}</ndkPath>
                <applicationMakefile>src/main/cpp/Application.mk</applicationMakefile>
                <makefile>src/main/cpp/Android.mk</makefile>
                <architectures>${arch}</architectures>
                <additionalCommandline>${android.ndk.args}</additionalCommandline>
                <librariesOutputDirectory>${project.build.directory}/ndk-libs</librariesOutputDirectory>
                <objectsOutputDirectory>${project.build.directory}/ndk-obj</objectsOutputDirectory>
                <headerFilesDirectives>
                    <headerFilesDirective>
                        <directory>${basedir}/src/main/cpp</directory>
                        <includes>
                            <include>**\/*.hpp</include>
                        </includes>
                    </headerFilesDirective>
                </headerFilesDirectives>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
                <execution>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

所以这会将 .so 扔到 myNativeProject/target/ndk-obj/armeabi-v7a/nativeLib.so 中。然后我通常将其复制到我的主项目中。我尝试使这个项目成为 .so 类型的依赖项,但它无法识别它。如何将其添加到我的主项目中?提前谢谢了。

【问题讨论】:

  • 您为什么使用SNAPSHOT 版本的android-ndk-maven-plugin。我建议使用较新的发布版本。
  • 会做,我仍然可以构建项目。只需要知道如何将我的主要项目指向这个 .so

标签: java android maven android-ndk .so


【解决方案1】:

好的,

所以基本上在 .so 项目中,我使用了“build-helper-maven-plugin”来附加我的 .so 工件。然后在我的主项目中,我使用'maven-dependency-plugin'将.so文件复制(目标设置为复制)到本机输出目录。如果有人需要更多信息,请发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2017-01-23
    相关资源
    最近更新 更多