Is it possible to configure VoltBuilder to generate the APK already signed with V1 (instead of V1 + V2)?

What platform are you building for?

Android

What framework are you building with?

Cordova

What is your build ID?

70a43823-316a-49d3-a067-db800fbaf3ff

What is your error message?

Is it possible to configure VoltBuilder to generate the APK already signed with V1 (instead of V2)?

If not, is there a recommended method to remove or avoid including the specific files mentioned in the MANIFEST.MF that are causing the checksum errors?

By the way, we use NSB Appstudio for coding and then VoltBuilder to generate the apk file.

Please describe the issue:

Hello,

I need assistance regarding the compilation and signing process of my application.

When we compile our app in Release mode, VoltBuilder generates the APK using signature scheme V2. However, to distribute the application on a third-party platform, we are required to provide an APK signed using signature scheme V1.

To work around this limitation, I generated a separate V1 keystore and I am currently re-signing the APK manually using the following command:

jarsigner -keystore ntc-keystore.jks …

I am not completely sure if this manual re-signing is what caused the checksum issue reported by the third-party platform, but it is possible since the APK is modified when re-signed.

I would like to know:

Is it possible to configure VoltBuilder to generate the APK already signed with V1 (instead of V2)?

If not, is there a recommended method to remove or avoid including the specific files mentioned in the MANIFEST.MF that are causing the checksum errors?

Below is the report we received from the third-party platform:

Third-party report:

“All the files mentioned in the log below are causing errors during the third level signing process.

The possible reasons are:

• Not using packaging options to remove extra files in the META-INF folder
• Exceeding the 70-character limit per line in MANIFEST.MF; line breaks must be used for any content longer than 70 characters

In theory, these files are located somewhere in your manifest.

com.netcontroll.pdv-11110.apk … signed: 1x=True, 2x=True
(<class ‘javatools.jarutil.ManifestChecksumError’>, ManifestChecksumError(‘/opt/clover/prod3xsign/apks/downloaded-2025-11-07_22.01.02/com.netcontroll.pdv-11110.apk: in .SF file, section checksum(s) failed for: assets/www/jqwidgets/styles/images/le-frog/ui-icons_4eb305_256x240.png,assets/www/jqwidgets/styles/images/smoothness/ui-bg_flat_0_aaaaaa_40x100.png,assets/www/jqwidgets/styles/images/smoothness/ui-icons_2e83ff_256x240.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_inset-soft_50_c9c9c9_1x100.png,assets/www/jqwidgets/styles/images/start/ui-bg_gloss-wave_75_2191c0_500x100.png,assets/www/jqwidgets/styles/images/smoothness/ui-icons_cd0a0a_256x240.png,assets/www/jqwidgets/styles/images/smoothness/ui-bg_highlight-soft_75_cccccc_1x100.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_diagonals-small_0_aaaaaa_40x40.png,assets/www/jqwidgets/styles/images/sunny/ui-bg_highlight-soft_100_feeebd_1x100.png,assets/www/plugins/cordova-plugin-dialogs/www/android/notification.js,assets/
www/jqwidgets/styles/images/le-frog/ui-icons_72b42d_256x240.png,assets/www/jqwidgets/styles/images/start/ui-bg_glass_45_0078ae_1x400.png,assets/www/plugins/cordova-plugin-screen-orientation/www/screenorientation.js,assets/www/jqwidgets/styles/images/darkness/ui-bg_flat_50_5c5c5c_40x100.png,assets/www/jqwidgets/styles/images/lightness/ui-icons_ef8c08_256x240.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_flat_55_c0402a_40x100.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_glass_100_f8f8f8_1x400.png,assets/www/jqwidgets/styles/images/darkness/ui-icons_222222_256x240.png,assets/www/jqwidgets/styles/images/sunny/ui-bg_flat_30_cccccc_40x100.png,assets/www/jqwidgets/styles/images/lightness/ui-icons_ffffff_256x240.png,assets/www/jqwidgets/styles/images/colorpicker/bar-saturation.png,assets/www/jqwidgets/styles/images/overcast/ui-icons_fbc856_256x240.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_inset-hard_100_f5f8f9_1x100.png,assets/www/plugins/cordova-plugin-netcontro
ll-integration-util/www/NetControllNetwork.js,assets/www/jqwidgets/styles/images/sunny/ui-bg_gloss-wave_45_817865_500x100.png,assets/www/jqwidgets/styles/images/start/ui-icons_f5e175_256x240.png,assets/www/jqwidgets/styles/images/smoothness/ui-icons_888888_256x240.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_flat_55_fbec88_40x100.png,META-INF/androidx.versionedparcelable_versionedparcelable.version,assets/www/jqwidgets/styles/images/darkness/ui-bg_gloss-wave_25_333333_500x100.png,assets/www/jqwidgets/styles/images/sunny/ui-icons_fadc7a_256x240.png,assets/www/jqwidgets/styles/images/smoothness/ui-bg_glass_75_e6e6e6_1x400.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_flat_0_aaaaaa_40x100.png,assets/www/jqwidgets/styles/images/sunny/ui-icons_eb990f_256x240.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_diagonals-thick_95_ffdc2e_40x40.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_highlight-soft_60_4ca20b_1x100.png,assets/www/jqwidgets/styles/images/lightness
/ui-bg_glass_65_ffffff_1x400.png,assets/www/jqwidgets/styles/images/sunny/ui-bg_flat_50_5c5c5c_40x100.png,assets/www/jqwidgets/styles/images/lightness/ui-bg_gloss-wave_35_f6a828_500x100.png,assets/www/jqwidgets/styles/images/smoothness/ui-bg_glass_55_fbf9ee_1x400.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_inset-soft_30_f58400_1x100.png,assets/www/plugins/cordova-plugin-bring-to-front/www/bring-to-front.js,assets/www/jqwidgets/styles/images/lightness/ui-bg_highlight-soft_100_eeeeee_1x100.png,assets/www/jqwidgets/styles/images/start/ui-icons_fcd113_256x240.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_flat_0_eeeeee_40x100.png,assets/www/jqwidgets/styles/images/lightness/ui-bg_diagonals-thick_20_666666_40x40.png,assets/www/jqwidgets/styles/images/check_indeterminate_disabled.png,assets/www/jqwidgets/styles/images/smoothness/ui-icons_454545_256x240.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_flat_55_eeeeee_40x100.png,assets/www/jqwidgets/styles/images/le-fro
g/ui-bg_inset-soft_10_285c00_1x100.png,assets/www/jqwidgets/styles/images/darkness/ui-icons_ffffff_256x240.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_highlight-soft_50_4eb305_1x100.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_flat_0_aaaaaa_40x100.png,assets/www/jqwidgets/styles/images/lightness/ui-bg_diagonals-thick_18_b81900_40x40.png,assets/www/jqwidgets/styles/images/smoothness/ui-bg_glass_65_ffffff_1x400.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_highlight-soft_80_eeeeee_1x100.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_flat_30_cccccc_40x100.png,assets/www/jqwidgets/styles/images/overcast/ui-icons_3383bb_256x240.png,assets/www/plugins/cordova-plugin-netcontroll-integration-fiserv/www/NetControllCordovaPluginsIntegrationFiserv.js,assets/www/jqwidgets/styles/images/lightness/ui-bg_flat_10_000000_40x100.png,assets/www/jqwidgets/styles/images/overcast/ui-icons_70b2e1_256x240.png,assets/www/jqwidgets/styles/images/roundbg_check_indeterminate.png
,assets/www/jqwidgets/styles/images/redmond/ui-bg_inset-hard_100_fcfdfd_1x100.png,assets/www/jqwidgets/styles/images/redmond/ui-icons_2e83ff_256x240.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_glass_40_ffc73d_1x400.png,assets/www/jqwidgets/styles/images/start/ui-bg_flat_75_aaaaaa_40x100.png,META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version,META-INF/androidx.lifecycle_lifecycle-viewmodel-savedstate.version,assets/www/jqwidgets/styles/images/redmond/ui-icons_217bc0_256x240.png,assets/www/jqwidgets/styles/images/sunny/ui-icons_3d3d3d_256x240.png,assets/www/jqwidgets/styles/images/start/ui-bg_gloss-wave_50_6eac2c_500x100.png,assets/www/jqwidgets/styles/images/start/ui-bg_inset-hard_100_fcfdfd_1x100.png,assets/www/jqwidgets/styles/images/sunny/ui-icons_ed9f26_256x240.png,assets/www/jqwidgets/styles/images/sunny/ui-icons_ffe180_256x240.png,assets/www/jqwidgets/styles/images/start/ui-bg_glass_55_f8da4e_1x400.png,assets/www/jqwidgets/styles/images/smoothness/ui
-bg_glass_75_dadada_1x400.png,assets/www/jqwidgets/styles/images/colorpicker/map-saturation-overlay.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_glass_35_dddddd_1x400.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_inset-hard_75_999999_1x100.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_glass_85_dfeffc_1x400.png,assets/www/jqwidgets/styles/images/wp_check_indeterminate_white.png,assets/www/jqwidgets/styles/images/colorpicker/map-saturation.png,assets/www/jqwidgets/styles/images/start/ui-icons_e0fdff_256x240.png,assets/www/jqwidgets/styles/images/start/ui-icons_0078ae_256x240.png,assets/www/jqwidgets/styles/images/redmond/ui-icons_f9bd01_256x240.png,assets/www/jqwidgets/styles/images/start/ui-bg_gloss-wave_45_e14f1c_500x100.png,assets/www/jqwidgets/styles/images/le-frog/ui-icons_ffffff_256x240.png,assets/www/jqwidgets/styles/images/sunny/ui-icons_d19405_256x240.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_highlight-soft_33_3a8104_1x100.png,assets/www/jqw
idgets/styles/images/sunny/ui-icons_bd7b00_256x240.png,assets/www/jqwidgets/styles/images/start/ui-icons_056b93_256x240.png,META-INF/androidx.asynclayoutinflater_asynclayoutinflater.version,assets/www/jqwidgets/styles/images/sunny/ui-bg_gloss-wave_60_fece2f_500x100.png,assets/www/plugins/cordova-plugin-netcontroll-integration-fiserv/www/pos/FiservPOS.js,assets/www/jqwidgets/styles/images/smoothness/ui-icons_222222_256x240.png,assets/www/jqwidgets/styles/images/start/ui-icons_f7a50d_256x240.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_glass_40_0078a3_1x400.png,assets/www/jqwidgets/styles/images/redmond/ui-icons_d8e7f3_256x240.png,assets/www/jqwidgets/styles/images/overcast/ui-icons_454545_256x240.png,assets/www/jqwidgets/styles/images/start/ui-bg_flat_55_999999_40x100.png,assets/www/jqwidgets/styles/images/redmond/ui-icons_cd0a0a_256x240.png,assets/www/jqwidgets/styles/images/bg_blackpressed_horizontal.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_inset-soft_25_00000
0_1x100.png,assets/www/jqwidgets/styles/images/redmond/ui-icons_469bdd_256x240.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_glass_95_fef1ec_1x400.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_highlight-hard_30_285c00_1x100.png,assets/www/jqwidgets/styles/images/lightness/ui-icons_222222_256x240.png,assets/www/jqwidgets/styles/images/lightness/ui-icons_ffd27a_256x240.png,assets/www/jqwidgets/styles/images/le-frog/ui-bg_glass_55_fbf5d0_1x400.png,assets/www/jqwidgets/styles/images/sunny/ui-bg_gloss-wave_70_ffdd57_500x100.png,assets/www/jqwidgets/styles/images/darkness/ui-bg_glass_20_555555_1x400.png,assets/www/plugins/cordova-plugin-splashscreen/www/splashscreen.js,assets/www/jqwidgets/styles/images/le-frog/ui-bg_diagonals-thick_15_444444_40x40.png,assets/www/jqwidgets/styles/images/start/ui-bg_glass_75_79c9ec_1x400.png,assets/www/jqwidgets/styles/images/le-frog/ui-icons_cd0a0a_256x240.png,assets/www/jqwidgets/styles/images/redmond/ui-icons_6da8d5_256x240.png,assets/www/
jqwidgets/styles/images/sunny/ui-bg_inset-soft_30_ffffff_1x100.png,assets/www/jqwidgets/styles/images/overcast/ui-bg_glass_60_eeeeee_1x400.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_gloss-wave_55_5c9ccc_500x100.png,assets/www/jqwidgets/styles/images/lightness/ui-bg_highlight-soft_75_ffe45c_1x100.png,assets/www/jqwidgets/styles/images/sunny/ui-bg_gloss-wave_90_fff9e5_500x100.png,assets/www/jqwidgets/styles/images/lightness/ui-bg_glass_100_fdf5ce_1x400.png,assets/www/jqwidgets/styles/images/check_lightblue_indeterminate.png,assets/www/jqwidgets/styles/images/lightness/ui-icons_228ef1_256x240.png,assets/www/jqwidgets/styles/images/darkness/ui-icons_4b8e0b_256x240.png,assets/www/jqwidgets/styles/images/overcast/ui-icons_999999_256x240.png,assets/www/jqwidgets/styles/images/sunny/ui-bg_diagonals-medium_20_d34d17_40x40.png,assets/www/jqwidgets/styles/images/lightness/ui-bg_glass_100_f6f6f6_1x400.png,assets/www/jqwidgets/styles/images/start/ui-icons_d8e7f3_256x240.png,assets/www/
jqwidgets/styles/images/smoothness/ui-bg_glass_95_fef1ec_1x400.png,assets/www/jqwidgets/styles/images/smoothness/ui-bg_flat_75_ffffff_40x100.png,assets/www/jqwidgets/styles/images/darkness/ui-icons_cccccc_256x240.png,assets/www/jqwidgets/styles/images/redmond/ui-bg_glass_75_d0e5f5_1x400.png,assets/www/jqwidgets/styles/images/darkness/ui-icons_a83300_256x240.png’,), <traceback object at 0x7fdb79a69440>)
Exception while verifying /opt/clover/prod3xsign/apks/downloaded-2025-11-07_22.01.02/com.netcontroll.pdv-11110.apk

Thank you in advance, and I look forward to your guidance on how to resolve this issue.

Thanks for reaching out. I want to understand the signing issue first, before getting into the manifest issue. Are you saying your third party platform rejects the additional data added to the APK by the V1 + V2 signing scheme that’s standard throughout the Android ecosystem? Google states:

The new format is backwards compatible, so APKs signed with the new signature format can be installed on older Android devices (which simply ignore the extra data added to the APK), as long as these APKs are also v1-signed.

Can you confirm your platform is somehow not compatible with v2? What error do you get?

Sorry, I didn’t explain it properly earlier.

We are uploading our application to a third-party platform (Clover). To submit the APK for their approval, they require the package to be signed using only the V1 signature scheme.

The ManifestChecksumError mentioned above was likely caused by my attempt to re-sign the APK using jarsigner -keystore... in order to force it to use V1 only (I re-signed it directly after compiling the APK via Voltbuilder, which outputs V1 + V2).

By using the method above (jarsigner -keystore...), I was in fact able to end up with only V1 signing and submit it to Clover. However, they reported the ManifestChecksumError on their side during their signing process.

Another attempt I made was deleting the META-INF folder inside the APK and then re-signing it. This also worked and I was able to submit it to Clover, but this method triggered a virus warning during their initial validation (via www.virustotal.com), so we cannot proceed with that approach.

I believe our only option now is either to generate an unsigned APK or generate an APK signed directly with V1 only.

Below is the documentation for reference:
https://docs.clover.com/dev/docs/generating-a-signed-apk

I see the problem. I don’t understand why Clover has this restriction (they should honestly allow later signing versions) but I’m working to allow an option to control your signing version. I will let you know when this change is complete.