Skip to content

Instantly share code, notes, and snippets.

@kamilbrk
Last active April 23, 2024 09:40
Show Gist options
  • Save kamilbrk/6cf79d300523b64c13881911fa535bad to your computer and use it in GitHub Desktop.
Save kamilbrk/6cf79d300523b64c13881911fa535bad to your computer and use it in GitHub Desktop.
Android HU changelogs - see https://kamilbrk.github.io/ksw/

In the process of updating the website to contain both KSW and ZXW changelogs. In the meantime, see Android Automotive Headunits Discord.


ZXW Changelog

Android 13

GT_KSW_20240112_EAU

Build date 2024-01-12 09:27:08 UTC

Summary:

  • Added new Audi Bentley theme with ID 40
  • At your own risk, see the zxw_factory_config.xml file and its SupportUIListNotTestedYet for all possible themes to test for us!
  • Various apps updated to support more themes
  • Found some new file paths

Changes since GT_KSW_20231205_EAU:

  • ivicar (com.ivicar.avm) app updated from 2023.12.01-18:21 to 2024.01.06-17:38
    • Added code for 360 assistance, DVR recording, automatic file deletions, handling additional storage, etc
  • Zlink (com.zjinnova.zlink) app updated from 5.4.25 to 5.4.27
    • New code for CarLife support (disabled for now)
    • New code, graphics, screens for Huawei HiCar
    • Updated build libraries
  • APKInstall (com.szchoiceway.apkinstall) app updated from 1.0-2023-11-15:19-23_20231115-07:23:14 to 1.0-2023-12-23:10-36_20231223-10:36:46
    • Improved out of memory crash and exception handling
  • BTSuite (com.szchoiceway.btsuite) app updated from 1.0-2023-12-05:16-11 to 1.0-2024-01-10:14-22
    • Improved handling for pausing music
  • CustomerUI (com.szchoiceway.customerui) app updated from 1.02023-12-02:17-59 to 1.02024-01-03:17-33
    • Added labels for Bluetooth music
  • Dashboard (com.szchoiceway.ksw_dashboard) app updated from 1.02023-11-23:15-57 to 1.02024-01-12:17-00
  • Equalizer (com.szchoiceway.equalizer) app updated from 1.02023-11-27:10-53 to 1.02024-01-02:18-05
  • EventCenter (com.szchoiceway.eventcenter) app updated from 1.0-2023-12-04:14-32 to 1.0-2024-01-12:10-48
    • Added permissions for camera and recording audio
    • Added code to handle the new LT9211 device and switch underlying implementation based on its presence
    • GT6 seems to support the following resolutions: 800x480, 1024x600, 1280x480, 1280x720, 1440x540, 1560x700, 1920x720, 720x1920
    • Found file paths and possible functionality:
      • File /bt_update.bin will start intent com.szchoiceway.updatemcu.UpdateBtService
      • File /mcu_update_auto.bin will install the MCU update without prompting
      • File /mcu_update.bin will prompt and install the MCU update
      • File /OEM/zxw_factory_config.xml will parse contents and load factory settings
      • File /OEM/zxw_lcd.xml will parse contents and load screen size configuration
      • File /OEM/zxw_restore_factory.txt will open a dialog to restore factory settings
      • File /OEM/zxw_tp_cal.txt will show calibration screen
      • File /TouchPaneParam.cfg will open a dialog with touch configuration
      • File /zxw_switch_360.txt will run switch9211(0) to indicate that head unit has the old 360 camera chip (?)
      • File /zxw_switch_9211.txt will run switch9211(1) to indicate that head unit has a new Lontium LT9211 (2-Port MIPI/LVDS Repeater) chip (?)
      • File /zxw_switch_debug.txt will run switchDebug(0)
      • File /zxw_switch_user.txt will run switchDebug(1)
  • FatSet (com.szchoiceway.fatset) app updated from 1.02023-11-23:15-55 to 1.02023-12-28:11-41
    • New factory setting checkbox to toggle 9211 chip device
    • New client CK found (on top of existing ALS_6208, GS, LHX2306 and LS2682)
  • MusicPlayer (com.szchoiceway.musicplayer) app updated from 1.0-2023-12-01:16-44 to 1.0-2024-01-12:16-30
    • Support for new themes
    • Support for pause event from Bluetooth app
  • NaviSettings (com.szchoiceway.settings) app updated from 1.02023-12-05:16-17 to 1.02024-01-09:17-56
  • Navigation (com.szchoiceway.navigation) app updated from 1.02023-11-23:15-52 to 1.02024-01-03:10-30
  • UpdateMCU (com.szchoiceway.updatemcu) app updated from 1.02023-11-23:15-59 to 1.02024-01-11:19-55
    • Background service to detect mcu_update_auto.bin
  • VideoPlayer (com.szchoiceway.videoplayer) app updated from 1.0-2023-12-01:16-44 to 1.0-2024-01-10:16-54
  • SystemUI app
    • Changes to notifications handler

GT_KSW_20231205_EAU

Build date 2023-12-05 08:56:17 UTC

Summary:

  • Upgraded to Android 13
  • CarLetter app is replaced with up-to-date Zlink
  • Lots of Bluetooth changes
  • Changed some debuggable settings to allow for logs/tracing

Changes since GT_KSW_20231027_EAU:

  • CarLetter app removed, replaced with Zlink
  • Zlink 5.4.25 with vendor channel set to zhuoxw and target SDK lowered from 27 to 23
    • Seems basically the same base version as latest one embedded in KSW software on Android 13
  • Bluetooth vendor seems to be changed from 0x000F Broadcom to 0x001D Qualcomm
  • Ivicar (com.ivicar.avm) app added with version 2023.12.01-18:21
  • zxw360 (com.fibocom.multicamera) app removed
  • ApkInstall (com.szchoiceway.apkinstall) app updated from 1.0-2023-10-24:14-50_20231024-02:50:32 to 1.0-2023-11-15:19-23_20231115-07:23:14
  • aw3603D app added with Audi A8 and Q8 graphics, seems to be some birdview camera with 3D models
  • BTSuite (com.szchoiceway.btsuite) app updated from 1.0-2023-10-24:20-08 to 1.0-2023-12-05:16-11
    • Looks like a lot of new code and user interface - data transmit, connections, auto reconnections, searching for devices, pairing, etc.
    • New labels including "If the car interface displays a PIN code, enter this PIN code here and then click [Settings], Otherwise, please enter 0000, click on [Settings], and then enter 0000 on the PIN code page of the car interface"
  • ro.debuggable set to true
  • Added permissions for com.fibocom.autommi, com.fibocom.hwtest
  • EventService updated
    • new hideLexusAirWind and showLexusAirWind events
    • new Bluetooth and A2DP events
  • Removed xbin/zxw_su binary and replaced with standard xbin/su

Android 12

GT_KSW_20231027_EAU

Build date 2023-10-27 09:29:05 UTC

Changes since GT_KSW_20231015_EAU:

  • EventCenter app updated
    • Support for air temperature and wind changes on Lexus
  • (TODO)

GT_KSW_20231015_EAU

Build date 2023-10-17 09:18:53 UTC

Changes since GT_KSW_20230715_EAU:

  • Default volume for Bluetooth A2DP changed from 50% to 100%
  • CarLetter (com.carletter.car) app updated from 7.3.6.20230711 to 7.4.5.20230925
  • Added handling for keyboard visibility events
  • zxw360 (com.fibocom.multicamera) app updated from 1.1.0.230529.1027 to 1.1.0-1mipi1080p-231007.1655
    • Added support for Cadillac cars: CT4 2020, CT5 2020, CT6 2019, Escalade 2017, XT4 2019, XT6 2020, XTS 2018
    • New Exo media player images embedded
  • BTSuite () app
    • New Bluetooth transmission functionality with a matchlist of devices
    • Added graphics for Land Rover, GT6 Audi, KSW Common GS UG 1024, KSW MBUX, Nexus, Benz NTG6
  • Added KSW Dashboard (com.szchoiceway.ksw_dashboard) app with version 1.02023-10-13:17-44

GT_KSW_20230715_EAU

Build date 2023-07-15 08:00:22 UTC

This is the first firmware we're aware of, so here are differences between this ZXW firmware and older KSW A12 Ksw-S-M600-OS_v1.5.4NEXAI-ota:

  • Built in release mode (release-keys) that prevents tampering

  • Missing KSW apps

    • in system/app: APKInstaller, KswAirConditioner, KswPLauncher, KswPMusic, KSWPVideo, WitsLogcat, kswEq
    • in system/PreInstall: AutoMap, CarCare, CarplayZlink, DAB-Z, KugouAuto, TXZOverSeaAdapter, TingCar3.0, WitsScreencast, qqmusiccar, sogouInput
    • in system/priv-app: AppManager, Ecar_SOS, FactoryKit, KswBt, TXZAIPal, TXZCore, TXZOta, TXZWeather, WitsShell
  • New apps

    • in system/app
      • CarLetter (com.carletter.car) app version 7.3.6.20230711
        • Developed by company "CarAuto", looks like equivalent of Zlink:
          • Android Auto (wired and wireless)
          • Apple CarPlay (wired and wireless)
          • Apple AirPlay screen mirroring (wireless hotspot)
          • Carletter Cast (bluetooth and wireless hotspot)
          • DLNA screen casting (wireless hotspot, both Android/iOS)
          • CarLife (wired and wireless)
          • Huawei HiCar (bluetooth)
        • Automatic software updates when connected to the internet
        • Requires six digit activation code
        • Default hotspot is SSID carletter with password 12345678.
        • Weirdly has this CarLetter stuff, but device's "Bluetooth manufacturer interface name" is set to zlink_5.
        • User interface configuration file etc/carletter.prop with the following interesting bits:
          • The "customer platform" is set to ZXW-6125-02
          • There's an "activation type" that looks like base64 encoded string, but ends up more like a binary code: ACTIVATION_TYPE=P+Auul9NJekHowQfXS/g0jVjYDLUpSzGloLvkMH7P/bWoXPM5i02mxeXqGFWmMPYimUIrof6Rddo5IUaRLylOfevDUbyTd00czMf8KToP7rQTvLiuSZ+KQ1ZJPRWYBDk83X6WIejbomMUC0n836xoCZyScoMSrlA7zfSgGrJ0io=
          • There are various settings for the "internet menu options": - ALL - Full functionality (Apple CarPlay, Android Auto, Huawei HiCar, Carlife) - OVERSEAS_VERSION - Overseas version (Apple CarPlay, Android Auto) set in this firmware file - DOMESTIC_EDITION - Domestic version (Apple CarPlay, Android Auto, Huawei HiCar) - WITH_LANGUAGE - Depending on language setting, where Chinese would trigger domestic edition and all other languages would trigger overseas version - CARPLAY_CARLIFE - Apple CarPlay, Carlife
          • There is a setting for either landscape or portrait screen mode
      • ExtShared (android.ext.shared) app version 1 that does absolutely nothing
    • in system/priv-app:
      • Shell (com.android.shell) app
        • Presumably in place of KSW's WitsShell app
        • User facing functionality seems to be just about bug reporting that can attach screenshots
      • StatementService (com.android.statementservice) app version 1.0
      • SysVarProvider (com.szchoiceway.providers.settings) app version 12
        • Basically a third party library, wrapper for SQLite database for other apps to store settings.
      • SystemUpdaterSample (com.example.android.systemupdatersample) app version 12
        • Looks like an update manager capable of downloading OTAs. Expects config.json or update.zip files, and switching slots (A/B) to boot the device from a new slot after a successful update.
      • zxw360 (com.fibocom.multicamera) app version 1.1.0.230529.1027
        • The app is called "360 panorama" and it's seems like software to handle a 360 camera hardware. Requires activation code, suppors 1080P, full-screen display, handling storage and formatting FAT32 SD cards, pre-allocating storage space, calibration, upgrading car models from USB flash disks, stuff like that.
    • in system/product/app:
      • ApkInstall (com.szchoiceway.apkinstall) app version 1.0._20230706-11:22:23
        • "One click install" and "One click uninstall"
        • "Please put the apk files into the root directory of USB storage devices and instert the drive"
        • "Put the apk file to be copied in the apk_cn or apk_en directory of the U disk and put the multimedia files in the media directory of the U disk."
      • BTSuite (com.szchoiceway.btsuite) app version 1.0-2023-07-12:09-58
        • Similar purpose as KSW's KswBt app
        • Called "Bluetooth phone" with "BT music", "Call record", "Contacts", "Dial Pad", "BT Pair"
        • UI supports ad2324, benz, bwmid8, dz and landrover
      • CustomerUI (com.szchoiceway.customerui) app version 1.0
        • Seems like the main launcher, like KSWPLauncher
        • "APK installer", "Browser", "Bluetooth phone", "Touch to connect bluetooth", "Contacts", "Dashboard", "File manager", "Multimedia", "Navigation", "Vehicle information", "Background settings", "Weather"
        • References to AVINUSA.com
      • Equalizer (com.szchoiceway.equalizer) app version 1.0
      • EventCenter (com.szchoiceway.eventcenter) app version 1.0-2023-07-14:20-42
      • FatSet (com.szchoiceway.fatset) app version 1.0
        • Contains labels equivalent of KSW factory settings screen (music app selection, mic gain, aux switching, distance unit selection, original/external bluetooth, etc)
      • KSWAux (com.szchoiceway.ksw_aux) app version 1.0
      • KSWCmmb (com.szchoiceway.ksw_cmmb) app version 1.0
      • KSWDvd (com.szchoiceway.ksw_dvd) app version 1.0
      • KSWDvr (com.szchoiceway.ksw_dvr) app version 1.0
      • KSWFCamera (com.szchoiceway.ksw_fc) app version 1.0
      • Launcher3QuickStep_ksw (com.android.launcher3) app version 1.0 with crash handler and /mnt/usb_storage/log/ location
      • LogCapture (com.szchoiceway.logcapture) app version 1.0
      • MusicPlayer (com.szchoiceway.musicplayer) app version 1.0-2023-06-25:16-12 with SDCard/USB1/USB2 handling, Bluetooth calling, searching for music and video
      • NaviSettings (com.szchoiceway.settings) app version 1.0
        • Contains labels equivalent of KSW factory settings screen (music app selection, mic gain, aux switching, distance unit selection, original/external bluetooth, etc)
        • Ability to collect MCU CANBUS logs (CAN1/CAN2) and saving them to a USB drive
        • Ability to open a PDF file with user manual
      • Navigation (com.szchoiceway.navigation) app version 1.0
        • References to various UIs for vendors: ANCHANGXING, AOCHEKAI, BORUIZENGHENG, CHEKU, HANGFEI, HANGRUN, HUANGRUN, KEISAWEI, KESHANG, MAIRUIWEI, MAISILUO, NORMAL, PUSIRUI, XINGSHUO, ZHONGHANGTIANYI
      • TXZWeatherApp (com.txznet.weather) app version 1.0.5_5
      • TestTools (com.szchoiceway.testtools) app version 230322-09:58:34
        • Most likely an internal test app to run at a warehouse for QA
        • Checking operation of audio, Bluetooth, GPS, HDMI, IMEI, MFI, microphone, SIM, storage (USB/SD), version, Wi-Fi
      • UpdateMCU (com.szchoiceway.updatemcu) app version 1.0
        • Labels referencing "BT upgrade file" /data/local/bt_update.bin
        • Labels referencing "MCU upgrade file" /data/local/mcu_udpate_auto.bin with various possible source locations:
          gpscard_dir = "/storage/external_sd0/";
          mediacard_dir = "/storage/external_sd/";
          card_dir = "/storage/external_sd/";
          usb_dir = "/storage/usb_storage0/";
          usb_dir1 = "/storage/usb_storage1/";
          usb_dir2 = "/storage/usb_storage2/";
          usb_dir3 = "/storage/usb_storage3/";
          flash_dir = "/storage/sdcard0/";
      • VideoPlayer (com.szchoiceway.videoplayer) app version 1.0-2023-06-25:16-13
      • ecar (com.ecar.assistantnew) app version 4.4.11.A.011.2046
      • zxwmedia (com.szchoiceway.zxwmedia) app version 1.0-2023-03-08:17-40
  • There's a product/app/CarType.xml with the same style configuration like KSW's factory_config.xml file, although it only has a handful of sections in comparison to what we know. It appears that it's the default/backup configuration that can be overridden with OEM/zxw_factory_config.xml:

    • SupportUIList with just UI_EVO_ID7 (ID 16)
    • SupportNaviAppList
    • SupportDvrAppList
    • CarDisplayParam
    • CANBusProtocol
  • Ability to load files from USB disk:

    • OEM/logo.bmp
    • OEM/bootanimiation.zip
    • OEM/zxw_factory_config.xml
  • They seem to have additional label to perhaps replace our infamous "Phone is starting" text <string name="android_start_title_zxw">Android is starting…</string>

  • NTP server is set to ntp2.aliyun.com (Alibaba Cloud) rather than time.android.com

  • There is no "MCU Restart" option

  • Status bar on KSW seems to have extra four labels for icons that presumably ZXW does not display: Bluetooth, HD/SD (screen definition) and USB.

  • You can change USB charging current, presumably for devices connected to this head unit. By default it's 1000mA and it supports values of 0,500,1000,1500,2100,2400,3000.

  • Seems to be using xs9922b0 which appears to be a CHIPUP XS9922B video decoding chip supporting 1080p@30fps.

  • Customer name is set to 科赛威 (Kosavi)

See https://kamilbrk.github.io/ksw/factory-settings
Raw file at https://github.com/kamilbrk/ksw/blob/main/public/factory_config.xml

Installation and usage (macOS Sonoma with Apple Silicon)

  1. To mount ext4 partitions on macOS, you need to install macFUSE which means you'll need to enable kernel extensions and restart your mac a couple of times. See https://eengstrom.github.io/musings/install-macfuse-and-sshfs-on-macos-monterey

  2. Then you can use pre-compiled tools in the supplied "bin" folder, although if you feel like getting all that stuff yourself or perhaps updating the binaries:

    • Create "bin" folder next to this script
    • Build ext4fuse from source:
      git clone https://github.com/gerard/ext4fuse.git
      cd ext4fuse
      make
      and put that entire ext4fuse folder into "bin"
    • Get payload-dumper-go from https://github.com/ssut/payload-dumper-go and make it executable
      chmod +x payload-dumper-go
      and similarly, put that into the "bin" folder
    • Get sdat2img.py file from https://github.com/xpirt/sdat2img and put that into "bin" folder as well
  3. Install tools using Homebrew on macOS

    brew install brotli # only needed for Android 10 images
    brew install apktool
    brew install jadx
  4. Make sure the provided script is executable:

    chmod +x script.sh
  5. Download KSW OTA zip updates

  6. After all that, usage is quite simple

    ./script.sh ./Firmwares/Ksw-T-M600_OS_v1.2.9-ota.zip

    This will extract all files and decompile JAR/APKs

  7. Start diffing against previous versions:

    • Meld is great on macOS, but stopped working on Sonoma.

      There's a workaround posted by someone on GitHub:

      pip3 install pyobjc
      brew install gtk+3 gtksourceview4 gnome-icon-theme desktop-file-utils itstool py3cairo pygobject3 gtk-mac-integration
      git clone https://gitlab.gnome.org/GNOME/meld.git
      ./meld/bin/meld
    • FileMerge from Xcode

  8. Or use a git repository to track changes, for example:

    cd ~/Downloads/KSW/Firmwares/Ksw-Q
    sudo rm -rf output && cp -R ../Ksw-Q-Userdebug_OS_v4.2.0-ota/output .
    git add -A && git commit -m "Ksw-Q-Userdebug_OS_v4.2.0-ota"
    
#!/bin/zsh
# Tested on macOS Sonoma and M2 Pro
# To mount ext4 partitions on macOS, you need to install macFUSE which means you'll
# need to enable kernel extensions and restart your mac a couple of times.
# https://eengstrom.github.io/musings/install-macfuse-and-sshfs-on-macos-monterey
# Then you can use pre-compiled tools in the supplied "bin" folder, although if you feel
# like getting all that stuff yourself or perhaps updating the binaries:
# 1. Create "bin" folder next to this script
# 2. Build ext4fuse from source:
# git clone https://github.com/gerard/ext4fuse.git
# cd ext4fuse
# make
# Then put that entire ext4fuse folder into "bin"
# 3. Get payload-dumper-go from https://github.com/ssut/payload-dumper-go and make it executable
# chmod +x payload-dumper-go
# And similarly, put that into the "bin" folder
# 4. Get sdat2img.py file from https://github.com/xpirt/sdat2img and put that into "bin" folder as well
# Make sure that this script is marked as executable
# chmod +x script.sh
# Usage is quite simple:
# ./script.sh ./Firmwares/Ksw-T-M600_OS_v1.2.9-ota.zip
if [[ $# -eq 0 ]] ; then
echo "You need to supply path to the OTA file as an argument, for example ./XYZ.zip"
exit 1
fi
if [ $UID != 0 ]; then
echo "Enter sudo password once so that you don't have to do it in the middle of the script runtime."
sudo echo ""
fi
fullpath="$@" # "./Directory1/Directory2/example.ota.zip"
filename="${fullpath##*/}" # "example.ota.zip"
dir="${fullpath:0:${#fullpath} - ${#filename}}" # "./Directory1/Directory2/"
base="${filename%.[^.]*}" # "example.ota"
ext="${filename:${#base} + 1}" # "zip"
if [[ -z "$base" && -n "$ext" ]]; then
base=".$ext"
ext=""
fi
uncompressed_dir="$dir$base/uncompressed"
partitions_dir="$dir$base/partitions"
output_dir="$dir$base/output"
echo "Processing $filename"
unzip_ota() {
echo " - Unzipping OTA file"
unzip -qq "$fullpath" -d "$uncompressed_dir"
}
# Get DAT partitions from brotli compressed partitions
get_dat_from_brotli() {
for image in 'system' 'vendor';
do
if [[ -f "$uncompressed_dir/$image.new.dat.br" ]] && [[ ! -f "$uncompressed_dir/$image.new.dat" ]]; then
echo " - Decompressing $image image"
brotli --decompress --output="$uncompressed_dir/$image.new.dat" "$uncompressed_dir/$image.new.dat.br"
fi
done
}
# Get IMG partitions from DAT
get_images_from_dat() {
for image in 'system' 'vendor';
do
if [[ -f "$uncompressed_dir/$image.transfer.list" ]] && [[ -f "$uncompressed_dir/$image.new.dat" ]] && [[ ! -f "$partitions_dir/$image.img" ]]; then
echo " - Converting $image image"
python ./bin/sdat2img.py "$uncompressed_dir/$image.transfer.list" "$uncompressed_dir/$image.new.dat" "$partitions_dir/$image.img"
fi
done
}
# Get IMG partitions from BIN
get_images_from_bin() {
if [[ -f "$uncompressed_dir/payload.bin" ]]; then
echo " - Extracting four partitions out of the payload.bin"
./bin/payload-dumper-go -c 4 -o "$partitions_dir" -p "product,system_ext,system,vendor" "$uncompressed_dir/payload.bin"
fi
}
# Go through IMG partitions, mount and extract output files
mount_and_copy_from_partitions() {
for image in 'system' 'product' 'system_ext' 'vendor';
do
if [[ -f "$partitions_dir/$image.img" ]]; then
echo " - Processing partition $image"
if [[ ! -d "$partitions_dir/$image" ]]; then
mkdir "$partitions_dir/$image"
fi
echo " - mounting image"
# sudo mount -o ro "$image.img" "$image"
sudo ./bin/ext4fuse/ext4fuse "$partitions_dir/$image.img" "$partitions_dir/$image" -o allow_other,defer_permissions
if [ $? -eq 0 ]; then
if [[ "$image" = "system" ]]; then
echo " - copying main system files"
sudo cp -R "$partitions_dir/$image/system/" "$output_dir/"
else
echo " - copying $image files in place of the symlink"
sudo rm -rf "$output_dir/$image"
sudo cp -R "$partitions_dir/$image" "$output_dir/$image"
fi
echo " - unmounting image"
sudo umount "$partitions_dir/$image"
fi
if [[ -d "$partitions_dir/$image" ]]; then
echo " - deleting mount point folder"
rm -rf "$partitions_dir/$image"
fi
fi
done
}
main_flow() {
echo " - Creating directories"
if [[ ! -d "$output_dir" ]]; then
mkdir -p "$output_dir"
fi
if [[ ! -d "$partitions_dir" ]]; then
mkdir -p "$partitions_dir"
fi
if [[ ! -d "$uncompressed_dir" ]]; then
mkdir -p "$uncompressed_dir"
unzip_ota
fi
get_dat_from_brotli
get_images_from_dat
get_images_from_bin
echo " - Cleaning up uncompressed files"
rm -rf "$uncompressed_dir"
mount_and_copy_from_partitions
echo " - Cleaning up partitions"
rm -rf "$partitions_dir"
echo " - Fixing permissions"
sudo chown -R $(whoami) "$output_dir/"
echo " - All files have been extracted"
}
# Find and decompile all JAR files with APKTOOL
decompile_jars() {
# Do this before APKs because some JARs can contain APKs (?)
echo " - Decompiling all JARs"
find "$output_dir" -type f -name "*.jar" -print0 | xargs -0 -I{} sudo apktool d -q -b -o "{}.out" "{}"
echo " - All JARs have been decompiled"
}
# Find and decompile all APK files with JADX
decompile_apks() {
echo " - Decompiling all APKs"
find "$output_dir" -type f -name "*.apk" -print0 | xargs -0 -I{} sudo jadx -q --no-debug-info --comments-level none -m restructure -e "{}" -d "{}.out"
echo " - All APKs have been decompiled"
}
if [[ -d "$output_dir/vendor/app" ]]; then
echo " - Looks like all files have been already extracted"
else
main_flow
fi
if [[ -d "$output_dir/framework/framework.jar.out" ]]; then
echo " - Looks like all JAR files were already decompiled"
else
decompile_jars
fi
if [[ -d "$output_dir/app/EasterEgg/EasterEgg.apk.out" ]]; then
echo " - Looks like all APK files were already decompiled"
else
decompile_apks
fi
echo "All done"
<?xml version="1.0" encoding="utf-8"?>
<ConfigInfo>
<!-- Basic information settings -->
<basic>
<ver>YC-BC-20230704.0.en</ver>
<client>KSW</client>
<!-- Resolution:
1280x480 = 1280x480 lvds screen
1920x720 = 1920x720 lvds screen
1024x600 = 1024x600 lvds screen
1280x720 = 1280x720 lvds screen
720x1920 = 720x1920 mipi screen (KLGD)
-->
<resolution>1920x720</resolution>
</basic>
<!-- List of supported navigation software package names -->
<SupportNaviAppList>
<Item name = "com.baidu.BaiduMap" />
<Item name = "com.baidu.BaiduMap.auto" />
<Item name = "com.baidu.naviauto" />
<Item name = "com.mxnavi" />
<Item name = "com.mxnavi.naviapp" />
<Item name = "com.autonavi.minimap" />
<Item name = "com.autonavi.amapauto" />
<Item name = "com.tencent.map" />
<Item name = "com.tencent.wecarnavi" />
<Item name = "com.sogou.map.android.maps" />
<Item name = "com.cld" />
<Item name = "cld.navi.mainframe" />
<Item name = "cld.navi.c3588.mainframe" />
<Item name = "cld.navi.c2739.mainframe" />
<Item name = "cld.navi.c3551.mainframe" />
<Item name = "cld.navi.k3618.mainframe" />
<Item name = "cld.navi" />
<Item name = "com.kingwaytek" />
<Item name = "com.kingwaytek.naviking3d" />
<Item name = "com.papago.M11_Int" />
<Item name = "com.papago.M11General" />
<Item name = "com.papago.s1OBU" />
<Item name = "com.papago" />
<Item name = "com.loco" />
<Item name = "com.sygic.aura" />
<Item name = "com.google.android.apps.maps" />
<Item name = "com.mireo.magnav" />
<Item name = "com.mireo.dontpanic.android.incyclone" />
<Item name = "com.waze" />
<Item name = "com.mapbar.android.mapbarmap" />
<Item name = "com.mapbar.android.carnavi" />
<Item name = "com.nng.igoprimo.javaclient" />
<Item name = "com.nng.igo.primong.hun10th" />
<Item name = "com.nng.igo.primong.igoworld" />
<Item name = "com.nng.igoprimoisr2013march24.javaclient" />
<Item name = "com.nng.igoprimoisrael.javaclient" />
<Item name = "com.navngo.igo.javaclient" />
<Item name = "com.basarsoft.igo.javaclient" />
<Item name = "com.basarsoft.igonextgen.javaclient" />
<Item name = "com.mapswithme.maps.pro" />
<Item name = "com.here.app.maps" />
<Item name = "ru.yandex.yandexnavi" />
<Item name = "com.polstar.polnav6" />
<Item name = "com.nhn.android.nmap" />
<Item name = "jp.co.yahoo.android.apps.navi" />
<Item name = "com.mnsoft.mappyobn" />
<Item name = "com.mnsoft.mappyauto" />
<Item name = "com.skt.tmap.ku" />
<Item name = "com.locnall.KimGiSa" />
<Item name = "kr.mappers.AtlanSmart" />
<Item name = "com.tomtom.gplay.navapp" />
<Item name = "com.kingwaytek.naviking4g" />
<Item name = "com.kingwaytek.naviking3d.google.std" />
<Item name = "com.nng.igo.primong.palestine" />
<Item name = "com.skt.skaf.l001mtm091" />
<Item name = "ru.yandex.yandexmaps" />
<Item name = "com.generalmagic.magicearth" />
<Item name = "ai.zalo.kiki.car" />
<Item name = "com.fujitech.flyaudio" />
</SupportNaviAppList>
<!-- List of supported DVR software package names -->
<SupportDvrAppList>
<Item name = "com.ankai.cardvr" />
<Item name = "com.anwensoft.cardvr" />
<Item name = "com.sicadroid.ucam_car" />
<Item name = "com.building.dvr" />
<Item name = "com.ankai.gd.ardvr" />
<Item name = "com.ankai.ardvr" />
<Item name = "com.fvision.camera" />
</SupportDvrAppList>
<!-- Original car display parameter list -->
<CarDisplayParam>
<model id = "1" >[01]NTG5.5_8.4″</model>
<model id = "2" >[02]NTG5.5_8.4″(half screen)</model>
<model id = "3" >[03]NTG5.5/6.0_1920x720(2018~)</model>
<model id = "4" >[04]NTG5.5_1920x720_ECE(2018~)</model>
<model id = "5" >[05]NTG5.0_8.4″</model>
<model id = "6" >[06]NTG5.0_8.4″(half screen)</model>
<model id = "7" >[07]NTG5.0_7.0″_8.0″(2016~)</model>
<model id = "8" >[08]NTG5.0_7.0″_8.0″(2016~)(half screen)</model>
<model id = "9" >[09]NTG5.5B_8.4″</model>
<model id = "10" >[10]NTG5.5B_8.4″(half screen)</model>
<model id = "11" >[11]NTG4.5_400x240_5.8″(2013~2015)</model>
<model id = "12" >[12]NTG4.5_400x240_5.8″(2013~2015)(half screen)</model>
<model id = "13" >[13]NTG4.0/NTG4.5_800x480_7″(2013~2015)</model>
<model id = "14" >[14]NTG4.0/NTG4.5_800x480_7″(2013~2015)(half screen)</model>
<model id = "15" >[15]NTG4.0_5.0″(2008—2010)</model>
<model id = "16" >[16]NTG4.0_5.0″(2008—2010)(half screen)</model>
<model id = "17" >[17]NTG4.7_800x480_7.0″(2008-2010)</model>
<model id = "18" >[18]NTG4.7_800x480_7.0″(2008-2010)(half screen)</model>
<model id = "19" >[19]NTG3.5_800x480(2010)</model>
<model id = "20" >[20]NTG3.5_800x480(2010)(half screen)</model>
<model id = "21" >[21]NTG3.0_800x480</model>
<model id = "22" >[22]NTG3.0_800x480(half screen)</model>
<model id = "23" >[23]NTG3.0_JP_800x480</model>
<model id = "24" >[24]NTG3.0_JP_800x480(half screen)</model>
<model id = "25" >[25]NTG6.0_1024x600</model>
<model id = "26" >[26]NTG6.0_1024x600(half screen)</model>
<model id = "27" >[27]NTG6.0_1920x720</model>
<model id = "28" >[28]NTG6.0_1920x720(half screen)</model>
<model id = "29" >[29]NTG4.0_5.8″(2008—2010)</model>
<model id = "30" >[30]NTG4.0_5.8″(2008—2010)(half screen)</model>
</CarDisplayParam>
<!-- CAN protocol list -->
<CANBusProtocol>
<Protocol id = "0">[0]BC_Protocol_type_5.0C</Protocol>
<Protocol id = "1">[1]BC_Protocol_type_5.0A</Protocol>
<Protocol id = "2">[2]BC_Protocol_type_4.0</Protocol>
<Protocol id = "3">[3]BC_Protocol_type_4.5</Protocol>
<Protocol id = "4">[4]BC_Protocol_type_3.5</Protocol>
<Protocol id = "5">[5]BC_Protocol_type_3.0</Protocol>
<Protocol id = "6">[6]BC_Protocol_type_5.5</Protocol>
<Protocol id = "7">[7]BC_Protocol_type_6.0</Protocol>
</CANBusProtocol>
<!-- Supported UI themes
id field: Identifier of the theme, cannot be changed
ui field: Name displayed in the UI and can be modified
You can set theme by its ID with the `uiSelection` setting later
-->
<SupportUIList>
<Item id="23" ui="UI_NUM_KSW_AUDI" />
<Item id="24" ui="UI_NUM_KSW_AUDI_FY" />
<Item id="27" ui="UI_NUM_KSW_AUDI_TY" />
<Item id="29" ui="UI_NUM_KSW_AUDI_CADILLAC" />
<Item id="38" ui="UI_NUM_KSW_GT6_AUDI" />
<Item id="40" ui="UI_NUM_KSW_AUDI_BENTLEY" />
<Item id="18" ui="UI_NUM_KSW_BENZ" /><!-- UI_NTG6 -->
<Item id="21" ui="UI_NUM_KSW_BENZ_NTG6_0_2021" /><!-- UI_NTG6_3 -->
<Item id="22" ui="UI_NUM_KSW_BENZ_FY" />
<Item id="30" ui="UI_NUM_KSW_BENZ_V1" /><!-- UI_MBUX_2021_KSW_V1 -->
<Item id="31" ui="UI_NUM_KSW_BENZ_NTG6_0_2021_V1" /><!-- UI_MBUX_2021_V1 -->
<Item id="33" ui="UI_NUM_KSW_MBUX_1024" />
<Item id="42" ui="UI_NUM_KSW_BMW_ID6" />
<Item id="16" ui="UI_NUM_KSW_BMW_ID7" /><!-- UI_EVO_ID7 -->
<Item id="19" ui="UI_NUM_KSW_PEMP_BMW_ID7" />
<Item id="17" ui="UI_NUM_KSW_BMW_ID8" /><!-- UI_EVO_ID8 -->
<Item id="20" ui="UI_NUM_KSW_PEMP_BMW_ID8" />
<Item id="41" ui="UI_NUM_KSW_BMW_ID8_COPILOT" />
<Item id="26" ui="UI_NUM_COMMON_GS" />
<Item id="35" ui="UI_NUM_KSW_Common_UI_GS_UG_1024" />
<Item id="34" ui="UI_NUM_KSW_Common_UI_GS_UG" />
<Item id="25" ui="UI_NUM_KSW_LANDROVER" />
<Item id="32" ui="UI_NUM_KSW_LANDROVER_BLUE_WHITE" />
<Item id="39" ui="UI_NUM_KSW_LANDROVER_COPILOT" />
<Item id="36" ui="UI_NUM_LEXUS_UI" />
<Item id="37" ui="UI_NUM_LEXUS_LS_UI" />
<Item id="100" ui="UI_NUM_KSW_SAILOR_T001" />
<Item id="101" ui="UI_NUM_KSW_SAILOR_T002" />
<Item id="102" ui="UI_NUM_KSW_SAILOR_T003" />
</SupportUIList>
<!-- Settings -->
<setings>
<!-- Default navigation app package name -->
<naviApp>com.google.android.apps.maps</naviApp>
<!-- Language settings
0: 简体中文 / Simplified Chinese (ZH-CN)
1: 繁體中文 / Traditional Chinese (ZH-TW)
2: English / English (EN)
3: العربية / Arabic (AR)
4: Deutsch / German (DE)
5: Ελληνικά / Greek (EL)
6: Español / Spanish (ES)
7: Français / French (FR)
8: Italiano / Italian (IT)
9: עברית / Hebrew (iw-IL)
10: 日本語 / Japanese (JA)
11: 한국어 / Korean (KO)
12: Nederlands / Dutch (NL)
13: Polski / Polish (PL)
14: Português / Portuguese (PT)
15: Pусский / Russian (RU)
16: ภาษาไทย / Thai (TH)
17: Türkçe / Turkish (TR)
18: Tiếng Việt / Vietnamese (VI)
19: Hrvatski / Croatian (HR) (might be unsupported) -->
<languageSelection>2</languageSelection>
<!-- Time setting -->
<!-- Time mode 0: Use original car time 1: Automatically synchronize GPS time -->
<timeModeSelection>1</timeModeSelection>
<!-- Time format 0: 12-hour system 1: 24-hour system -->
<user24Hour>1</user24Hour>
<!-- Volume setting -->
<!-- Afterloading mode media volume 0~40 -->
<androidMediaVolume>26</androidMediaVolume>
<!-- After-installation mode call volume 0~40 -->
<androidPhoneVolume>28</androidPhoneVolume>
<!-- Original car mode call volume 0~40 -->
<originalPhoneVolume>20</originalPhoneVolume>
<!-- Original car mode navigation volume 0~40 -->
<originalNaviVolume>20</originalNaviVolume>
<!-- Sound effect settings -->
<!-- Sound effect mode
0: User
1: Pop
2: Classical
3: Rock
4: Jazz
5: Dance
-->
<soundMode>0</soundMode>
<!-- Customized low, mid and treble, only effective in user mode, other modes use the default -12~12 -->
<userMode low = "0" middle = "0" high = "0" />
<!-- System settings -->
<!-- Reverse settings -->
<!-- Front view mirror 0: Off 1: On -->
<frontCameraMirror>0</frontCameraMirror>
<!-- Reverse mirror 0: Off 1: On -->
<rearCameraMirror>0</rearCameraMirror>
<!-- Reverse track 0: Off 1: On -->
<reversingTrack>1</reversingTrack>
<!-- Reversing radar 0: Off 1: On -->
<reversingRadar>1</reversingRadar>
<!-- Reverse mute 0: Off 1: On -->
<reversingMute>1</reversingMute>
<!-- Rearview camera selection
0: Rear camera
1: Original car camera
2: 360 camera
3: Android360
-->
<reversingCameraSelection>0</reversingCameraSelection>
<!-- Camera signal type
0: Automatic detection
1: AHD-1080P-30HZ
2: AHD-1080P-25HZ
3: AHD-720P-30HZ
4: AHD-720P-25HZ
6: CVBS-NTSC
7: CVBS-PAL
-->
<reversingCameraType>0</reversingCameraType>
<!-- Display settings -->
<!-- Block watching videos while driving 0: Allowed 1: Blocked -->
<videoDrivingBan>0</videoDrivingBan>
<!-- Small light controls backlight brightness 0: Control 1: Not control -->
<lightControlBrightness>0</lightControlBrightness>
<!-- Backlight brightness 0~100 -->
<backlightBrightness>70</backlightBrightness>
<!-- Bluetooth settings -->
<!-- Bluetooth selection 0: Install additional Bluetooth 1: Original car Bluetooth -->
<btSelection>0</btSelection>
<!-- Unit settings -->
<!-- Distance unit 0: Metric unit 1: Imperial unit -->
<unitDistance>0</unitDistance>
<!-- Oil quantity unit 0: L 1: gal(US) 2: gal(UK) -->
<unitOil>0</unitOil>
<!-- Temperature unit (no need to configure this on ID8 theme)
0: Celsius
1: Fahrenheit
-->
<unitTemperature>0</unitTemperature>
<!-- DVR settings -->
<!-- DVR selection 0: Off 1: CVBS DVR 2: USB DVR -->
<dvrSelection>1</dvrSelection>
<!-- USB DVR APP -->
<usbDvrApp>com.ankai.cardvr</usbDvrApp>
<!-- Automatically switch AUX settings -->
<!-- Automatically switch AUX 0: Off 1: On -->
<autoAux>0</autoAux>
<!-- AUX switching plan 1: Plan A 2: Plan H 3: Customized -->
<auxProgram>3</auxProgram>
<!-- Original car AUX item position 1 0~12 -->
<auxPosition1>0</auxPosition1>
<!-- Original car AUX item position 2 0~12 -->
<auxPosition2>0</auxPosition2>
<!-- Default music app -->
<musicPlayer>com.szchoiceway.musicplayer</musicPlayer>
<!-- Default video app -->
<videoPlayer>com.szchoiceway.videoplayer</videoPlayer>
<!-- Other settings -->
<!-- Power-on mode memory 0: Enable 2: Android interface 1: Original car interface -->
<bootModeMemory>0</bootModeMemory>
</setings>
<!-- Factory settings -->
<factory>
<!-- Factory setting password -->
<password>2018</password>
<!-- Function configuration -->
<!-- USB host mode 0: Debugging 1: Reading USB disk -->
<usbHostMode>1</usbHostMode>
<!-- Whether CarAuto is displayed in the application list 0: Hide 1: Show -->
<carAutoVisible>1</carAutoVisible>
<!-- Whether Huawei HiCar is displayed in the application list 0: Hide 1: Show -->
<hicarVisible>0</hicarVisible>
<!-- Whether Google app is displayed in the application list 0: Hide 1: Show -->
<googleVisible>1</googleVisible>
<!-- Whether Aux is displayed in the application list 0: Hide 1: Show -->
<auxVisible>0</auxVisible>
<!-- Whether DTV is displayed in the application list 0: Hide 1: Display -->
<dtvVisible>0</dtvVisible>
<!-- Whether the Wing Truck Network is displayed in the application list 0: Hide 1: Show -->
<ecar>0</ecar>
<!-- Whether the ES file browser is displayed in the application list 0: Hide 1: Show -->
<esExplorer>1</esExplorer>
<!-- Whether the user manual is displayed in the application list 0: Hide 1: Show -->
<userManual>0</userManual>
<!-- Whether the sound effect APK is displayed in the application list 0: Hide 1: Show -->
<eqVisible>1</eqVisible>
<!-- Whether the weather is displayed in the application list 0: Hide 1: Show -->
<weatherVisible>1</weatherVisible>
<!-- Forward view 0: Close 1: Open -->
<frontCamera>0</frontCamera>
<!-- Whether screen cast MS9120 is displayed in the application list 0: hidden 1: displayed -->
<screenCastVisible>0</screenCastVisible>
<!-- Whether touch data is sent continuously 0: No 1: Yes -->
<touchData>0</touchData>
<!-- Amplifier selection 0: Original car amplifier 1: External amplifier box -->
<amplifierSelection>0</amplifierSelection>
<!-- Whether to use the left front speaker 0: Use 1: Not use -->
<useHorn>0</useHorn>
<!-- Vehicle settings -->
<!-- Cars without display screen 0: With display screen 1: No display screen -->
<notHaveScreen>0</notHaveScreen>
<!-- Knob type 0: Knob A 1: Knob B -->
<iDriverType>0</iDriverType>
<!-- 360 camera type 0: CVBS camera 1: VGA camera -->
<cameraType>0</cameraType>
<!-- Manual automatic gear selection
0: Gear type 1
1: Gear type 2
2: Gear type 3
-->
<gearType>0</gearType>
<!-- Steering wheel track selection
0: Track 1
1: Track 2
-->
<wheelTrack>0</wheelTrack>
<!-- Reverse exit time
0: Choose to exit according to the original vehicle agreement
1: Customize the exit time (see next option)
-->
<backcarTimeSelection>0</backcarTimeSelection>
<!-- Customized reversing exit time 0~10 -->
<backcarTime>3</backcarTime>
<!-- Driving position 0: Left 1: Right -->
<driverSeat>0</driverSeat>
<!-- Number of doors 0: 4 doors 1: 2 doors 2: No doors shown -->
<doorAmount>0</doorAmount>
<!-- Mercedes-Benz control panel 0: Off 1: NTG3.5 2: NTG3.0 -->
<benzControl>0</benzControl>
<!-- Air conditioner display 0: Hide 1: Display -->
<airVisible>1</airVisible>
<!-- Speed type selection
0: Speed type 1
1: Speed type 2
-->
<speedType>0</speedType>
<!-- 360 startup camera
0: Not using the camera
1: Install additional camera
2: Original car camera
-->
<bootCamera>0</bootCamera>
<!-- Turn signal control 0: Uncontrolled 1: Controlled -->
<corneringLampControl>0</corneringLampControl>
<!-- MIC external and internal switching 0: external 1: internal -->
<micType>1</micType>
<!-- Vehicle button settings -->
<!-- MAP key selection 0: Android navigation 1: Original car navigation -->
<mapSelection>0</mapSelection>
<!-- MODE key selection 0: effective 1: ineffective -->
<modeSelection>0</modeSelection>
<!-- Voice key selection
0: No effect
1: Short press has no effect, long press to navigate
2: Short press to speak, long press to navigate
3: Short press to navigate, long press to have no effect
4: Hicar voice function button
-->
<voiceSelection>2</voiceSelection>
<!-- Phone button selection
0: Original car function
1: Android Bluetooth function
2: Undefined
-->
<phoneSelection>1</phoneSelection>
<!-- Dashboard selection
0: Current UI dashboard
2. Universal colorful
-->
<dashboardSelection>2</dashboardSelection>
<!-- Original car model display selection -->
<carTypeSelection>8</carTypeSelection>
<!-- Can protocol selection -->
<canProtocolSelection>0</canProtocolSelection>
<!-- Theme ID, use a value from `SupportUIList` -->
<uiSelection>31</uiSelection>
<!-- Boot logo, whether to use the default boot logo 0: Not used 1: Used -->
<bootLogoRestore>0</bootLogoRestore>
</factory>
</ConfigInfo>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment