I am using adb (latest one) from Android SDK Platform Tools. I also installed the adb driver from Intel USB Drivers for Android Devices. All installation done on two computer, one with Windows 8.1, another with Windows 10. The phone being tested for this backup experiment is TP-Link Neffos X1 Lite.
I am using the commands given by Izzy as described in Is it possible to backup and restore an app with data via ADB? to backup the game Jetpack Joyride.
adb backup -f myapp.ab -apk com.myapp # backup on one device
But, I end up with a 1KB backup file (not 0 KB or 41 bytes that Izzy mentioned there).
I tested with different modes (charging, MIDI, MTP and PTP) with same result of 1KB backup file.
Here is the manifest of the app:
<?xml version="1.0" encoding="UTF-8"?>
<manifest
versionCode='50199503'
versionName='1.14.2'
installLocation='0'
compileSdkVersion='28'
compileSdkVersionCodename='9'
package='com.halfbrick.jetpackjoyride'
platformBuildVersionCode='28'
platformBuildVersionName='9'>
<uses-sdk
minSdkVersion='16'
targetSdkVersion='26'
xlargeScreens='true'>
</uses-sdk>
<uses-feature
glEsVersion='0x00020000'>
</uses-feature>
<uses-feature
name='android.hardware.touchscreen'
required='true'>
</uses-feature>
<uses-permission
name='android.permission.INTERNET'>
</uses-permission>
<uses-permission
name='android.permission.ACCESS_NETWORK_STATE'>
</uses-permission>
<uses-permission
name='android.permission.WAKE_LOCK'>
</uses-permission>
<uses-permission
name='com.android.vending.BILLING'>
</uses-permission>
<uses-permission
name='android.permission.ACCESS_WIFI_STATE'>
</uses-permission>
<uses-permission
name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE'>
</uses-permission>
<uses-permission
name='com.google.android.c2dm.permission.RECEIVE'>
</uses-permission>
<application
theme='@res/0x7F0D0165'
label='@res/0x7F0A00DB'
icon='@res/0x7F030001'
name='com.halfbrick.mortar.MortarApplication'
backupAgent='com.halfbrick.mortar.SharedPrefBackupAgent'
hardwareAccelerated='true'
supportsRtl='true'
resizeableActivity='false'
appComponentFactory='android.support.v4.app.CoreComponentFactory'>
<meta-data
name='io.fabric.ApiKey'
value='3c59abf6040024f2e259d458cc26f0e7f1e305b7'>
</meta-data>
<meta-data
name='com.google.firebase.messaging.default_notification_icon'
resource='@res/0x7F0200C8'>
</meta-data>
<meta-data
name='com.google.firebase.messaging.default_notification_channel_id'
value='@res/0x7F0A00F8'>
</meta-data>
<activity
theme='@res/0x7F0D0172'
name='com.halfbrick.mortar.MortarGameActivity'
launchMode='2'
screenOrientation='6'
configChanges='0x40000FFF'
windowSoftInputMode='0x00000003'>
<intent-filter>
<action
name='android.intent.action.VIEW'>
</action>
<category
name='android.intent.category.DEFAULT'>
</category>
<category
name='android.intent.category.BROWSABLE'>
</category>
<data
scheme='jetpack'>
</data>
</intent-filter>
<intent-filter
autoVerify='true'>
<action
name='android.intent.action.VIEW'>
</action>
<category
name='android.intent.category.DEFAULT'>
</category>
<category
name='android.intent.category.BROWSABLE'>
</category>
<data
scheme='http'
host='jetpackjoyride.page.link'>
</data>
<data
scheme='https'
host='jetpackjoyride.page.link'>
</data>
</intent-filter>
<meta-data
name='com.halfbrick.mortar.GCMSenderId'
value='id=897786220322'>
</meta-data>
<intent-filter>
<action
name='android.intent.action.MAIN'>
</action>
</intent-filter>
</activity>
<receiver
name='com.appsflyer.MultipleInstallBroadcastReceiver'
exported='true'>
<intent-filter>
<action
name='com.android.vending.INSTALL_REFERRER'>
</action>
</intent-filter>
</receiver>
<meta-data
name='com.google.android.gms.version'
value='@res/0x7F0F0008'>
</meta-data>
<receiver
name='com.google.android.gms.measurement.AppMeasurementReceiver'
enabled='true'
exported='false'>
</receiver>
<receiver
name='com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver'
permission='android.permission.INSTALL_PACKAGES'
enabled='true'
exported='true'>
<intent-filter>
<action
name='com.android.vending.INSTALL_REFERRER'>
</action>
</intent-filter>
</receiver>
<service
name='com.google.android.gms.measurement.AppMeasurementService'
enabled='true'
exported='false'>
</service>
<service
name='com.google.android.gms.measurement.AppMeasurementJobService'
permission='android.permission.BIND_JOB_SERVICE'
enabled='true'
exported='false'>
</service>
<activity
theme='@res/0x01030010'
name='com.google.android.gms.common.api.GoogleApiActivity'
exported='false'>
</activity>
<activity
theme='@res/0x01030010'
name='com.google.android.gms.auth.api.signin.internal.SignInHubActivity'
exported='false'
excludeFromRecents='true'>
</activity>
<service
name='com.google.android.gms.auth.api.signin.RevocationBoundService'
permission='com.google.android.gms.auth.api.signin.permission.REVOCATION_NOTIFICATION'
exported='true'>
</service>
<activity
theme='@res/0x0103000F'
name='com.google.android.gms.ads.AdActivity'
exported='false'
configChanges='0x00000FB0'>
</activity>
<provider
name='android.support.v4.content.FileProvider'
exported='false'
authorities='com.halfbrick.jetpackjoyride.AndroidShareFileProvider'
grantUriPermissions='true'>
<meta-data
name='android.support.FILE_PROVIDER_PATHS'
resource='@res/0x7F080001'>
</meta-data>
</provider>
<meta-data
name='com.facebook.sdk.ApplicationId'
value='@res/0x7F0A00FC'>
</meta-data>
<meta-data
name='com.facebook.sdk.AutoLogAppEventsEnabled'
value='false'>
</meta-data>
<meta-data
name='com.google.android.gms.games.APP_ID'
value='@res/0x7F0A0103'>
</meta-data>
<activity
name='com.ironsource.sdk.controller.ControllerActivity'
configChanges='0x00000480'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x0103000F'
name='com.ironsource.sdk.controller.InterstitialActivity'
configChanges='0x00000480'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x0103000F'
name='com.ironsource.sdk.controller.OpenUrlActivity'
configChanges='0x00000480'
hardwareAccelerated='true'>
</activity>
<activity
name='com.adcolony.sdk.AdColonyInterstitialActivity'
configChanges='0x000004A0'
hardwareAccelerated='true'>
</activity>
<activity
name='com.adcolony.sdk.AdColonyAdViewActivity'
configChanges='0x000004A0'
hardwareAccelerated='true'>
</activity>
<activity
name='com.applovin.adview.AppLovinInterstitialActivity'>
</activity>
<activity
name='com.applovin.adview.AppLovinConfirmationActivity'>
</activity>
<activity
theme='@res/0x01030011'
name='com.chartboost.sdk.CBImpressionActivity'
excludeFromRecents='true'
configChanges='0x000004A0'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x01030007'
name='com.unity3d.services.ads.adunit.AdUnitActivity'
configChanges='0x40000FFF'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x01030011'
name='com.unity3d.services.ads.adunit.AdUnitTransparentActivity'
configChanges='0x40000FFF'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x01030011'
name='com.unity3d.services.ads.adunit.AdUnitTransparentSoftwareActivity'
configChanges='0x40000FFF'
hardwareAccelerated='false'>
</activity>
<activity
theme='@res/0x01030007'
name='com.unity3d.services.ads.adunit.AdUnitSoftwareActivity'
configChanges='0x40000FFF'
hardwareAccelerated='false'>
</activity>
<activity
name='com.facebook.ads.AudienceNetworkActivity'
configChanges='0x000004A0'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x01030007'
label='HyprMX SDK'
name='com.hyprmx.android.sdk.activity.HyprMXOfferViewerActivity'
launchMode='1'
configChanges='0x00000DA0'
hardwareAccelerated='true'>
</activity>
<activity
theme='@res/0x01030007'
name='com.hyprmx.android.sdk.activity.HyprMXRequiredInformationActivity'
configChanges='0x00000DA0'>
</activity>
<activity
theme='@res/0x01030007'
name='com.hyprmx.android.sdk.activity.HyprMXNoOffersActivity'
configChanges='0x00000DA0'>
</activity>
<activity
theme='@res/0x01030007'
name='com.hyprmx.android.sdk.videoplayer.HyprMXVideoPlayerActivity'
configChanges='0x00000DA0'
hardwareAccelerated='true'>
</activity>
<activity
name='com.ironsource.adapters.hyprmx.MediationHMXActivity'
configChanges='0x40000FB4'>
</activity>
<receiver
name='com.halfbrick.mortar.StoreIntentReceiver'
exported='true'>
<intent-filter>
<action
name='com.android.vending.INSTALL_REFERRER'>
</action>
</intent-filter>
</receiver>
<receiver
name='com.halfbrick.mortar.LocalNotificationReceiver'
process=':remote'>
</receiver>
<service
name='com.halfbrick.mortar.FirebaseMessagingService'>
<intent-filter>
<action
name='com.google.firebase.MESSAGING_EVENT'>
</action>
</intent-filter>
</service>
<activity
name='com.halfbrick.mortar.MortarGameLauncherActivity'>
<intent-filter>
<action
name='android.intent.action.MAIN'>
</action>
<category
name='android.intent.category.LAUNCHER'>
</category>
</intent-filter>
</activity>
<activity
name='com.halfbrick.mortar.UserDataConsentActivity'
launchMode='2'
screenOrientation='6'>
</activity>
<activity
theme='@res/0x01030010'
name='com.android.billingclient.api.ProxyBillingActivity'
configChanges='0x000005B0'>
</activity>
<service
name='com.google.firebase.components.ComponentDiscoveryService'
exported='false'>
<meta-data
name='com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar'
value='com.google.firebase.components.ComponentRegistrar'>
</meta-data>
<meta-data
name='com.google.firebase.components:com.google.firebase.auth.FirebaseAuthRegistrar'
value='com.google.firebase.components.ComponentRegistrar'>
</meta-data>
<meta-data
name='com.google.firebase.components:com.google.firebase.firestore.FirestoreRegistrar'
value='com.google.firebase.components.ComponentRegistrar'>
</meta-data>
<meta-data
name='com.google.firebase.components:com.google.firebase.functions.FunctionsRegistrar'
value='com.google.firebase.components.ComponentRegistrar'>
</meta-data>
<meta-data
name='com.google.firebase.components:com.google.firebase.iid.Registrar'
value='com.google.firebase.components.ComponentRegistrar'>
</meta-data>
</service>
<activity
theme='@res/0x01030010'
name='com.google.firebase.auth.internal.FederatedSignInActivity'
permission='com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN'
exported='true'
excludeFromRecents='true'
launchMode='2'>
</activity>
<service
name='com.google.firebase.messaging.FirebaseMessagingService'
exported='true'>
<intent-filter
priority='-500'>
<action
name='com.google.firebase.MESSAGING_EVENT'>
</action>
</intent-filter>
</service>
<receiver
name='com.google.firebase.iid.FirebaseInstanceIdReceiver'
permission='com.google.android.c2dm.permission.SEND'
exported='true'>
<intent-filter>
<action
name='com.google.android.c2dm.intent.RECEIVE'>
</action>
</intent-filter>
</receiver>
<service
name='com.google.firebase.iid.FirebaseInstanceIdService'
exported='true'>
<intent-filter
priority='-500'>
<action
name='com.google.firebase.INSTANCE_ID_EVENT'>
</action>
</intent-filter>
</service>
<provider
name='com.google.firebase.provider.FirebaseInitProvider'
exported='false'
authorities='com.halfbrick.jetpackjoyride.firebaseinitprovider'
initOrder='100'>
</provider>
<provider
name='com.crashlytics.android.CrashlyticsInitProvider'
exported='false'
authorities='com.halfbrick.jetpackjoyride.crashlyticsinitprovider'
initOrder='90'>
</provider>
<provider
name='com.helpshift.support.providers.HelpshiftFileProvider'
exported='false'
authorities='com.halfbrick.jetpackjoyride.helpshift.fileprovider'
grantUriPermissions='true'>
<meta-data
name='android.support.FILE_PROVIDER_PATHS'
resource='@res/0x7F080002'>
</meta-data>
</provider>
<activity
theme='@res/0x7F0D000E'
name='com.helpshift.support.activities.ParentActivity'>
</activity>
<activity
theme='@res/0x7F0D0108'
name='com.helpshift.support.HSReview'
configChanges='0x00000480'>
</activity>
<activity
theme='@res/0x7F0D000E'
name='com.helpshift.campaigns.activities.ParentActivity'>
</activity>
<activity
theme='@res/0x01030010'
name='com.helpshift.campaigns.activities.NotificationActivity'
taskAffinity=''
excludeFromRecents='true'
launchMode='2'
configChanges='0x00002484'
noHistory='true'>
</activity>
<service
name='com.helpshift.campaigns.services.NotificationService'
exported='false'>
</service>
<activity
theme='@res/0x7F0D021B'
name='com.facebook.FacebookActivity'
configChanges='0x000005B0'>
</activity>
<activity
name='com.facebook.CustomTabMainActivity'>
</activity>
<activity
name='com.facebook.CustomTabActivity'>
</activity>
<provider
name='com.facebook.marketing.internal.MarketingInitProvider'
exported='false'
authorities='com.halfbrick.jetpackjoyride.MarketingInitProvider'>
</provider>
<provider
name='com.facebook.internal.FacebookInitProvider'
exported='false'
authorities='com.halfbrick.jetpackjoyride.FacebookInitProvider'>
</provider>
<receiver
name='com.facebook.CurrentAccessTokenExpirationBroadcastReceiver'
exported='false'>
<intent-filter>
<action
name='com.facebook.sdk.ACTION_CURRENT_ACCESS_TOKEN_CHANGED'>
</action>
</intent-filter>
</receiver>
</application>
</manifest>
As advised by Firelord, the following command was executed.
adb logcat -v long > backup_log.txt
and something strange appear as follows:
[ E/BackupRestoreConfirmation ]
Unable to communicate with mount service: no permission to access the crypt keeper: Neither user 10004 nor current process has android.permission.STORAGE_INTERNAL.
ALLOW_BACKUP:NO
in the manifest of the app. Developers can lock their apps against being backed-up, unfortunately. I usually mention that along the 41 byte files – as that's the most likely cause for them.