Amazfit Stratos: Reverse engineering of NewWearSport.apk and NewWearSport.odex - Amazfit

I would like know how FirstBeat algorithms are implemented in Amazfit Stratos 2 and 3. From investigation I know the application NewWearSport.apk calculate Training Effect, EPOC, VO2max parameters.
The the necessary algorithms must be included in this application. I was able to pull down apk and odex files from watch, but I am not able to decode odex file to java sources files.
Could anybody help me to decode these files for further investigations? Thank you for your help.
Files:
NewWearSport.apk: drive.google.com/open?id=1mRYIcNZJFyqypulat7rOh_sK19IizN9D
NewWearSport.odex: drive.google.com/open?id=1so9Wm8dmCwqo-RkNKP9iiEOfEgcIG28p

For educational purposes you can use jadx.
Other useful tools are gathered in dex2jar.
Finally, a working deodex software that works on pace/stratos 2 systems is SVADeodexerForArt.

sensorhub.bin
From my researches, sensorhub.bin has something to do too with Vo2max calculation and not only the apk, but it can't be edited AFAIK.
On Hybrid ROM, you can enable Vo2max support for Pace using Stratos sensorhub.bin file, but HR and some other sensors will not work.
Attached:
S1=CN Stratos sensorhub.bin
S3=CN Stratos 3 sensorhub.bin

Related

Device files of sensors

What are the device files of various sensors? and can we use "read" to get the info.. I'm not familiar with java and its APIs, so i want to utilize the shell and C to max...

[Q] What file level function is used to read/write SQLite database file

Hi,
I am working on some sort of implementation for SQLite file encryption in Android devices. I would like to get some info about the low level function inside the SQLite source code (Amalgamation version) that is responsible for writing the database file to disk/storage (or reading from it)?
Based on my research inside SQLite source code (Android version), I found different functions that might be related to disk read/write operations. These functions are: winWrite(), unixWrite(), seekAndWrite(), unixRead().
So my question is that which one of these functions (or other lower functions) is responsible for the final writing to storage, right after the database file is closed and need to be saved?
Knowing that specific function can help us embed our encryption test module in the proper place of SQLite so that the encryption will occur exactly before saving database file to disk.
Thank you for any help.
P. S. I am not interested in current SQLite encryption products (Sqlcipher, SEE, etc) and prefer to test my own encryption algorithm.

Copying english voice prompt files to WOS 2.0 ?

I really want to switch to WOS 2.0, but the one thing preventing me from doing so is that the voice prompt (when running with bluetooth headphones), would be in chinese.
I know that pacefied has english voice prompts (or had, as I believe it's not working in the most recent versions)
So my question is: is it a simple case of copying over some english voice files to the watch?
Could I install WOS 2.0 and then after installation copy the english files ?
I did replace the chinese voiceprompts with the english ones in the NewWearSport.apk, installed the rooted spanished version from here:
https://www.htcmania.com/showthread.php?t=1412777
and replaced the NewWearSport.apk via adb.
Everything installed well and is working well but I don't hear any voiceprompts. Since I don't have that much outdoor activities now due to an injury I couldn't check, why the voiceprompts are not working. I guess it is better to wait for Saratoga79 to have it done.
nhedgehog said:
I did replace the chinese voiceprompts with the english ones in the NewWearSport.apk, installed the rooted spanished version from here:
https://www.htcmania.com/showthread.php?t=1412777
and replaced the NewWearSport.apk via adb.
Everything installed well and is working well but I don't hear any voiceprompts. Since I don't have that much outdoor activities now due to an injury I couldn't check, why the voiceprompts are not working. I guess it is better to wait for Saratoga79 to have it done.
Click to expand...
Click to collapse
You mean you couldn't hear the voice prompts when your bluetooth headphones were connected? Could you hear chinese voice prompts instead?
I realise that Saratoga could probably solve this problem fairly easily (that guy really seems to know what he's doing), but I don't want to keep asking him cos I realise he's busy.
I feel like it must be just a case of replacing files in the file system. Or is it not that simple?
Voiceprompts are in the NewWearSport.apk integrated. I replaced the Chinese ones with the English ones. I didn't check the Chinese ones before. You have to open the apk files to do so. For this you can use several tools. Since my manipulated apk did install properly I guess it is save to assume, that I did it allright.
nhedgehog said:
Voiceprompts are in the NewWearSport.apk integrated. I replaced the Chinese ones with the English ones. I didn't check the Chinese ones before. You have to open the apk files to do so. For this you can use several tools. Since my manipulated apk did install properly I guess it is save to assume, that I did it allright.
Click to expand...
Click to collapse
I see. My assumption was as follows:
When you install an apk, the files are unzipped to the android file system somewhere (e.g. a newwearsport/voiceprompt folder or something). I thought that (without installing a new apk) you could just copy english files directly to the folder. Perhaps there is some technical reason why this isn't possible. I know very little about this stuff.
The version of the voice files in EN is missing some phrases in the new sport app, but the version in Spanish seems to be complete. I will do some tests today, trying to use ES+EN, so no words in CN...
le_lutin said:
When you install an apk, the files are unzipped to the android file system somewhere (e.g. a newwearsport/voiceprompt folder or something). I thought that (without installing a new apk) you could just copy english files directly to the folder.
Click to expand...
Click to collapse
I just had a look on the watch to be on the safe side.
This quoted assumption is wrong. The only trace of the NewWearSport.apk I found was under:
\system\app\NewWearSport\NewWearSport.apk.
Where is a Subfolder mips which contains the actual code as odex file which I didn't touch.
We have some traces in the data folder :
\data\data\com.huami.watch.newsport
but not the voicefiles. So in my opinion the only way to get to this files is via replacing them in the NewWearSport.apk and installing the new version of this apk.
.
nhedgehog said:
I just had a look on the watch to be on the safe side.
This quoted assumption is wrong. The only trace of the NewWearSport.apk I found was under:
\system\app\NewWearSport\NewWearSport.apk.
Where is a Subfolder mips which contains the actual code as odex file which I didn't touch.
We have some traces in the data folder :
\data\data\com.huami.watch.newsport
but not the voicefiles. So in my opinion the only way to get to this files is via replacing them in the NewWearSport.apk and installing the new version of this apk.
.
Click to expand...
Click to collapse
Thanks man - you know this stuff better than I do!
lfom said:
The version of the voice files in EN is missing some phrases in the new sport app, but the version in Spanish seems to be complete. I will do some tests today, trying to use ES+EN, so no words in CN...
Click to expand...
Click to collapse
Sounds good!
I just did a quick and dirty replace of the voices with ES + EN, still a few phrases in CN but I think that all of them are used only for VO2max which is deactivated on Pace.
DISCLAIMER
** Although I have tested the procedure, if you do it then you do on your own risk. I am not responsible for any errors or damaged caused. **
Requires: WOS 2.0.6.12 set to "en" + adb + root, code is for macOS/Linux, probably on Windows it will work if you use "adb.exe" instead of "adb" (untested), apk file must be in current directory.
Code:
adb root
adb remount
adb shell mv /system/app/NewWearSport/NewWearSport.apk /system/app/NewWearSport/NewWearSport.apk_OLD
adb push NewWearSport.apk /system/app/NewWearSport/
adb shell chmod 0644 /system/app/NewWearSport/NewWearSport.apk
adb remount
adb reboot
To revert:
Code:
adb root
adb remount
adb shell rm /system/app/NewWearSport/NewWearSport.apk
adb shell mv /system/app/NewWearSport/NewWearSport.apk_OLD /system/app/NewWearSport/NewWearSport.apk
adb remount
adb reboot
EDIT: attached file removed, please see other post in this thread with all EN version and scripts to install/uninstall.
lfom said:
I just did a quick and dirty replace of the voices with ES + EN, still a few phrases in CN but I think that all of them are used only for VO2max which is deactivated on Pace.
DISCLAIMER
** Although I have tested the procedure, if you do it then you do on your own risk. I am not responsible for any errors or damaged caused. **
Requires: WOS 2.0.6.12 set to "en" + adb + root, code is for macOS/Linux, probably on Windows it will work if you use "adb.exe" instead of "adb" (untested), apk file must be in current directory.
Code:
adb root
adb remount
adb shell mv /system/app/NewWearSport/NewWearSport.apk /system/app/NewWearSport/NewWearSport.apk_OLD
adb push NewWearSport.apk /system/app/NewWearSport/
adb shell chmod 0644 /system/app/NewWearSport/NewWearSport.apk
adb remount
adb reboot
To revert:
Code:
adb root
adb remount
adb shell rm /system/app/NewWearSport/NewWearSport.apk
adb shell mv /system/app/NewWearSport/NewWearSport.apk_OLD /system/app/NewWearSport/NewWearSport.apk
adb remount
adb reboot
Click to expand...
Click to collapse
You're a legend! Will try this out as soon as I get a chance.
Thanks!
le_lutin said:
You're a legend! Will try this out as soon as I get a chance.
Thanks!
Click to expand...
Click to collapse
Please test the attached file, all voices in EN high quality, with scripts to install/remove for macOS, Linux and Win. I haven't tested the BAT scripts, if someone test them, please report back. Thanks.
DISCLAIMER
** Although I have tested the procedure, if you do it then you do on your own risk. I am not responsible for any errors or damaged caused. **
Requires: WOS 2.0.6.12 set to "en" + adb + root (permanent or use temporary)
- Unpack file
- Open command line and change directory to the contents of the file
- To install run "sh install_en_voices.sh" for macOS/Linux or "install_en_voices.bat" for Windows
- To uninstall run "sh remove_en_voices.sh" for macOS/Linux or "remove_en_voices.bat" for Windows
When reboot, watch will re-optimise all app, it's normal, simply wait. No data will be affected.
lfom said:
Please test the attached file, all voices in EN high quality, with scripts to install/remove for macOS, Linux and Win. I haven't tested the BAT scripts, if someone test them, please report back. Thanks.
DISCLAIMER
** Although I have tested the procedure, if you do it then you do on your own risk. I am not responsible for any errors or damaged caused. **
Requires: WOS 2.0.6.12 set to "en" + adb + root (permanent or use temporary)
- Unpack file
- Open command line and change directory to the contents of the file
- To install run "sh install_en_voices.sh" for macOS/Linux or "install_en_voices.bat" for Windows
- To uninstall run "sh remove_en_voices.sh" for macOS/Linux or "remove_en_voices.bat" for Windows
When reboot, watch will re-optimise all app, it's normal, simply wait. No data will be affected.
Click to expand...
Click to collapse
Nice work, will add this to next WOS ROM.
Btw, note that I had some problems with voices using different bitrate, frecuency or channel number comparing to stock CN voices. I face several Bluetooth issues due to this, even bluetooth disconnections, so be advised.
Saratoga79 said:
Nice work, will add this to next WOS ROM.
Btw, note that I had some problems with voices using different bitrate, frecuency or channel number comparing to stock CN voices. I face several Bluetooth issues due to this, even bluetooth disconnections, so be advised.
Click to expand...
Click to collapse
Thanks. And thank you for all the work you've done for the Amazfit community as well. No problems with my testings yesterday, I did a walk and also indoor running for testing. But this was the initial version, a quick build for testing purposes. Many of phrases can be improved, maybe it's better to wait until it's finished.
Regards
I tried it today while running. I got no voicealerts.
Settings:
Bluetooth headset connected but no musicplayer started (music playing is working with bluetooth headset [verified]).
Run - Settings - Training target (not set)
- Alerts - Lap Alert - on
- HR Alert - above 170
- HR Zone - off
- Auto Lap Alert - on
- Pace Alert - off
more settings - Voice prompt - on
- Auto Pause - off
- Auto Lap - off
- Realtime Stats - Heartrate
- Data Screen - 6fields
- 3D Data - on
- BG Color - white
nhedgehog said:
I tried it today while running. I got no voicealerts.
Click to expand...
Click to collapse
I have tested with walk and indoor run and it worked with me, enabled most voice alerts and I could hear warning on pace, heartrate and distance. If you don't connect the headphones in the Accessories part of the activity settings, then try to start playing a music before you start the activity and then pause it using the headset to make sure it's activated.
nhedgehog said:
I tried it today while running. I got no voicealerts.
Settings:
Bluetooth headset connected but no musicplayer started (music playing is working with bluetooth headset [verified]).
Run - Settings - Training target (not set)
- Alerts - Lap Alert - on
- HR Alert - above 170
- HR Zone - off
- Auto Lap Alert - on
- Pace Alert - off
more settings - Voice prompt - on
- Auto Pause - off
- Auto Lap - off
- Realtime Stats - Heartrate
- Data Screen - 6fields
- 3D Data - on
- BG Color - white
Click to expand...
Click to collapse
Try with music, if there is a problem with voice files music will stop playing
Thanks for the support.
Headphones were connected and playing music fine before.
I think I have an idea whats wrong.
1) I run with airplane mode on but bluetooth activated. (PaceON)
2) I did not use the settings accessories to connect with the headphones but did it before with music.
3) Auto Lap - off
Have test this theorie further.
Saratoga79 said:
Nice work, will add this to next WOS ROM.
Btw, note that I had some problems with voices using different bitrate, frecuency or channel number comparing to stock CN voices. I face several Bluetooth issues due to this, even bluetooth disconnections, so be advised.
Click to expand...
Click to collapse
NewWearSport concatenates all the mp3 files needed to form the phrase in a temporary mp3 file.... these means that all mp3 files need to be same bitrate and with no headers (xing, id3, VBRI or another tags at the start or end of the file)

Custom iMX8 board with Android 10, how to develop with C++ a I2C background service?

I have a specific client request where there is a custom carried board which is controlled by a iMX8 SOM. On this board there is installed the Android system because there are specific Android applications (Java and Kotlin) which need to be run. I need to create a background service which controls specific IO peripherals (I2C, GPIOs, UART, etc...).
I suppose that in order to make a background (using the board IO peripherals) service which runs at the start of the Android OS system is to develop a C/C++ application (CMake based project) which will be cross compiled using a toolchain for the iMX8 and will be started at system boot through the "init.rc" script, right? Have you any available guide/material for such purpose so that I can begin with the best-practice solution?
I already tried using Android NDK, but I have "permission denied" errors also when installing the app in the "system/priv-app" folder (with the correct permissions).
Which is the correct way to approach this kind of project? Thank you.

Question how to use perfetto (or any equivalent known to mankind) offline ON ANDROID to READ a system trace

so I have been searching everything I could think of on the internet trying to figure out how to read a system trace natively made by Android 13 on my Pixel 6 on the phone itself because I'm not with my computer and can't use it and it doesn't seem to be possible. now there's a web page application but it requires that you be connected to the internet and requires that your system traces be minuscule tiny or that you learn how to use an Android phone without a graphic user interface because I'm sorry My bad I'm not a programmer I don't really want to be and they want me to code something into my browser on my phone I don't even know how to do that just so that I can open a file as large as the trace I made I just want to figure out why my phone is doing something that it shouldn't be doing(several somethings actually randomly failing to allow internet connection to my Xbox beta app randomly shutting down screen recordings in the middle and booting my screen black and kicking me out of Android so that I have to log back in randomly running a work profile I didn't install the list goes on) so I can stop it from doing that please if anyone out there knows anyway at all on this Earth to open and read a file who's extension is perfetto-Trace without plugging into a computer just like you know on my phone I swear to God I'll do anything I'm begging you please help a ***** out cuz this girl is on her last ragged edged nerve over all this it's too much for one girl to figure out
perfetto is an open source tool provided by google. you can download the binaries they already provided for android. you can download your device specific binaries
Release Perfetto v35.0 ยท google/perfetto
v35.0 - 2023-06-07: Tracing service and probes: * Compression has been moved from perfetto_cmd to traced. Now compression is supported even with write_into_file. The `compress_from_cli`...
github.com
you need to install a terminal emulator , I suggest the Termux from fdroid.
then setup and initialize everything in Termux (I can't explain now, you can google it)
the from the extracted zip file of perfetto binaries, copy them to termux
``cp -r [directory path of the extracted] .``
``cd [directory name of the extracted] ``
The supported output formats are:
text - protobuf text format: a text based representation of protos
json - Chrome JSON format: the format used by chrome://tracing systrace: the ftrace text format used by Android systrace
Converting to systrace text format
./traceconv systrace [input proto file] [output systrace file]
example, systrace format are more human readable and easier
./traceconv systrace sample-trace.perfetto-trace sample-trace.systrace
Same way,
Converting to Chrome Tracing JSON format which is so familiar
./traceconv json [input proto file] [output json file]
is this way it will give a human readable output. now you can view output with a text editor
although reading a big file of 50-100MB May not be possible because of chunk issue. but Mostly it will show otherwise no hope. there's very limited tools out there
You can inbox me if you need assistance.
[Its my first answer on XDA]

Categories

Resources