What exactly happens when you insist on flashing without wiping and formatting?
You’ve heard it said time and time again: for the best experience, you really need to “wipe your partitions and format your data”. This way, you will be able to experience the ROM operating at its best, as the developers intended.
But you never really cared because so far nobody has been able to explain to you in simple terms why you really have to do it. So, here we go: I actually dirty flashed (for the purpose of this blog).
What does a “clean” flash with format data mean?
A clean flash with format data is a process in which the device is flashed with a new version of the operating system. This process erases all existing data and settings on the device and reinstalls the fresh version of the OS.
This ensures that the device is running the latest version of the operating system and is free from any potential problems caused by old versions and by the TONES (I am actually NOT exaggerating ) of leftover files from either the other ROM you came from, or from the PREVIOUS VERSION ROM.The act of formatting and wiping is done on something called “partitions”. These partitions are locations present on your device. (I explained it as simple as I could ).
There are lots of partitions on Android but the main ones you will see and work with are:
- Boot Partition
- System Partition
- Vendor Partition
- Data Partition
- Cache Partition
- Recovery Partition
- Persist Partition
- OEM Partition
- Metadata Partition
- FOTA Partition
Let’s try to explain them in simple words:
- Boot Partition: This partition stores the bootloader and is responsible for loading the operating system when the device is powered on.
- System Partition: This partition stores the Android OS and its associated system files.
- Vendor Partition: This partition holds vendor-specific files, such as device drivers and hardware-specific OS components.
- Data Partition: This partition stores all of the user data, including applications, music, photos, and videos.
- Cache Partition: This partition stores temporary data, such as downloaded packages and installation files.
- Recovery Partition: This partition is used to store recovery images and other information needed to restore the device to its factory settings.
- Persist Partition: This partition stores settings and other data that persists across system updates and factory resets.
- OEM Partition: This partition stores manufacturer-specific files, such as logos and other brand-specific images.
- Metadata Partition: This partition stores metadata, such as partition table information and other information needed by the device to boot.
- FOTA Partition: This partition stores files needed for over-the-air (OTA) updates.
So your ROM files, your settings your preferences ,everything that makes your ROM look and behave the way you want it kind of resides in all those partitions. Along with your apps and all your data.
Why do I have to format data when upgrading the Android ROM or when coming from a different ROM?
When changing an Android ROM, you need to format data in order to ensure that the new ROM and its associated partitions are properly configured and optimized to work with the device. This helps to prevent any issues that could arise from incompatible data or settings from the previous ROM. It also helps to ensure that all of the data on the device is wiped and the device is reset to its factory settings. This also helps to improve the performance of the device by removing any redundant files or unnecessary data that may have been left over from the previous ROM.
And here is the million dollar question:
What kind of data from the previous ROM is left behind when a dirty flash is performed?
When a dirty flash is performed, the data from the previous ROM that is left behind typically includes user account information, application data, preferences, and settings. Additionally, any customisation or modifications made to the previous ROM may also remain in the system. Which of course that means that the old settings will be clashing with the settings the NEW ROM is trying to apply.
There’s a lot of stuff left behind from one version to an other or even worse, when you are coming from another ROM to ArrowOS. Stuff like :
data and files from the previous ROM that are left behind when a dirty flash is performed
- System settings: wallpaper, sound settings, app preferences, etc.
- Cached data: temporary files used by apps and the system.
- Dalvik-cache: created by the system to optimize app performance.
- Kernel data: used to store information about the kernel.
- Boot image: contains the kernel and the RAM disk.
- Bootloader: instructions for loading the operating system.
- Radio image: contains the radio’s firmware and other files.
- Recovery image: used to restore the device to its factory settings.
Now you begin to understand just how much stuff is left behind and how the potential for malfunctioning increases…
When you dirty flash there will be a lot of files left behind in an awful lot of places, and all those files have the potential to affect IMPORTANT PARTS of the NEW SYSTEM you just flashed on top of the old ROM.
Stuff like :
- Bluetooth Settings (Location: /data/misc/bluedroid)
- Wi-Fi Settings (Location: /data/misc/wifi)
- System Settings (Location: /data/system)
- Display Settings (Location: /data/system/display)
- Wallpaper Settings (Location: /data/system/wallpaper)
- Language Settings (Location: /data/system/language)
- Input Settings (Location: /data/system/input)
- Security Settings (Location: /data/system/security)
- Accessibility Settings (Location: /data/system/accessibility)
- Sound Settings (Location: /data/system/sound)
- Network Settings (Location: /data/system/net)
- Notification Settings (Location: /data/system/notifications)
- Dialer Settings (Location: /data/system/dialer)
- MMS Settings (Location: /data/system/mms)
- SMS Settings (Location: /data/system/sms)
- Application Settings (Location: /data/system/app)
- Privacy Settings (Location: /data/system/privacy)
- Accounts Settings (Location: /data/system/accounts)
- Power Management Settings (Location: /data/system/power)
- Keyboard Settings (Location: /data/system/keyboard)
- Display Mode Settings (Location: /data/system/display_mode)
- Lock Screen Settings (Location: /data/system/lockscreen)
- Media Settings (Location: /data/system/media)
- Time Zone Settings (Location: /data/system/timezone)
- Date and Time Settings (Location: /data/system/date_time)
- Device Settings (Location: /data/system/device)
- Application Permissions (Location: /data/system/permission)
- Application Permissions Settings (Location: /data/system/permission_setting)
- Application Settings (Location: /data/system/app)
- Application Restrictions (Location: /data/system/restriction)
- Application Logs (Location: /data/system/log)
- Backup and Restore Settings (Location: /data/system/backup)
- Device Administrator Settings (Location: /data/system/device_admin)
- Application Settings (Location: /data/system/app)
- File Access Settings (Location: /data/system/file_access)
- User Settings (Location: /data/system/user)
- Home Screen Settings (Location: /data/system/home)
- Font Settings (Location: /data/system/fonts)
- Theme Settings (Location: /data/system/themes)
- System UI Settings (Location: /data/system/ui)
- Accessibility Service Settings (Location: /data/system/accessibility_service)
- Input Method Settings (Location: /data/system/input_method)
- Home Screen Shortcuts (Location: /data/system/shortcuts)
- System Sounds Settings (Location: /data/system/sounds)
- System Accessibility Settings (Location: /data/system/accessibility)
- Notification Access Settings (Location: /data/system/notification_access)
- Voice Recognition Settings (Location: /data/system/voice_recognition)
- Volume Settings (Location: /data/system/volume)
- Network Traffic Settings (Location: /data/system/traffic)
- Network Usage Settings (Location: /data/system/network_usage)
Especially on a GAPPS build there would be a lot of OLD VERSIONS of the APKs and more importantly a lot of the OLD libraries left by the other programs and by the Google Apps themselves… So what are these libraries you ask: Well, bear with me:
Android Libraries are collections of Java classes and resources that are used to develop Android applications. They are used to provide a common set of functions that can be accessed by multiple applications. The libraries and frameworks provide a wide range of features such as image processing, networking, data storage, and media playback. They also enable developers to create more efficient and robust applications. By providing a shared codebase, the libraries and frameworks influence the operating system by making it easier to develop applications that can work across multiple versions of Android. Additionally, the libraries and frameworks help ensure that applications adhere to Google’s best practices and standards.
So in simple terms:Android Libraries are collections of tools that help developers create apps for Android phones and tablets. They make it easier for developers to create apps that work across different versions of Android and follow Google’s standards. They are files which usually end up in .SO . You will be able to recognize them very fast if you dare to open the terminal.
The following files from the previous rom will usually be left behind . Below is a SHORT LIST with what usually is left behind . Well all those libraries left behind will normally cause a library conflict.
What is a library conflict? I am glad you asked : Here it comes…. A library version conflict in Android is something that occurs when two or more different versions of a library are present in a project.
This can cause the apps to experience build errors or unexpected behaviours at runtime. Library version conflicts can be difficult to debug due to the complexity of the Android build system and the number of Android libraries that can be included in a project.
If you made it this far, now you understand why your ArrowOS build behaves the way it does…. Anyways… Assuming you are interested here’s a list with the usual libraries and APKs that are normally left behind when you perform a dirty flash. Now you begin to understand just how many things can go wrong because of a dirty flash. Next time… DON’T BLAME THE ARROWOS developers when your device is not performing properly after a dirty flash.
- lib/libc.so
- lib/libcutils.so
- lib/libdl.so
- lib/liblog.so
- lib/libm.so
- lib/libstdc++.so
- lib/libz.so
- lib/egl/libEGL_adreno.so
- lib/egl/libGLESv1_CM_adreno.so
- lib/egl/libGLESv2_adreno.so
- app/GoogleServicesFramework.apk
- app/GmsCore.apk
- app/GoogleBackupTransport.apk
- app/PrebuiltGmsCore.apk
- app/Vending.apk
- app/Gmail.apk
- app/GoogleLoginService.apk
- app/GoogleCalendarSyncAdapter.apk
- app/GoogleContactsSyncAdapter.apk
- app/GoogleTalk.apk
- app/GooglePartnerSetup.apk
- app/GooglePlayStore.apk
- app/GoogleContacts.apk
- app/GooglePlayServices.apk
- app/GoogleCalendar.apk
- app/GooglePlus.apk
- app/FaceLock.apk
- app/GoogleMusic.apk
- app/GoogleTTS.apk
- app/YouTube.apk
- app/GoogleSkyMap.apk
- app/GoogleMaps.apk
- app/GoogleStreetView.apk
- app/GoogleEarth.apk
- app/GoogleSearch.apk
- app/GoogleFeedback.apk
- app/GoogleVoiceSearch.apk
- app/GoogleSearchWidget.apk
- app/GoogleTTS.apk
- app/VoiceSearch.apk
- app/Talk.apk
- app/GoogleText-to-Speech.apk
- app/Maps.apk
- app/GooglePlayMusic.apk
- app/GoogleDrive.apk
- app/GooglePlus.apk
- app/GoogleSettings.apk
- app/GoogleHangouts.apk
- app/GoogleNow.apk
- app/GoogleCamera.apk
- app/GoogleTextTospeech.apk
- app/CyanogenModFileManager.apk
- app/GoogleNowLauncher.apk
- app/GoogleSearchWidget.apk
- app/GoogleCalendarWidget.apk
- app/GoogleCamera2.apk
- app/GooglePlayServices.apk
- app/GoogleCalculator.apk
- app/GoogleTranslate.apk
- app/GoogleVoice.apk
- app/GooglePlayBooks.apk
- app/GooglePlayMovies.apk
- app/GooglePlayNewsstand.apk
- app/GooglePlayGames.apk
- app/GooglePlayMagazines.apk
- app/GooglePlayMusic.apk
- app/GooglePlayMusicWidget.apk
- app/GoogleVoiceSearch.apk
- app/GoogleTTS.apk
- app/GoogleTVRemote.apk
- app/GoogleWallet.apk
- app/GoogleEarth.apk
- app/GoogleCarHome.apk
- app/GooglePlusWidget.apk
- app/GoogleQuickSearchBox.apk
- app/GoogleVoiceSearchWidget.apk
- app/GoogleCameraWidget.apk
- app/GoogleSearchWidget.apk
- app/GoogleDriveWidget.apk
- app/GooglePlayStoreWidget.apk
- app/GoogleMapsWidget.apk
- app/GoogleCalendarWidget.apk
- app/GoogleNowWidget.apk
- app/GoogleTranslateWidget.apk
- app/GoogleVoiceSearchWidget.apk
- app/GoogleCameraWidget.apk
- app/GoogleSearchWidget.apk
- app/GoogleDriveWidget.apk
- app/GooglePlayStoreWidget.apk
- app/GoogleMapsWidget.apk
- app/GoogleCalendarWidget.apk
- app/GoogleNowWidget.apk
- app/GoogleTranslateWidget.apk
- framework/com.google.android.maps.jar
- framework/com.google.android.media.effects.jar
- framework/com.google.widevine.software.drm.jar
- framework/com.android.future.usb.accessory.jar
- framework/com.google.android.maps.xml
- framework/com.google.android.media.effects.xml
- framework/com.google.widevine.software.drm.xml
- framework/com.android.future.usb.accessory.xml
- framework/com.google.android.gms.jar
- framework/com.google.android.gms.xml
- framework/com.google.android.gsf.jar
- framework/com.google.android.gsf.xml
- framework/com.google.android.location.xml
- framework/com.google.android.location.jar
- lib/libjni_latinime.so
- lib/libjni_t9input.so
- lib/libjni_voice_search.so
- lib/libgoogle_recognizer_jni_l.so
- lib/libgoogle_speech_jni.so
- lib/libgoogle_recognizer_jni.so
- lib/libjni_latinimegoogle.so
- lib/libjni_keyboarddecoder.so
- lib/libjni_keyboard.so
- lib/libjni_t9input.so
- lib/libjni_latinime.so
- lib/libjni_googlepinyin.so
- lib/libjni_gspeech.so
- lib/libjni_google_speech.so
- lib/libjni_google_texttospeech.so
- lib/libjni_google_soundbackend.so
- lib/libjni_googlevoice.so
- lib/libjni_google_common.so
- lib/libjni_google_recognizer.so
- lib/libjni_google_soundbackend_internal.so
- lib/libjni_google_texttospeech_internal.so
- lib/libjni_google_tts_engine.so
- lib/libjni_google_tts_factory.so
- lib/libjni_google_tts_internal.so
- lib/libjni_google_tts.so
- lib/libjni_google_tts_voices.so
- lib/libjni_google_voice.so
- lib/libgoogle_recognizer_jni_l.so
- lib/libgoogle_speech_jni.so
- lib/libgoogle_recognizer_jni.so
- lib/libjni_google_common.so
- lib/libjni_google_recognizer.so
- lib/libjni_google_search.so
- lib/libjni_google_tts_engine.so
- lib/libjni_google_tts_factory.so
- lib/libjni_google_tts_internal.so
- lib/libjni_google_tts.so
- lib/libjni_google_tts_voices.so
- lib/libjni_google_voice.so
- lib/libjni_google_speech_recognizer.so
- lib/libjni_google_speech_synthesizer.so
- lib/libjni_google_text_to_speech.so
- lib/libjni_google_voice_search_engine.so
- lib/libjni_google_voice_search.so
- lib/libjni_googleapi_speech.so
- lib/libjni_google_recognizer_jni.so
- lib/libjni_google_speech_recognition_internal.so
- lib/libjni_google_text_to_speech_engine.so
- lib/libjni_google_voice_search_internal.so
- lib/libjni_google_tts_engine_internal.so
- lib/libjni_google_text_to_speech_internal.so
- lib/libjni_google_voice_search_engine_internal.so
- lib/libjni_googlevoice_internal.so
- lib/libjni_latinext.so
- lib/libjni_latinimegoogle_dictionarypack.so
- lib/libjni_latinimegoogle_dictionarypack_internal.so
- lib/libjni_latinimegoogle_dictionarypack_jni.so
- lib/libjni_latinimegoogle_dictionarypack_jni_internal.so
- lib/libjni_latinimegoogle_jni.so
- lib/libjni_latinimegoogle_jni_internal.so
- lib/libjni_latinimegoogle_native.so
- lib/libjni_latinimegoogle_native_internal.so
- lib/libjni_latinimegoogle_spellchecker.so
- lib/libjni_latinimegoogle_spellchecker_internal.so
- lib/libjni_latinimegoogle_voice_search.so
- lib/libjni_latinimegoogle_voice_search_internal.so
- lib/libjni_latinime_dictionarypack.so
- lib/libjni_latinime_dictionarypack_internal.so
- lib/libjni_latinime_dictionarypack_jni.so
- lib/libjni_latinime_dictionarypack_jni_internal.so
- lib/libjni_latinime_jni.so
- lib/libjni_latinime_jni_internal.so
- lib/libjni_latinime_native.so
- lib/libjni_latinime_native_internal.so
- lib/libjni_latinime_spellchecker.so
- lib/libjni_latinime_spellchecker_internal.so
- lib/libjni_latinime_voice_search.so
- lib/libjni_latinime_voice_search_internal.so
- lib/libjni_t9input_google.so
- lib/libjni_t9input_google_internal.so
- lib/libjni_t9input_google_jni.so
- lib/libjni_t9input_google_jni_internal.so
- lib/libjni_t9input_google_native.so
- lib/libjni_t9input_google_native_internal.so
- lib/libjni_t9input_google_spellchecker.so
- lib/libjni_t9input_google_spellchecker_internal.so
- lib/libjni_t9input_google_voice_search.so
- lib/libjni_t9input_google_voice_search_internal.so
- lib/libjni_t9input_jni.so
- lib/libjni_t9input_jni_internal.so
- lib/libjni_t9input_native.so
- lib/libjni_t9input_native_internal.so
- lib/libjni_t9input_spellchecker.so
very useful and clear info. thanks.
Redmi sweet, ArrowOS 13.