See https://kamilbrk.github.io/ksw/updates and Android Automotive Headunits Discord.
-
-
Save kamilbrk/6cf79d300523b64c13881911fa535bad to your computer and use it in GitHub Desktop.
In the process of updating the website to contain both KSW and ZXW changelogs. In the meantime, see Android Automotive Headunits Discord.
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 itsSupportUIListNotTestedYet
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 from2023.12.01-18:21
to2024.01.06-17:38
- Added code for 360 assistance, DVR recording, automatic file deletions, handling additional storage, etc
- Zlink (
com.zjinnova.zlink
) app updated from5.4.25
to5.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 from1.0-2023-11-15:19-23_20231115-07:23:14
to1.0-2023-12-23:10-36_20231223-10:36:46
- Improved out of memory crash and exception handling
- BTSuite (
com.szchoiceway.btsuite
) app updated from1.0-2023-12-05:16-11
to1.0-2024-01-10:14-22
- Improved handling for pausing music
- CustomerUI (
com.szchoiceway.customerui
) app updated from1.02023-12-02:17-59
to1.02024-01-03:17-33
- Added labels for Bluetooth music
- Dashboard (
com.szchoiceway.ksw_dashboard
) app updated from1.02023-11-23:15-57
to1.02024-01-12:17-00
- Equalizer (
com.szchoiceway.equalizer
) app updated from1.02023-11-27:10-53
to1.02024-01-02:18-05
- EventCenter (
com.szchoiceway.eventcenter
) app updated from1.0-2023-12-04:14-32
to1.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 intentcom.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 runswitch9211(0)
to indicate that head unit has the old 360 camera chip (?) - File
/zxw_switch_9211.txt
will runswitch9211(1)
to indicate that head unit has a newLontium LT9211
(2-Port MIPI/LVDS Repeater) chip (?) - File
/zxw_switch_debug.txt
will runswitchDebug(0)
- File
/zxw_switch_user.txt
will runswitchDebug(1)
- File
- FatSet (
com.szchoiceway.fatset
) app updated from1.02023-11-23:15-55
to1.02023-12-28:11-41
- New factory setting checkbox to toggle 9211 chip device
- New client
CK
found (on top of existingALS_6208
,GS
,LHX2306
andLS2682
)
- MusicPlayer (
com.szchoiceway.musicplayer
) app updated from1.0-2023-12-01:16-44
to1.0-2024-01-12:16-30
- Support for new themes
- Support for pause event from Bluetooth app
- NaviSettings (
com.szchoiceway.settings
) app updated from1.02023-12-05:16-17
to1.02024-01-09:17-56
- Navigation (
com.szchoiceway.navigation
) app updated from1.02023-11-23:15-52
to1.02024-01-03:10-30
- UpdateMCU (
com.szchoiceway.updatemcu
) app updated from1.02023-11-23:15-59
to1.02024-01-11:19-55
- Background service to detect
mcu_update_auto.bin
- Background service to detect
- VideoPlayer (
com.szchoiceway.videoplayer
) app updated from1.0-2023-12-01:16-44
to1.0-2024-01-10:16-54
- SystemUI app
- Changes to notifications handler
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 version2023.12.01-18:21
- zxw360 (
com.fibocom.multicamera
) app removed - ApkInstall (
com.szchoiceway.apkinstall
) app updated from1.0-2023-10-24:14-50_20231024-02:50:32
to1.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 from1.0-2023-10-24:20-08
to1.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
andshowLexusAirWind
events - new Bluetooth and A2DP events
- new
- Removed
xbin/zxw_su
binary and replaced with standardxbin/su
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)
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 from7.3.6.20230711
to7.4.5.20230925
- Added handling for keyboard visibility events
- zxw360 (
com.fibocom.multicamera
) app updated from1.1.0.230529.1027
to1.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 version1.02023-10-13:17-44
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
- in
-
New apps
- in
system/app
- CarLetter (
com.carletter.car
) app version7.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 password12345678
. - 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
- The "customer platform" is set to
- Developed by company "CarAuto", looks like equivalent of Zlink:
- ExtShared (
android.ext.shared
) app version1
that does absolutely nothing
- CarLetter (
- 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 version1.0
- SysVarProvider (
com.szchoiceway.providers.settings
) app version12
- Basically a third party library, wrapper for SQLite database for other apps to store settings.
- SystemUpdaterSample (
com.example.android.systemupdatersample
) app version12
- Looks like an update manager capable of downloading OTAs. Expects
config.json
orupdate.zip
files, and switching slots (A/B) to boot the device from a new slot after a successful update.
- Looks like an update manager capable of downloading OTAs. Expects
- zxw360 (
com.fibocom.multicamera
) app version1.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.
- Shell (
- in
system/product/app
:- ApkInstall (
com.szchoiceway.apkinstall
) app version1.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
orapk_en
directory of the U disk and put the multimedia files in themedia
directory of the U disk."
- BTSuite (
com.szchoiceway.btsuite
) app version1.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
andlandrover
- Similar purpose as KSW's
- CustomerUI (
com.szchoiceway.customerui
) app version1.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 version1.0
- EventCenter (
com.szchoiceway.eventcenter
) app version1.0-2023-07-14:20-42
- FatSet (
com.szchoiceway.fatset
) app version1.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 version1.0
- KSWCmmb (
com.szchoiceway.ksw_cmmb
) app version1.0
- KSWDvd (
com.szchoiceway.ksw_dvd
) app version1.0
- KSWDvr (
com.szchoiceway.ksw_dvr
) app version1.0
- KSWFCamera (
com.szchoiceway.ksw_fc
) app version1.0
- Launcher3QuickStep_ksw (
com.android.launcher3
) app version1.0
with crash handler and/mnt/usb_storage/log/
location - LogCapture (
com.szchoiceway.logcapture
) app version1.0
- MusicPlayer (
com.szchoiceway.musicplayer
) app version1.0-2023-06-25:16-12
with SDCard/USB1/USB2 handling, Bluetooth calling, searching for music and video - NaviSettings (
com.szchoiceway.settings
) app version1.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 version1.0
- References to various UIs for vendors:
ANCHANGXING
,AOCHEKAI
,BORUIZENGHENG
,CHEKU
,HANGFEI
,HANGRUN
,HUANGRUN
,KEISAWEI
,KESHANG
,MAIRUIWEI
,MAISILUO
,NORMAL
,PUSIRUI
,XINGSHUO
,ZHONGHANGTIANYI
- References to various UIs for vendors:
- TXZWeatherApp (
com.txznet.weather
) app version1.0.5_5
- TestTools (
com.szchoiceway.testtools
) app version230322-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 version1.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/";
- Labels referencing "BT upgrade file"
- VideoPlayer (
com.szchoiceway.videoplayer
) app version1.0-2023-06-25:16-13
- ecar (
com.ecar.assistantnew
) app version4.4.11.A.011.2046
- zxwmedia (
com.szchoiceway.zxwmedia
) app version1.0-2023-03-08:17-40
- ApkInstall (
- in
-
There's a
product/app/CarType.xml
with the same style configuration like KSW'sfactory_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 withOEM/zxw_factory_config.xml
:SupportUIList
with justUI_EVO_ID7
(ID16
)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 thantime.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 |
-
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
-
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:
and put that entire ext4fuse folder into "bin"
git clone https://github.com/gerard/ext4fuse.git cd ext4fuse make
- Get payload-dumper-go from https://github.com/ssut/payload-dumper-go and make it executable
and similarly, put that into the "bin" folder
chmod +x payload-dumper-go
- Get sdat2img.py file from https://github.com/xpirt/sdat2img and put that into "bin" folder as well
-
Install tools using Homebrew on macOS
brew install brotli # only needed for Android 10 images brew install apktool brew install jadx
-
Make sure the provided script is executable:
chmod +x script.sh
-
Download KSW OTA zip updates
-
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
-
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
-
-
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> |