Describe the bug:
Android Q introduced Scoped Storage, so for previous API level, we muse use requestLegacyExternalStorage manifest attribute to access external storage.
If the app manifest does not contain android:requestLegacyExternalStorage="true" , apk will be wrapped successfully, but when adding android:requestLegacyExternalStorage="true" into manifest, then wrapping failed.
To Reproduce
Steps to reproduce the behavior:
Set app targetSdkVersion to 29
Add android:requestLegacyExternalStorage="true" in app manifest
Build & Sign apk
Wrap apk
Expected behavior:
Wrap successfully.
Screenshots and logs:
Application wrapping in progress. App Wrapping Tool Version: 1.0.2676.4
Using Apktool 2.4.0 on app-release.apk
Loading resource table...
Decoding AndroidManifest.xml with resources...
Loading resource table from file: C:\Users\XXX\framework\1.apk
Regular manifest package...
Decoding file-resources...
Win version: 0x4a61000a = 1247870986 (Windows Vista)
Decoding values / XMLs...
Baksmaling classes.dex...
Copying assets and libs...
Copying unknown files...
Copying original files...
Using Apktool 2.4.0 on IntuneAppBase.apk
Loading resource table...
Decoding AndroidManifest.xml with resources...
Loading resource table from file: C:\Users\XXX\framework\1.apk
Regular manifest package...
Decoding file-resources...
Decoding values / XMLs...
Baksmaling classes.dex...
Copying assets and libs...
Copying unknown files...
Copying original files...
Checking whether resources has changed...
Building resources...
C:\Users\XXX\sourceApk\res\values\public.xml:944: error: resource 'drawable/$avd_hide_password0' has invalid entry name '$avd_hide_password0'. Invalid character '$avd_hide_password0'.
C:\Users\XXX\sourceApk\res\values\public.xml:945: error: resource 'drawable/$avd_hide_password1' has invalid entry name '$avd_hide_password1'. Invalid character '$avd_hide_password1'.
C:\Users\XXX\sourceApk\res\values\public.xml:946: error: resource 'drawable/$avd_hide_password2' has invalid entry name '$avd_hide_password2'. Invalid character '$avd_hide_password2'.
C:\Users\XXX\sourceApk\res\values\public.xml:947: error: resource 'drawable/$avd_show_password0' has invalid entry name '$avd_show_password0'. Invalid character '$avd_show_password0'.
C:\Users\XXX\sourceApk\res\values\public.xml:948: error: resource 'drawable/$avd_show_password1' has invalid entry name '$avd_show_password1'. Invalid character '$avd_show_password1'.
C:\Users\XXX\sourceApk\res\values\public.xml:949: error: resource 'drawable/$avd_show_password2' has invalid entry name '$avd_show_password2'. Invalid character '$avd_show_password2'.
C:\Users\XXX\sourceApk\res\values\public.xml:950: error: resource 'drawable/$ic_launcher_foreground0' has invalid entry name '$ic_launcher_foreground0'. Invalid character '$ic_launcher_foreground__0'.
aapt2 compile command ran:
[C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, compile, --dir, C:\Users\XXX\sourceApk\res, --legacy, -o, C:\Users\XXX\sourceApk\build\resources.zip]
C:\Users\XXX\sourceApk\AndroidManifest.xml:3: error: attribute android:requestLegacyExternalStorage not found.
error: failed processing manifest.
Failed to package app.
com.microsoft.intune.mam.apppackager.utils.AppPackagerException: Failed to load app resource table.
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:159)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102)
com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177)
com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66)
com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117)
com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223)
com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59)
brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, link, -o, C:\Users\XXX\APKTOOL1962742739692646152.tmp, --package-id, 127, --rename-manifest-package, AppPackager.AppBase, --rename-instrumentation-target-package, AppPackager.AppBase, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, -0, arsc, -I, C:\Users\XXX\framework\1.apk, --manifest, C:\Users\XXX\sourceApk\AndroidManifest.xml, C:\Users\XXX\sourceApk\build\resources.zip]
brut.androlib.Androlib.buildResourcesFull(Androlib.java:503)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:150)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102)
com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177)
com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66)
com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117)
com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223)
com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59)
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, link, -o, C:\Users\XXX\APKTOOL1962742739692646152.tmp, --package-id, 127, --rename-manifest-package, AppPackager.AppBase, --rename-instrumentation-target-package, AppPackager.AppBase, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, -0, arsc, -I, C:\Users\XXX\framework\1.apk, --manifest, C:\Users\XXX\sourceApk\AndroidManifest.xml, C:\Users\XXX\sourceApk\build\resources.zip]
brut.androlib.res.AndrolibResources.aapt2Package(AndrolibResources.java:473)
brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:601)
brut.androlib.Androlib.buildResourcesFull(Androlib.java:481)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:150)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102)
com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177)
com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66)
com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117)
com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223)
com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59)
brut.common.BrutException: could not exec (exit code = 1): [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, link, -o, C:\Users\XXX\APKTOOL1962742739692646152.tmp, --package-id, 127, --rename-manifest-package, AppPackager.AppBase, --rename-instrumentation-target-package, AppPackager.AppBase, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, -0, arsc, -I, C:\Users\XXX\framework\1.apk, --manifest, C:\Users\XXX\sourceApk\AndroidManifest.xml, C:\Users\XXX\sourceApk\build\resources.zip]
brut.util.OS.exec(OS.java:98)
brut.androlib.res.AndrolibResources.aapt2Package(AndrolibResources.java:469)
brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:601)
brut.androlib.Androlib.buildResourcesFull(Androlib.java:481)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:150)
com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102)
com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177)
com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66)
com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117)
com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223)
com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59)
Failed to load app resource table.
Verbose logs can be found at: C:\Users\XXX\IntuneAppWrappingToolLog_20200224_110817.txt.
The application could not be wrapped.
Intune app wrapping tool (please complete the following information):
What version of the wrapper are you using? Are you using the latest version?
1.0.2676.4
What platform is your app based in (Java, Xamarin based, Cordova, etc)?
Java
Additional context:
Add any other context about the problem here.
Describe the bug: Android Q introduced Scoped Storage, so for previous API level, we muse use requestLegacyExternalStorage manifest attribute to access external storage.
If the app manifest does not contain android:requestLegacyExternalStorage="true" , apk will be wrapped successfully, but when adding android:requestLegacyExternalStorage="true" into manifest, then wrapping failed.
To Reproduce Steps to reproduce the behavior:
Expected behavior: Wrap successfully.
Screenshots and logs:
Application wrapping in progress. App Wrapping Tool Version: 1.0.2676.4 Using Apktool 2.4.0 on app-release.apk Loading resource table... Decoding AndroidManifest.xml with resources... Loading resource table from file: C:\Users\XXX\framework\1.apk Regular manifest package... Decoding file-resources... Win version: 0x4a61000a = 1247870986 (Windows Vista) Decoding values / XMLs... Baksmaling classes.dex... Copying assets and libs... Copying unknown files... Copying original files... Using Apktool 2.4.0 on IntuneAppBase.apk Loading resource table... Decoding AndroidManifest.xml with resources... Loading resource table from file: C:\Users\XXX\framework\1.apk Regular manifest package... Decoding file-resources... Decoding values / XMLs... Baksmaling classes.dex... Copying assets and libs... Copying unknown files... Copying original files... Checking whether resources has changed... Building resources... C:\Users\XXX\sourceApk\res\values\public.xml:944: error: resource 'drawable/$avd_hide_password0' has invalid entry name '$avd_hide_password0'. Invalid character '$avd_hide_password0'. C:\Users\XXX\sourceApk\res\values\public.xml:945: error: resource 'drawable/$avd_hide_password1' has invalid entry name '$avd_hide_password1'. Invalid character '$avd_hide_password1'. C:\Users\XXX\sourceApk\res\values\public.xml:946: error: resource 'drawable/$avd_hide_password2' has invalid entry name '$avd_hide_password2'. Invalid character '$avd_hide_password2'. C:\Users\XXX\sourceApk\res\values\public.xml:947: error: resource 'drawable/$avd_show_password0' has invalid entry name '$avd_show_password0'. Invalid character '$avd_show_password0'. C:\Users\XXX\sourceApk\res\values\public.xml:948: error: resource 'drawable/$avd_show_password1' has invalid entry name '$avd_show_password1'. Invalid character '$avd_show_password1'. C:\Users\XXX\sourceApk\res\values\public.xml:949: error: resource 'drawable/$avd_show_password2' has invalid entry name '$avd_show_password2'. Invalid character '$avd_show_password2'. C:\Users\XXX\sourceApk\res\values\public.xml:950: error: resource 'drawable/$ic_launcher_foreground0' has invalid entry name '$ic_launcher_foreground0'. Invalid character '$ic_launcher_foreground__0'. aapt2 compile command ran: [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, compile, --dir, C:\Users\XXX\sourceApk\res, --legacy, -o, C:\Users\XXX\sourceApk\build\resources.zip] C:\Users\XXX\sourceApk\AndroidManifest.xml:3: error: attribute android:requestLegacyExternalStorage not found. error: failed processing manifest. Failed to package app. com.microsoft.intune.mam.apppackager.utils.AppPackagerException: Failed to load app resource table. com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:159) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102) com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177) com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66) com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117) com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223) com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59) brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, link, -o, C:\Users\XXX\APKTOOL1962742739692646152.tmp, --package-id, 127, --rename-manifest-package, AppPackager.AppBase, --rename-instrumentation-target-package, AppPackager.AppBase, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, -0, arsc, -I, C:\Users\XXX\framework\1.apk, --manifest, C:\Users\XXX\sourceApk\AndroidManifest.xml, C:\Users\XXX\sourceApk\build\resources.zip] brut.androlib.Androlib.buildResourcesFull(Androlib.java:503) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:150) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102) com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177) com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66) com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117) com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223) com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59) brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, link, -o, C:\Users\XXX\APKTOOL1962742739692646152.tmp, --package-id, 127, --rename-manifest-package, AppPackager.AppBase, --rename-instrumentation-target-package, AppPackager.AppBase, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, -0, arsc, -I, C:\Users\XXX\framework\1.apk, --manifest, C:\Users\XXX\sourceApk\AndroidManifest.xml, C:\Users\XXX\sourceApk\build\resources.zip] brut.androlib.res.AndrolibResources.aapt2Package(AndrolibResources.java:473) brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:601) brut.androlib.Androlib.buildResourcesFull(Androlib.java:481) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:150) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102) com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177) com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66) com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117) com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223) com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59) brut.common.BrutException: could not exec (exit code = 1): [C:\Users\XXX\brut_util_Jar_6516806088557161733.tmp, link, -o, C:\Users\XXX\APKTOOL1962742739692646152.tmp, --package-id, 127, --rename-manifest-package, AppPackager.AppBase, --rename-instrumentation-target-package, AppPackager.AppBase, --no-auto-version, --no-version-vectors, --no-version-transitions, --no-resource-deduping, -0, arsc, -I, C:\Users\XXX\framework\1.apk, --manifest, C:\Users\XXX\sourceApk\AndroidManifest.xml, C:\Users\XXX\sourceApk\build\resources.zip] brut.util.OS.exec(OS.java:98) brut.androlib.res.AndrolibResources.aapt2Package(AndrolibResources.java:469) brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:601) brut.androlib.Androlib.buildResourcesFull(Androlib.java:481) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.loadResourceTable(ResourceUtils.java:150) com.microsoft.intune.mam.apppackager.utils.ResourceUtils.mergeResources(ResourceUtils.java:102) com.microsoft.intune.mam.apppackager.WrapperAgent.wrapResources(WrapperAgent.java:177) com.microsoft.intune.mam.apppackager.AbstractWrapperAgent.wrap(AbstractWrapperAgent.java:66) com.microsoft.intune.mam.apppackager.AppPackager.packageApp(AppPackager.java:117) com.microsoft.intune.mam.apppackager.PackagerMain.mainInternal(PackagerMain.java:223) com.microsoft.intune.mam.apppackager.PackagerMain.main(PackagerMain.java:59) Failed to load app resource table. Verbose logs can be found at: C:\Users\XXX\IntuneAppWrappingToolLog_20200224_110817.txt. The application could not be wrapped.
Intune app wrapping tool (please complete the following information):
Additional context: Add any other context about the problem here.