【问题标题】:Executing cmd command using Maven使用 Maven 执行 cmd 命令
【发布时间】:2013-05-23 05:07:21
【问题描述】:

我要执行这个命令:

zipalign [-f] [-v] <alignment> infile.apk outfile.apk

使用 Maven。我必须在 Android SDK/tools 目录中执行这个命令。谁能帮助我如何做到这一点?我认为这可以使用批处理文件来完成,但我不确定如何创建批处理文件。当我输入“mvn clean install”时,我需要执行这个命令。谢谢

【问题讨论】:

    标签: maven batch-file


    【解决方案1】:

    使用 Maven 执行命令

    您可以使用绑定到install 阶段的Maven Exec Plugin

    在下面的 sn-p 中,每次执行 mvn install 时都会执行带有参数 8.8.8.8 的命令 ping

    <project>
    ...
    <build>
        <plugins>
            <plugin>
                <artifactId>exec-maven-plugin</artifactId>
                <groupId>org.codehaus.mojo</groupId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <id>My Command Runner</id>
                        <phase>install</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>ping</executable>
                            <arguments>
                                <argument>8.8.8.8</argument>
                            </arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    ...
    </project>
    

     
    就是这样。

     

     


    更新:

    我现在看到您真正遇到的问题是执行 zipalign,而不是任意命令。为此,有两种方法。

    使用 maven-android-plugin 的内置 zipalign

    从 Android Maven 插件 2.5.0 版开始,zipalign 目标是插件的一部分。要激活,只需将目标zipalign 添加为执行(例如添加到package 阶段)并将plugin 中的skip 参数设置为configurationfalse

    <zipalign><skip>false</skip></zipalign>
    

    完整的&lt;plugin&gt; 标签示例:

    <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>maven-android-plugin</artifactId>
            <inherited>true</inherited>
            <configuration>
                    <sign>
                            <debug>false</debug>
                    </sign>
                    <zipalign>
                            <verbose>true</verbose>
                            <inputApk>${project.build.directory}/${project.artifactId}.apk</inputApk>
                            <outputApk>${project.build.directory}/${project.artifactId}-signed-aligned.apk
                            </outputApk>
                    </zipalign>
            </configuration>
            <executions>
                    <execution>
                            <id>alignApk</id>
                            <phase>package</phase>
                            <goals>
                                    <goal>zipalign</goal>
                            </goals>
                    </execution>
            </executions>
    </plugin>
    

    来源:

    使用 Exec-Maven 插件进行 Zipalign

    下面的代码会将 zip 对齐的功能绑定到 package 阶段,无需询问即可覆盖之前的 zip 对齐文件。

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.1.1</version>
        <executions>
            <execution>
                <id>zipalign</id>
                <goals>
                    <goal>exec</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                    <executable>${ANDROID_HOME}/tools/zipalign</executable>
                     <arguments>
                        <argument>-f</argument>
                        <argument>4</argument>
                        <argument>target/${project.build.finalName}.apk</argument>
                        <argument>target/${project.build.finalName}-zipped.apk</argument>
                    </arguments>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    请注意,必须将此配置文件添加到实际 APK 的 pom 中。您不能将其添加到父 pom。原因是它使用了定义工件名称 (project.build.finalName) 的 Maven 属性。

    【讨论】:

    • 我试过了,但它仍然不是 zip 对齐的。新的 zip-aligned 插件的名称是什么?
    【解决方案2】:

    如果您使用 Maven 构建 Android 项目,您应该使用 maven-android-plugn,它直接支持 zipalign 工具。

    【讨论】:

    • maven-android-plugin 和 android-maven-plugin 一样吗?我在我的 pom.xml 中使用 android-maven-plugin
    • 是的,它被重命名了。 android-maven-plugin 是 3.0 的新名称
    猜你喜欢
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 2021-02-19
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多