What is INSTALL_PARSE_FAILED_NO_CERTIFICATES error?

I was trying to change my default/main/startup (whatever you call it) activity by editing the androidmanifest.xml file. All i did was change the android:name property. however, this completely broke the entire app. when i try to install it fails and reads

Installation error: INSTALL_PARSE_FAILED_NO_CERTIFICATES

  • How to set a dialog themed activity width to screen width?
  • Firebase android proxy setting
  • Android SQLite “no such table” exception
  • Android - Save an rtsp (h264) stream to mp4 file
  • How to add Maven to an existing IntelliJ Android project
  • Android: correct way of jumping between fragments
  • when i tried to change it back to its previous state, it was still giving me the same error… what have i done!?!?!

    Related posts:

    how to set custom locale for indian regional languages in android emulator
    Android: using LinkMovementMethod for edit text
    Conditional won't trigger when given a 75: android
    SearchView in OptionsMenu not full width
    Custom Spinners/drop down menu
    Open an url in android browser, avoid multiple tabs
  • SQLite exception: Database is locked issue
  • In Android, how to make Login button disable with respect to EditText?
  • Intellij Idea does not find my android device
  • How to add android bookmark on homescreen from web page?
  • Add an attribute at the “application” tag in the AndroidManifest from a cordova plugin
  • java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.MEDIA_MOUNTED on KitKat only
  • 15 Solutions collect form web for “What is INSTALL_PARSE_FAILED_NO_CERTIFICATES error?”

    Did you edit the AndroidManifest.xml directly in the .apk file? If so, that won’t work.

    Every Android .apk needs to be signed if it is going to be installed on a phone, even if you’re not installing through the Market. The development tools work round this by signing with a development certificate but the .apk is still signed.

    One use of this is so a device can tell if an .apk is a valid upgrade for an installed application, since if it is the Certificates will be the same.

    So if you make any changes to your app at all you’ll need to rebuild the .apk so it gets signed properly.

    I found this was caused by my JDK version.

    I was having this problem with ‘ant’ and it was due to this CAUTION mentioned in the documentation:

    http://developer.android.com/guide/publishing/app-signing.html#signapp

    Caution: As of JDK 7, the default signing algorithim has changed, requiring you to specify the signature and digest algorithims (-sigalg and -digestalg) when you sign an APK.

    I have JDK 7. In my Ant log, I used -v for verbose and it showed

    $ ant -Dadb.device.arg=-d -v release install
    [signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
    [signjar] '-keystore'
    [signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
    [signjar] '-signedjar'
    [signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
    [signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
    [signjar] 'mykey'
     [exec]     pkg: /data/local/tmp/PairFinder-release.apk
     [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
    

    I signed the JAR manually and zipaligned it, but it gave a slightly different error:

    $ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
    $ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
    $ adb -d install -r bin/PairFinder-release.apk
            pkg: /data/local/tmp/PairFinder-release.apk
    Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
    641 KB/s (52620 bytes in 0.080s)
    

    I found that answered here.

    How to deal with INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES without uninstallation

    I only needed to uninstall it and then it worked!

    $ adb -d uninstall com.kizbit.pairfinder
    Success
    $ adb -d install -r bin/PairFinder-release.apk
            pkg: /data/local/tmp/PairFinder-release.apk
    Success
    641 KB/s (52620 bytes in 0.080s)
    

    Now I only need modify the build.xml to use those options when signing!

    Ok here it is: C:\Program Files\Java\android-sdk\tools\ant\build.xml

                <signjar
                        sigalg="MD5withRSA"
                        digestalg="SHA1"
                        jar="${out.packaged.file}"
                        signedjar="${out.unaligned.file}"
                        keystore="${key.store}"
                        storepass="${key.store.password}"
                        alias="${key.alias}"
                        keypass="${key.alias.password}"
                        verbose="${verbose}" />
    

    I found that this error can now also occur when using the wrong signing config. As described here, Android 7.0 introduces a new signature scheme, V2. The V2 scheme signs the entire APK rather than just the JAR, as is done in the V1 scheme. If you sign with only V2, and attempt to install on a pre-7.0 target, you’ll get this error since the JARs themselves are not signed and the pre-7.0 PackageManager cannot detect the presence of the V2 APK signature.

    To be compatible with all target systems, make sure the APK is signed with both schemes by checking both signature version boxes in Android Studio’s Generate Signed APK dialog as shown here:

    enter image description here

    If only 7.0 targets are anticipated, then there is no need to include the V1 signature.

    solved (for me) using in keytool the args

    -sigalg MD5withRSA -keyalg RSA -keysize 1024
    

    and using in jarsigner

    -sigalg MD5withRSA -digestalg SHA1
    

    solution found in

    What kind of pitfals exist for the Android APK signing?

    This is an ugly but fast solution: use JDK 6 instead of 7.

    After read Chloe’s answer, I uninstalled my JDK 7 (don’t need it currently anyways) and installed JDK 6. That fixed it. A better solution would make ant uses JDK 6 (without uninstalling 7). Maybe possible changing / setting this property:

    java.library.path

    in local.properties file. It’s in the project directory (root).

    Android doesn’t work with JDK 7 anyways (only 6 or 5), so make that the ant script also uses JDK 6 or 5 is probably a good solution.

    Most of the time the solution for this error is really simple:

    1. Uninstall your apk.
    2. Clean your android project.
    3. Build your android project.
    4. install / run your apk

    Have fun

    In my case, I could build and run release builds, but got the INSTALL_PARSE_FAILED_NO_CERTIFICATES error when trying to do a debug build.

    The solution was to delete my debug.keystore file and let ADT recreate it. It had apparently expired.

    A better long-term solution is to explicitly create a debug.keystore that does not expire after only a year, instead of letting ADT create it. Here is the command to do that:

    keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000
    

    When prompted, enter these values:

    • First and last name: Android Debug
    • Organizational unit: Android
    • Name of organization: Unknown
    • City or Locality: Unknown
    • State or Province: Unknown
    • Country code: US

    Setting environment variable JAVA_HOME to JDK 5 or 6 (instead of JDK 7) fixed the error.

    This could happen if you try to include a .jar library that contains an AndroidManifest.xml file.

    • If it’s pure Java make sure you don’t include it in the .jar export
    • If it’s not pure Java (meaning it’s an Android project) then you have to include it as a Library Project

    After some time and multiple online threads on the subject I managed to fix my project.

    It’s mainly taking into consideration the last files (could be images or layouts) that you put in. If you delete them, it will work out, and you can build your project again.

    I was having this error in my Eclipse Console. It turns out that I had two jars with the same content but different names and they were conflicting with each other. I just deleted one of them and managed to install the app on the device.

    I was getting this error because I did release that my ant release was failing because I ran out of disk space.

    I got this error when I tried to install a Xamarin project built against Android N preview on a phone running api v23. Solution is to not do that.

    Another way to get this error is to build using ant on macOS and have a Finder icon file (Icon\r) in the source tree of the app. It appears jarsigner can’t cope with the carriage return in the filename and, although it will claim the signing is valid if you -verify the APK, it always results in an APK that wont install on a device. Ironically, the Google Drive Finder plugin is a great source of Finder icon files.

    The solution is to exclude the offending files (which are useless in the APK anyway) with a specifier like this in the fileset:

        <exclude name="**/Icon&#13;" />
    

    Its because previously generated build and current is having conflict in signature version between v1(jar signature) and v2(full APK Signature),

    To fix tick proper signature version under Generate Signed APK dialog

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.