首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android测试使用Maven进行编译

Android测试使用Maven进行编译
EN

Stack Overflow用户
提问于 2013-01-10 01:30:30
回答 2查看 1.2K关注 0票数 0

几天来,我一直在为这个问题头疼,所以我想是时候问一下了。

我有一个android项目和一个android测试项目。我可以在eclipse中运行我的测试,它工作得很好。

因此,现在我将继续通过maven使用这些测试,这样我就可以将它们用于CI。

总之,长话短说,我不能让maven编译/运行它们。我已经看过android-maven-plugin提供的所有示例,但都无济于事。

主POM。

代码语言:javascript
复制
<groupId>com.xxx.x_android_finder</groupId>
<artifactId>x_Android_Finder</artifactId>
<version>1.0.2</version>
<packaging>apk</packaging>
<name>xxxx</name>

<dependencies>
   <!--    <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.8.1</version>
          <scope>test</scope>
    </dependency> -->
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>4.0.1.2</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
<groupId>com.google.android.maps</groupId>
        <artifactId>maps</artifactId>
        <version>15_r2</version>
        <scope>provided</scope>
    </dependency>

   <dependency>
        <groupId>com.actionbarsherlock</groupId>
        <artifactId>library</artifactId>
        <version>4.1.0</version>
        <type>apklib</type>
        <exclusions>
            <exclusion>
                <groupId>com.google.android</groupId>
                <artifactId>support-v4</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.actionbarsherlock</groupId>
        <artifactId>plugin-maps</artifactId>
        <version>4.1.0</version>
    </dependency> 

    <dependency>
        <groupId>net.hockeyapp.android</groupId>
        <artifactId>HockeySDK</artifactId>
        <version>2.0.2</version>
        <type>apklib</type>
    </dependency>

    <dependency>
        <groupId>com.codeslap</groupId>
        <artifactId>android-facebook</artifactId>
        <version>1.6</version>
        <scope>compile</scope>
    </dependency>

     <dependency>
       <groupId>org.twitter4j</groupId>
       <artifactId>twitter4j-core</artifactId>
       <version>[3.0,)</version>
   </dependency>

</dependencies>

<repositories>
    <repository>
        <id>jakewharton</id>
        <url>http://r.jakewharton.com/maven/release/</url>
    </repository>
    <repository>
        <id>codeslap</id>
        <url>http://casidiablo.github.com/codeslap-maven/repository/</url>
    </repository>

</repositories>

<build>

    <plugins>



        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.2.0</version>
            <extensions>true</extensions>

            <configuration>
                <!-- replace resources with target specific -->


                <renameManifestPackage>${customerPackage}</renameManifestPackage> 
                <resourceOverlayDirectory>${customerResources}</resourceOverlayDirectory>

                 <sign>
                    <debug>false</debug>
                 </sign>
                  <manifest>
                    <versionCodeAutoIncrement>true</versionCodeAutoIncrement>
                  </manifest>
                   <zipalign>
                    <inputApk>${project.build.directory}/${project.build.finalName}.apk</inputApk>
                    <outputApk>${project.build.directory}/x_Android_Finder.apk</outputApk>
                 </zipalign>

               <proguard>
                    <skip>true</skip>
                </proguard>

                <sdk>
                    <!-- platform or api level (api level 4 = platform 1.6)-->
                    <platform>17</platform>
                </sdk>
                <assetsDirectory>${project.basedir}/${customerAssets}</assetsDirectory>
                <resourceDirectory>${project.basedir}/res</resourceDirectory>
            </configuration>

            <executions>
                <execution>
                    <id>manifestUpdate</id>
                    <phase>process-resources</phase>
                    <goals>
                        <goal>manifest-update</goal>
                    </goals>
                </execution>
                <execution>
                    <id>alignApk</id>
                    <phase>package</phase>
                    <goals>
                        <goal>zipalign</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jarsigner-plugin</artifactId>
            <version>1.2</version>
            <executions>
                <execution>
                    <id>signing</id>
                    <goals>
                        <goal>sign</goal>
                    </goals>
                    <phase>package</phase>

                    <inherited>true</inherited>
                    <configuration>
                        <archiveDirectory></archiveDirectory>
                        <includes>
                            <include>target/*.apk</include>
                        </includes>
                        <keystore>../certificates/xxx.keystore</keystore>
                        <storepass>xxxx</storepass>
                        <keypass>xxxx</keypass>
                        <alias>csl</alias>

                    </configuration>
                </execution>
            </executions>
        </plugin>

        <!-- <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <configuration>
              <skip>true</skip>
            </configuration>
       </plugin> -->

    </plugins>
</build>

测试pom

代码语言:javascript
复制
    <artifactId>x_Android_Finder_Test</artifactId>
    <packaging>apk</packaging>
    <version>1.0.0</version>
    <name>xxxxx</name>


    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android-test</artifactId>
            <version>1.5_r3</version>
          </dependency>

        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.0.1.2</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.google.android.maps</groupId>
            <artifactId>maps</artifactId>
            <version>15_r2</version>
            <scope>provided</scope>
        </dependency>

       <dependency>
            <groupId>com.actionbarsherlock</groupId>
            <artifactId>library</artifactId>
            <version>4.1.0</version>
            <type>apklib</type>
            <exclusions>
                <exclusion>
                    <groupId>com.google.android</groupId>
                    <artifactId>support-v4</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.actionbarsherlock</groupId>
            <artifactId>plugin-maps</artifactId>
            <version>4.1.0</version>
        </dependency> 

        <dependency>
            <groupId>com.connectionservices.csl_android_finder</groupId>
            <artifactId>Csl_Android_Finder</artifactId>
            <type>apk</type>
            <version>1.0.2</version>
        </dependency>

        <dependency>
            <groupId>com.connectionservices.csl_android_finder</groupId>
            <artifactId>Csl_Android_Finder</artifactId>
            <scope>provided</scope>
            <type>jar</type>
            <version>1.0.2</version>
        </dependency>


         <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.8.1</version>
              <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>net.hockeyapp.android</groupId>
            <artifactId>HockeySDK</artifactId>
            <version>2.0.2</version>
            <type>apklib</type>
        </dependency>

        <dependency>
            <groupId>com.codeslap</groupId>
            <artifactId>android-facebook</artifactId>
            <version>1.6</version>
            <scope>compile</scope>
        </dependency>

         <dependency>
           <groupId>org.twitter4j</groupId>
           <artifactId>twitter4j-core</artifactId>
           <version>[3.0,)</version>
       </dependency>

        <dependency>
            <groupId>com.jayway.android.robotium</groupId>
            <artifactId>robotium-solo</artifactId>
            <version>3.6</version>
        </dependency>

    </dependencies>

    <repositories>
        <repository>
            <id>oss.sonatype.org-jayway-with-staging</id>
            <url>http://oss.sonatype.org/content/groups/jayway-with-staging/</url>
        </repository>

        <repository>
             <id>jakewharton</id>
            <url>http://r.jakewharton.com/maven/release/</url>
         </repository>


         <repository>
             <id>codeslap</id>
             <url>http://casidiablo.github.com/codeslap-maven/repository/</url>
         </repository>

    </repositories>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>


            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>

                <configuration>
                    <sdk>
                        <platform>15</platform>
                    </sdk>

            <test>

                        <createReport>true</createReport>

                    </test>

                </configuration>
                <extensions>true</extensions>


            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.13</version>

              </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <!--   <version>1.2</version> -->
                <executions>
                    <execution>
                        <id>signing</id>
                        <goals>
                            <goal>sign</goal>
                        </goals>
                        <phase>package</phase>

                        <inherited>true</inherited>
                        <configuration>
                            <removeExistingSignatures>true</removeExistingSignatures>

                            <archiveDirectory></archiveDirectory>
                            <includes>
                                <include>target/*.apk</include>
                            </includes>
                            <keystore>../certificates/xxxx.keystore</keystore>
                            <storepass>xxx</storepass>
                            <keypass>xxxx</keypass>
                            <alias>csl</alias>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins> 
    </build>
</project>

测试项目保存在main/java/...在测试项目中

当我编译时,我使用mvn clean测试

它抛出的错误是

代码语言:javascript
复制
ERROR] /Users/aidenfry/AndroidHSF(trunknew)/x_Android_Finder_Parent/x_Android_Finder_Test/src/main/java/com/xxxxxxx/x_android_finder_test/FinderActivityTest.java:[27,7] cannot access junit.framework.TestCase
[ERROR] class file for junit.framework.TestCase not found
[ERROR] public class FinderActivityTest extends ActivityInstrumentationTestCase2<FinderActivity> {
[ERROR] /Users/aidenfry/AndroidHSF(trunknew)/x_Android_Finder_Parent/x_Android_Finder_Test/src/main/java/com/xxxx/xx_android_finder_test/FinderActivityTest.java:[39,8] cannot find symbol
[ERROR] symbol  : variable super
[ERROR] location: class 

我可以提供更多,但它们都类似于此,似乎找不到Junit库?但我的家属中已经有了。

如果有人能帮我解决这个乱七八糟的问题,我将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-10 20:19:48

好的,这就是我是如何做到的。

我最初将测试用例放在一个单独的模块/ eclipse项目中。这好像把我的东西搞砸了。

将类移动到src/ main /test下的主应用程序项目中,现在解决了我的所有问题,谢谢!

票数 0
EN

Stack Overflow用户

发布于 2015-03-12 17:51:06

如果有人有同样的问题,并想执行真正的安卓单元测试,而不是正常的JUnit测试:

您需要取消注释

代码语言:javascript
复制
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <!-- scope is compile, not test! -->
      <scope>compile</scope>
</dependency>

对junit的依赖和使用正常作用域(编译),不测试!

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14243002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档