Cant upload APK, failed because no AndroidManifest.xml found - android

I have created my app on google play, when I got to sumbit the APK I get this error:
Upload failed
Your APK cannot be analyzed using 'aapt dump badging'. Error output:
Failed to run aapt dump badging:
ERROR: dump failed because no AndroidManifest.xml found
I clearly have a AndroidManifest.xml file in my project, I also have compressed my .apk to .zip too, I'm clueless to whats wrong.

There are few steps before going to upload .apk on Play store
1.Generate private key using
keytool -genkey -v -keystore my-release-key.keystore
-alias alias_name -keyalg RSA -keysize 2048 -validity 10000
2.Compile application in release mode: Right click on project then chose Android Tools then Export Unsigned Application Package give the location where you want to save the .apk. Here after successful saving, eclipse alert you about What next to do?
3.Now sign your application with private key generated in step first
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
your_app_name.apk alias_name
in this step jarsigner may throw the error if your my-release-key.kestore and your_app_name.apk are not at same location.
4.align your package using zipalign tool
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
very clearly explained at developer.android.com

Rahul is right, I am also struggling with all the landmines left behind by google, but I managed to complete step 3 thanks to his insight.
I must add that JDK7 users must change the encryption algorithms and key size with the jarsigner:
1)
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 –keystore mykeystore myApp.apk mykey
2)
keytool -genkey -alias mykeystore -keyalg RSA -keysize 1024 -sigalg MD5withRSA -keystore mykey –validity 36500

Related

Ionic: jarsigner error: java.lang.RuntimeException: keystore load: Invalid keystore format

I'm using ionic for developing an android app. I jarsigned my app by mistake with an new keystore. As I got the error that the certifikate is unequal by uploading the app to the play store I used my backup keystore file with the same certificate needed in playstore.
Now if I want to jarsign my .apk with the command
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore app-release-unsigned.apk MyApp.apk alias_name
I get the following error
jarsigner error: java.lang.RuntimeException: keystore load: Invalid keystore format
I googled a lot but I am not sure if any of the solutions could help me. I have to use my old certificate and cannot use a new one because I can't upload it then to playstore.
What do I have to do that it works again?
Just like the error says, you have an issue with the format of your keystore. Check the -keystore argument in your jarsigner command line op. It's an .apk file when it should be your .keystore file.
Do like this:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore HelloWorld-release-unsigned.apk alias_name

How To Sign APK files? [duplicate]

I've decoded an APK with apktool (as the original source code was lost) so I could fix some issues with the layout xml files. I've then rebuilt it back up with apktool and when I tried to install it on my device (using adb: adb install appname.apk) it gave me this error:
[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
the original apk however was signed by a keystore (on eclipse IDE), this one isn't, how can I sign it properly with it's original keystone file outside Eclipse!?
create a key using
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
then sign the apk using :
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
check here for more info
Automated Process:
Use this tool (uses the new apksigner from Google):
https://github.com/patrickfav/uber-apk-signer
Disclaimer: Im the developer :)
Manual Process:
Step 1: Generate Keystore (only once)
You need to generate a keystore once and use it to sign your unsigned apk.
Use the keytool provided by the JDK found in %JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Step 2 or 4: Zipalign
zipalign which is a tool provided by the Android SDK found in e.g. %ANDROID_HOME%/sdk/build-tools/24.0.2/ is a mandatory optimization step if you want to upload the apk to the Play Store.
zipalign -p 4 my.apk my-aligned.apk
Note: when using the old jarsigner you need to zipalign AFTER signing. When using the new apksigner method you do it BEFORE signing (confusing, I know). Invoking zipalign before apksigner works fine because apksigner preserves APK alignment and compression (unlike jarsigner).
You can verify the alignment with
zipalign -c 4 my-aligned.apk
Step 3: Sign & Verify
Using build-tools 24.0.2 and older
Use jarsigner which, like the keytool, comes with the JDK distribution found in %JAVA_HOME%/bin/ and use it like so:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
and can be verified with
jarsigner -verify -verbose my_application.apk
Using build-tools 24.0.3 and newer
Android 7.0 introduces APK Signature Scheme v2, a new app-signing scheme that offers faster app install times and more protection against unauthorized alterations to APK files (See here and here for more details). Therefore, Google implemented their own apk signer called apksigner (duh!)
The script file can be found in %ANDROID_HOME%/sdk/build-tools/24.0.3/ (the .jar is in the /lib subfolder). Use it like this
apksigner sign --ks-key-alias alias_name --ks my.keystore my-app.apk
and can be verified with
apksigner verify my-app.apk
The official documentation can be found here.
fastest way is by signing with the debug keystore:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android
or on Windows:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android
You use jarsigner to sign APK's. You don't have to sign with the original keystore, just generate a new one. Read up on the details: http://developer.android.com/guide/publishing/app-signing.html
For those of you who don't want to create a bat file to edit for every project, or dont want to remember all the commands associated with the keytools and jarsigner programs and just want to get it done in one process use this program:
http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx
I built it because I was fed up with the lengthy process of having to type all the file locations every time.
This program can save your configuration so the next time you start it, you just need to hit Generate an it will handle it for you. That's it.
No install required, it's completely portable and saves its configurations in a CSV in the same folder.
Updated answer
Check https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/
Old answer
check apk-signer a nice way to sign your app

How do I sign my Android apk for Google Play submission

I am just following the instruction by Google here, and I am failing in step 3:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
I get this message:
jarsigner: Certificate chain not found for: myApp. myApp must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.
What am I doing wrong?
Btw, I'm not using Eclipse and Android Studio. The apk is already been built in release mode and the project were not done in Eclipse/Android Studio, so I figured I would have to use jarsigner.
You give wrong parameter at the alias_name parameter
the basic format of jarsigner is
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore
my-release-key.keystore my_application.apk alias_name
So you should change your alias_name with correct one :)
you can check it with
keytool -keystore yourkeystorename.keystore -list -v
If you use Android studio go to Build->Generate sign apk
if you use Eclipse right click on the project Android tools-> export signed apk
If you are on eclipse, go to your manifest and click
Use the export wizard to export and sign apk

Failure [install_parse_failed_no_certificates] when attempting to install APK to the emulator

I downloaded Myfiles.apk from the internet and I'm trying to install it to my Android emulator.
While installing Myfiles.apk file through the command prompt, I'm getting this error.
I tried following in command prompt
C:\android-sdk\tools> adb -s emulator-5554 install C:\Users\Me\Desktop\MyFiles.apk
How do I install this APK to the emulator correctly?
This site
helped me a lot to properly sign the unsigned apk. But,for the last process i.e. for jarsigner,following command need to be used
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name.
Further do look upon this unable to sign zipexception if you encounter with any zipexception error . So overall,use following procedure
keytool -genkey -v -keystore debug.keystore -alias android -keyalg RSA -keysize 2048 -validity 20000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore yourapkalign.apk alias_name
zipalign -v 4 yourapk.apk yourapkalign.apk
Now,you can successfully install the apk file.
It means that the apk you downloaded hasn't been signed with any certificate, debug or otherwise.
You can sign it from the command line, as described here.
You can use the androiddebugkey the sign the apk.
The keystore lives in ~/.android, named debug.keystore.
Run
keytool -list -keystore ~/.android/debug.keystore
To see the debug key, we can see its name is androiddebugkey
Run the following command to sign the apk.
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore yourapp-release.apk androiddebugkey

How to Sign an Already Compiled Apk

I've decoded an APK with apktool (as the original source code was lost) so I could fix some issues with the layout xml files. I've then rebuilt it back up with apktool and when I tried to install it on my device (using adb: adb install appname.apk) it gave me this error:
[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
the original apk however was signed by a keystore (on eclipse IDE), this one isn't, how can I sign it properly with it's original keystone file outside Eclipse!?
create a key using
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
then sign the apk using :
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
check here for more info
Automated Process:
Use this tool (uses the new apksigner from Google):
https://github.com/patrickfav/uber-apk-signer
Disclaimer: Im the developer :)
Manual Process:
Step 1: Generate Keystore (only once)
You need to generate a keystore once and use it to sign your unsigned apk.
Use the keytool provided by the JDK found in %JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Step 2 or 4: Zipalign
zipalign which is a tool provided by the Android SDK found in e.g. %ANDROID_HOME%/sdk/build-tools/24.0.2/ is a mandatory optimization step if you want to upload the apk to the Play Store.
zipalign -p 4 my.apk my-aligned.apk
Note: when using the old jarsigner you need to zipalign AFTER signing. When using the new apksigner method you do it BEFORE signing (confusing, I know). Invoking zipalign before apksigner works fine because apksigner preserves APK alignment and compression (unlike jarsigner).
You can verify the alignment with
zipalign -c 4 my-aligned.apk
Step 3: Sign & Verify
Using build-tools 24.0.2 and older
Use jarsigner which, like the keytool, comes with the JDK distribution found in %JAVA_HOME%/bin/ and use it like so:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
and can be verified with
jarsigner -verify -verbose my_application.apk
Using build-tools 24.0.3 and newer
Android 7.0 introduces APK Signature Scheme v2, a new app-signing scheme that offers faster app install times and more protection against unauthorized alterations to APK files (See here and here for more details). Therefore, Google implemented their own apk signer called apksigner (duh!)
The script file can be found in %ANDROID_HOME%/sdk/build-tools/24.0.3/ (the .jar is in the /lib subfolder). Use it like this
apksigner sign --ks-key-alias alias_name --ks my.keystore my-app.apk
and can be verified with
apksigner verify my-app.apk
The official documentation can be found here.
fastest way is by signing with the debug keystore:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android
or on Windows:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android
You use jarsigner to sign APK's. You don't have to sign with the original keystore, just generate a new one. Read up on the details: http://developer.android.com/guide/publishing/app-signing.html
For those of you who don't want to create a bat file to edit for every project, or dont want to remember all the commands associated with the keytools and jarsigner programs and just want to get it done in one process use this program:
http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx
I built it because I was fed up with the lengthy process of having to type all the file locations every time.
This program can save your configuration so the next time you start it, you just need to hit Generate an it will handle it for you. That's it.
No install required, it's completely portable and saves its configurations in a CSV in the same folder.
Updated answer
Check https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/
Old answer
check apk-signer a nice way to sign your app

Categories

Resources