Question

I am trying to use the maven-android-plugin to launch InstrumentationTestRunner tests.

I created an App com.my.app.
I created a simple Android Test Project com.my.app.test2.
I made maven use the jarsigner to automatically sign the apks.

For sining I am using the same KeyStore. Anyway I am getting the following error, when I try to execute the test project by doing maven clean install

Failed to execute goal com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.6.0:internal-pre-integration-test (default-internal-pre-integration-test) on project eticapptest2: 42f7a71e823ebff9_samsung_GT-N7105 :   Install of D:\AndroidApp\com.my.app.test2\target\eticapptest2-1.0.0-SNAPSHOT.apk failed - [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

What I tried:

When I inspect the APKs which are produced and signed during the maven run - I see, that both (the com.my.app.apk and com.my.app.test2.apk) are signed correctly. The certificates are the same.

What could be the reason for the error?

My com.my.app POM

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.my.app.apps</groupId>
        <artifactId>root</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <properties>
        <deivukeypass>APP_PASS_HERE</deivukeypass>
    </properties>

    <artifactId>eticapp</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>eTicApp</name>

    <dependencies>

        <!-- Basic Android API + Compatibility -->
        <dependency>
            <groupId>android</groupId>
            <artifactId>android</artifactId>
            <version>4.2.2_r2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>android.support</groupId>
            <artifactId>compatibility-v13</artifactId>
            <version>18</version>
        </dependency>

        <!-- NeoReaderSDK (Barcode-Scanner) -->
        <dependency>
            <groupId>com.my.app.apps</groupId>
            <artifactId>neoreadersdk</artifactId>
            <version>${project.version}</version>
            <type>apklib</type>
        </dependency>

        <!-- ADAC/Postbus-Ticket-Records und -Decoder -->
        <dependency>
            <groupId>com.my.app</groupId>
            <artifactId>common-barcode-android</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </dependency>

        <!-- Implementierung fur Logging (slf4j) -->
        <!-- diese impl macht probleme und funktioniert zur zeit nicht?? 
             Auskommentiert um den Fehler ersteinmal loszuwerden!
        <dependency>
            <groupId>com.github.tony19</groupId>
            <artifactId>logback-android-classic</artifactId>
            <version>1.0.10-2</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.android</groupId>
                    <artifactId>android</artifactId>
                </exclusion>
            </exclusions>
        </dependency> -->


        <!-- ORMlite fur Android -->
        <dependency>
            <groupId>com.j256.ormlite</groupId>
            <artifactId>ormlite-android</artifactId>
            <version>4.46</version>
            <exclusions>
                <!-- Android-Artefakte haben bei uns andere Koordinaten -->
                <exclusion>
                    <groupId>com.google.android</groupId>
                    <artifactId>android</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- JSonPath is like xpath xml, but for JSON -->
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <version>0.8.1</version>
        </dependency>

    </dependencies>

    <build>
        <!-- Android-Standard-Verzeichnisstruktur verwenden -->
        <sourceDirectory>src</sourceDirectory>

        <plugins>



            <!-- Maven plugin which is responsible for signing apks -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <executions>
                    <execution>
                        <id>signing</id>
                        <goals>
                            <goal>sign</goal>
                            <goal>verify</goal>
                        </goals>
                        <phase>package</phase>
                        <inherited>true</inherited>
                        <configuration>
                            <removeExistingSignatures>true</removeExistingSignatures>
                            <archiveDirectory/>
                            <includes>
                                <include>${project.build.finalName}</include>
                            </includes>
                            <keystore>${basedir}/local/AndroidDeveloperCertificate.jks</keystore>
                            <alias>adtkey</alias>
                            <storepass>${deivukeypass}</storepass>
                            <keypass>${deivukeypass}</keypass>
                            <verbose>true</verbose>
                            <arguments>
                              <argument>-sigalg</argument><argument>MD5withRSA</argument>
                              <argument>-digestalg</argument><argument>SHA1</argument>
                            </arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- Maven-Android-Plugin konfigurieren -->
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <sdk>
                        <platform>4.2.2</platform>
                    </sdk>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                 <sign>
                    <debug>false</debug>
                 </sign>
                 <zipalign>
                    <verbose>true</verbose>
                    <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk> <!-- target/eticapp-1.0.0-SNAPSHOT.apk -->
                    <outputApk>${project.build.directory}/${project.artifactId}-${project.version}-signed-aligned.apk</outputApk>
                 </zipalign>
                </configuration>

                <executions>
                    <execution>
                        <id>alignApk</id>
                        <phase>package</phase>
                        <goals>
                            <goal>zipalign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <profiles>
        <profile>
            <!-- Profil fur Release-Versionen zum Setzen der Version -->
            <id>setVisualVersion</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                        <artifactId>android-maven-plugin</artifactId>
                        <extensions>true</extensions>
                        <configuration>
                            <manifest>
                                <versionName>${env.IVU-VERSION-MAJOR}.${env.IVU-VERSION-MINOR}.${env.IVU-VERSION-REVISION} ${env.IVU-VERSION-BUILD} Build-${buildNumber}</versionName>
                                <versionCode>${buildNumber}</versionCode>
                            </manifest>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>process-resources</phase>
                                <goals>
                                    <goal>manifest-update</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>

My com.my.app.test2 POM

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.my.app.apps</groupId>
        <artifactId>root</artifactId>
        <version>1.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>eticapptest2</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>apk</packaging>
    <name>eTicApp - Test</name>

    <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>4.1.1.4</version>
          </dependency>
          <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android-test</artifactId>
            <version>4.1.1.4</version>
          </dependency>
        </dependencies>
    </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android</artifactId>
      <version>4.1.1.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.android</groupId>
      <artifactId>android-test</artifactId>
      <version>4.1.1.4</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.my.app.apps</groupId>
      <artifactId>eticapp</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <type>apk</type>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.my.app.apps</groupId>
      <artifactId>eticapp</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

    <build>
        <!-- Android-Standard-Verzeichnisstruktur verwenden -->
        <sourceDirectory>src</sourceDirectory>

        <plugins>
            <!-- Maven-Android-Plugin konfigurieren -->
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <sdk>
                        <platform>4.2.2</platform>
                    </sdk>
                    <undeployBeforeDeploy>false</undeployBeforeDeploy>
                 <sign>
                    <debug>false</debug>
                 </sign>
                 <zipalign>
                    <verbose>true</verbose>
                    <inputApk>${project.build.directory}/${project.artifactId}-${project.version}.apk</inputApk> <!-- target/eticapp-1.0.0-SNAPSHOT.apk -->
                    <outputApk>${project.build.directory}/${project.artifactId}-${project.version}-signed-aligned.apk</outputApk>
                 </zipalign>
                </configuration>

                <executions>
                    <execution>
                        <id>alignApk</id>
                        <phase>package</phase>
                        <goals>
                            <goal>zipalign</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>


            <!-- Maven plugin which is responsible for signing apks -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jarsigner-plugin</artifactId>
                <executions>
                    <execution>
                        <id>signing</id>
                        <goals>
                            <goal>sign</goal>
                            <goal>verify</goal>
                        </goals>
                        <phase>package</phase>
                        <inherited>true</inherited>
                        <configuration>
                            <removeExistingSignatures>true</removeExistingSignatures>
                            <archiveDirectory/>
                            <includes>
                                <include>${project.build.finalName}</include>
                            </includes>
                            <keystore>${basedir}/local/AndroidDeveloperCertificate.jks</keystore>
                            <alias>adtkey</alias>
                            <storepass>APP_PASS_HERE</storepass>
                            <keypass>APP_PASS_HERE</keypass>
                            <verbose>true</verbose>
                            <arguments>
                              <argument>-sigalg</argument><argument>MD5withRSA</argument>
                              <argument>-digestalg</argument><argument>SHA1</argument>
                            </arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>

    </build>

</project>

Was it helpful?

Solution

INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

The error indicates you have a version of the app installed with a different certificate.

Before running mvn clean install, uninstall both the apps:

  1. adb uninstall com.my.app
  2. adb uninstall com.my.app.test2
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top