yashsingh1/xdaforums huggingface dataset:
[Android Software Development] Yahoo Mike:
I'm looking at data decryption in TWRP for the Lenovo TB-X605F. I've hit a gap in my knowledge.

Can anyone explain to me how PLATFORM_SECURITY_PATCH_TIMESTAMP gets stored (at compile-time) and checked (at run-time)?

I can't see where it gets stored. The only hint I've got is that this appears after it gets defined in build/make/core/version_defaults.mk:

.KATI_READONLY := PLATFORM_SECURITY_PATCH_TIMESTAMP

...and maybe the "readonly" part is why it can't be changed at run-time ???

I've grep'ed the TWRP code and can't see PLATFORM_SECURITY_PATCH_TIMESTAMP being used/checked. How do I find out which library/executable is checking for PLATFORM_SECURITY_PATCH_TIMESTAMP ?

I'm guessing it's android.hardware.keymaster @ 3.0-impl.qti.so.

observations

Keymaster crashes with "Configure failed" if I build with:

PRODUCT_BUILD_PROP_OVERRIDES += PLATFORM_SECURITY_PATCH=2020-04-01

Keymaster also crashes with "Configure failed" in VOLD_DECRYPT after it patches for 2020-04-01.

I found that Keymaster does

not

crash if I export PLATFORM_SECURITY_PATCH before running envsetup.sh:

export PLATFORM_SECURITY_PATCH=2020-04-01

I can see that I'm overriding the default value for PLATFORM_SECURITY_PATCH in version_defaults.mk. That in turn calculates the correct PLATFORM_SECURITY_PATCH_TIMESTAMP. With just this one change, Keymaster configures without crashing (on boot and for VOLD_DECRYPT). So that's why I'm curious about PLATFORM_SECURITY_PATCH_TIMESTAMP.
[Android Software Development] VD171:
How can I port TWRP to my Motorola Moto One Macro (XT2016-2) ?

https://xdaforums.com/android/software-hacking/how-port-twrp-to-motorola-moto-one-macro-t4139841
[Android Software Development] palmbeach05:
Do it the right way, build from source
[Android Software Development] Yahoo Mike:
Is there a way to change the PLATFORM_SECURITY_PATCH_TIMESTAMP at run-time?

I can get data decryption working for the Lenovo TB-X605F/L by hardcoding the PLATFORM_SECURITY_PATCH in vendorsetup.sh. Device tree here.

This will require a rebuild everytime there's a new OTA security patch for the device.

VOLD_DECRYPT can change the PLATFORM_SECURITY_PATCH at run-time by updating system properties with the value from build.prop on /system.

If I can work out where the timestamp is stored at run-time, I could do something similar. The value is in build.prop, but I don't know where to copy it to. Our Keymaster QTI service is not reading it from system properties. It's stored somewhere else - hopefully not in the TEE.
[Android Software Development] VD171:
Omg, I will love if I really can do it. :p
[Android Software Development] The_Walking_Playground:
Hi,

Did you try using TW_OVERRIDE_SYSTEM_PROPS in BoardConfig for ro.build.version.security_patch, so that it automatically gets updated to the value from build.prop like vold decrypt does? See here for reference: https://github.com/TeamWin/android_bootable_recovery/commit/01a17998da063cdbba6305d00a3e282eb2d8d9fe

TWP
[Android Software Development] Yahoo Mike:
Thanks for the hint. Nice flag. I didn't know it existed.

I gave it a go. It worked as advertised, but didn't fix my problem. Keymaster still crashed with "Configure failed".

There's something about compiling with the correct SPL that fixes our Keymaster problem. Changing the SPL at run-time just isn't enough. Maybe the SPL (or its timestamp) ends up in the recovery image header and is checked by qseecom or keymaster??? I don't know.

Anyway, it looks like I'm stuck with compiling a new version for every OTA. This tablet (TB-X605F/L) must be close to EOL, so there won't be too many more OTAs to come.
[Android Software Development] :
0
[Android Software Development] walker425:
Please code for me also a twrp recovery for Tecno pop 2 B1
[Android Software Development] threadreaper:
First off, I really appreciate the guide! It hasn't been the easiest thing I've ever done by any means, but I think I'm getting close to getting this done! However, I am running into the following set of errors while trying to compile TWRP:

bionic/libc/upstream-openbsd/lib/libc/gdtoa/strtorQ.c:89:10: error: use of undeclared identifier 'ld_QNAN0'
L[0] = ld_QNAN0;
^
bionic/libc/upstream-openbsd/lib/libc/gdtoa/strtorQ.c:90:10: error: use of undeclared identifier 'ld_QNAN1'
L[1] = ld_QNAN1;
^
bionic/libc/upstream-openbsd/lib/libc/gdtoa/strtorQ.c:91:10: error: use of undeclared identifier 'ld_QNAN2'
L[2] = ld_QNAN2;
^
bionic/libc/upstream-openbsd/lib/libc/gdtoa/strtorQ.c:92:10: error: use of undeclared identifier 'ld_QNAN3'
L[3] = ld_QNAN3;

From what I've been able to gather from some stackoverflow threads, this may be related to using a c++ compiler when a C compiler should be used? I'm on arch linux, and have installed the aosp-devel packaged mentioned in the arch wiki to acquire all the necessary packages for compiling android source. If I'm correct about the origin of this error message, I'm uncertain how to go about fixing it. Any hints would be greatly appreciated!
[Android Software Development] peter9811:
How I can help to translate TWRP to Spanish?

A some string on the Recovery didn't translated...
[Android Software Development] a-dead-trousers:
Hi.

I tried to follow the guide in the first post to setup my LineageOS ROM to include TWRP instead of the built-in LineageOS recovery.

So I included it in the local_manifests of my build environment:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="TeamWin/android_bootable_recovery" path="bootable/recovery-twrp" remote="github" revision="android-10.0" />
</manifest>

But while building the ROM I get several errors of the following kind:

error: bootable/recovery/Android.bp:16:1: module "recovery_defaults" already defined
bootable/recovery-twrp/Android.bp:10:1 <-- previous definition here

So naturally I tried to delete "bootable/recovery" but it still shows some errors:

error: bootable/recovery-twrp/tests/Android.bp:145:1: "recovery_component_test" depends on undefined module "librecovery"
error: bootable/recovery-twrp/tests/Android.bp:145:1: "recovery_component_test" depends on undefined module "librecovery_fastboot"

First of all, is it possible to have

both

recoveries present in the source tree and just let BoardConfig.mk in my device's folder decide which one to use?

If not, can I somehow "exclude" just the project "bootable/recovery" of LineageOS from the source tree using my local_manifests?

(So I don't have to remove it every single time I sync my source tree)

Second of all, what do I need to put into local_manifests to get the mentioned missing modules or do I need to tamper with something else?

Please help out a total noob to understand what he did wrong :crying:

wkr ADT
[Android Software Development] a-dead-trousers:
This one I solved myself using "remove-project".

With this I don't know what to do. Couldn't find hardly any specific Information for "librecovery". It seems to be a library provided by the android build-environment itself. Because even "LineageOS/android_bootable_recovery" uses it in the same place and I couldn't find it anywhere else inside it's source-tree.

Can someone please shed some light on this mystery?

wkr ADT
[Android Software Development] 420fox1:
Alright completely new here, need help compiling for the SM-A715f
[Android Software Development] Brad kellyworld:
Turkish shop for sale New tablets VORCOM SXPRO and CORCORD C 754

New tablets VORCOM SXPRO devices support twrp root ınstalled error Failed

Twrp update ınstalled making work gives tablet vorcom SXPRO and CORCORD C 754b

Twrp :confused::confused:
[Android Software Development] Munirathinam:
I want TWRP RECOVERY.

Pls help

Mobile infinix note 7 x690.

MTK Helio G70 processor.

Help pls
[Android Software Development] palmbeach05:
Start building it then. Don't beg
[Android Software Development] Royna:
Hello, I made a TWRP for Samsung Galaxy A20e (Released in 2019, Android 10)

But I can't get the TWRP Screen to show. Just bootloader screen -> blank screen -> backlight on -> blank screen and so on

My TWRP Device Tree https://github.com/roynatech2544/A20e_TWRP_OMNI

Using Minimal-manifest-twrp android 10.0 branch
[Android Software Development] tek3195:
Backup vbmeta or no ?

I need to know if vbmeta needs to be included in fstab. After installing a ROM zip containing vbmeta.img will restoring a backup without vbmeta included work ? Device in question is a Samsung Galaxy Tab S5e(gts4lvwifi) and the official version will not reliably restore a backup. Do I need to include vbmeta when building unofficial ? If so, would it need to be as an emmc image or as a standard partition ?
[Android Software Development] Clamtacos:
Huawei P30 Lite model MAR-LX3A

Discovered there is no TWRP for my device, an Huawei P30 Lite model MAR-LX3A. I suspect this is most likely because the bootloader for other models of the P30 Lite (of which there are an overwhelming and confusing amount) required an unlock code from Huawei which were unavailable for sale at times.

In any case, with very little programming experience despite flashing ROMs of all kinds from phones to GPUs to game cartridges over the last decade, I've been directed here in as I try to learn how to do it myself. Apart from TWRP builder which won't work because my device is not in a bootable state, I didn't find much besides this guide. The unfortunate reality is that it would actually take me longer to learn how to do this than to earn the money to buy a different device with builds of TWRP already being supported.

So before I go do that, as a last ditch effort I wanted to ask if anyone would be willing to help me compile TWRP for this device by...

... doing it yourself with anything you need from me provided?​

... walking through it together realtime?​

... pointing me in to the direction of a magical way to compile without having to understand anything?​

A small gift worth about what a decent meal costs will be given to in return to show my appreciation.

Thank you,

Clam
[Android Software Development] alexenferman:
Is there any way I can retrieve logs when booting my compiled TWRP image? For some reason it will only loop and never actually show any screen. I made a custom Permissive kernel to make sure that boot doesn't stop it, but it still does not boot (And the stock one did not force permissive anyway). Can it be from the partition layout in the BoardConfig? I am not sure if it actually is right, as I tried a few terminal commands to show me the partitions. The only one which worked shows me the partition numbers and space in block, however QFIL shows double the space for any partition.

The device is a Bootloader unlocked ZTE Avid Plus w/android 5.1 and the TWRP image on the 7.1 branch.
[Android Software Development] DiamondJohn:
If your ROM still boots, you should be able to your read your last_kmsg. which will have the logs from your previous boot, which would be the failed TWRP boot attempt.
[Android Software Development] alexenferman:
Thank you very much. I thought it was impossible to get logs for this.

It appears on the third (#3) image that the log is displaying a DSI panel init issue and a mmc Channel allocation freed. I will investigate on this. Thanks again.
[Android Software Development] DiamondJohn:
Wait a sec, I also read this first post again, when I was notified of your quote of my response. Its actually been a couple of years since I built TWRP (someone else builds already for my current device:good:). However, my understanding is that ALL TWRP builds are permissive, to allow it to do the voodoo it does;). Last time I built TWRP, I used a kernel that created enforcing ROMs, but, obviously there is somewhere in the TWRP source that overrides the kernel setting.
[Android Software Development] Sanzium:
What is the state of the android-10.0 branch?

I succesfully builded it for cepheus (Xiaomi MI 9), the recovery booted, but was stuck on the logo screen.

Also, what is the state of Android 11 decryption support? I tried looking in the commits on GitHub, but wasn't able to find anything explicitly related to this.

Thanks!
[Android Software Development] DeadP00ll:
FBE Andorid 10

Hi, guys.

Does anyone succedded in building TWRP for native android 10 with FBE support?

I'am stuck on freeze on TWRP logo on boot... and no log availible. Without enabling encryption in TWRP it boots up and working everything (system/vendor/OTG/sd-card....). (data is encrypted), but with

TW_INCLUDE_CRYPTO := true
TW_INCLUDE_CRYPTO_FBE := true

TWRP freezes on logo =( If i comment userdata in fstab or replace real block path to "dummyblock" it will boot, but without data, of course.

Device is: Cubot X30

CPU: mtk6771

Shipped android 10 with FBE

My device tree on github: DeadPo01/android_device_cubotx30_twrp_tree (can't post links =( )

I'am using minimal manifest twrp-10

Can someone help me with what to try do next?
[Android Software Development] DiamondJohn:
https://xdaforums.com/showpost.php?p=83780337&postcount=4632

check your last_kmsg.
[Android Software Development] DeadP00ll:
Thx for answer. I've checked this file/log but it's hardly readable... almost not readable. Is it's correct ot it's something wrong with log?
[Android Software Development] MaazKhalid:
Request

Can anyone create twrp for tecno ke7 (spark 6) please.
[Android Software Development] fsw_informatrix:
Yes, YOU.

The title of this thread is "How to compile TWRP" and it is there for helping you if you face a specific problem, trying to do it YOURSELF.

So, start trying or make a new thread where you beg or pay someone to do it for you!

I'm sick and tired of people polluting this thread regularly with the same dumb question...
[Android Software Development] DiamondJohn:
I too get annoyed with the number of people who attempt to use this thread for requesting someone else do the build for them. As soon as I see these requests, I simply press the report button, and the post is quickly removed by the admins. There is no need to quote them. Report them and have the post removed. Hopefully before I have to read their post;)
[Android Software Development] fsw_informatrix:
Thanks for the tip, I didn't thought about that. Will do if it happens again, it is a much easier way to get rid of those messages and to keep our nerves at the same time ;)
[Android Software Development] DeadP00ll:
Hi. I'am trying to build TWRP for Cubot X30 MTK6771 Android 10 from minimal_manifest_twrp(Android 10) with FBE support.

Stuck on TWRP logo on boot with this messages in logcat:

11-10 08:07:34.268 329 329 W ServiceManagement: Waited one second for android.hardware.keymaster@4.0::IKeymasterDevice/default
11-10 08:07:34.269 329 329 I ServiceManagement: getService: Trying again for android.hardware.keymaster@4.0::IKeymasterDevice/default...
11-10 08:07:35.269 329 329 W ServiceManagement: Waited one second for android.hardware.keymaster@4.0::IKeymasterDevice/default
11-10 08:07:35.270 329 329 I ServiceManagement: getService: Trying again for android.hardware.keymaster@4.0::IKeymasterDevice/default...

And this messages in last_kmsg:

[ 83.252424] (0)[1:init]init: Received control message 'interface_start' for 'android.hardware.keymaster@4.0::IKeymasterDevice/default' from pid: 302 (/sbin/hwservicemanager)
[ 83.252493] (0)[1:init]init: Could not find 'android.hardware.keymaster@4.0::IKeymasterDevice/default' for ctl.interface_start
[ 84.253918] (0)[1:init]init: Received control message 'interface_start' for 'android.hardware.keymaster@4.0::IKeymasterDevice/default' from pid: 302 (/sbin/hwservicemanager)
[ 84.253987] (0)[1:init]init: Could not find 'android.hardware.keymaster@4.0::IKeymasterDevice/default' for ctl.interface_start

I'am just can't understand, why it can't find Keymaster.... It exists in the same folder as the hwservicemanager.. =(

Can someone help me with this, please?

PS: my device tree https://github.com/DeadPo01/android_device_cubotx30_twrp_tree

All logs in zip: https://drive.google.com/file/d/1o0ct4jRgT12w041bQl9-5hNymwu9gwIH
[Android Software Development] DeadP00ll:
I've dealt with this error. And now i have my TWRP booting up, by not decrypting data with this error in recovery.log

I:Setup_Data_Partition::Key_Directory::
I:File Based Encryption is present
fscrypt_initialize_systemwide_keys returned fail
fscrypt_initialize_systemwide_keys returned fail
fscrypt_initialize_systemwide_keys returned fail
I:Trying wrapped key.
I:File Based Encryption is present
fscrypt_initialize_systemwide_keys returned fail
fscrypt_initialize_systemwide_keys returned fail
fscrypt_initialize_systemwide_keys returned fail
E:Unable to decrypt FBE device
I:Setting up '/data' as data/media emulated storage.
I:Not recreating media folder on FBE

I think it should ask for pattern/password before trying to decrypt data, but it's not...

May be there is another logs somewhere else from encrypt/decrypt functions to search for error?

last_kmsg and logcat is telling nonthing about decryption.

device twrp tree: https://github.com/DeadPo01/android_device_cubotx30_twrp_tree
[Android Software Development] DeadP00ll:
I've moved on further and faced that error in logcat:

11-19 10:14:55.017 492 492 E vendor.mediatek.hardware.keymaster_attestation@1.1-service: Could not get passthrough implementation for vendor.mediatek.hardware.keymaster_attestation@1.1::IKeymasterDevice/default.
11-19 10:15:00.024 493 493 E android.hardware.gatekeeper@1.0-service: Could not get passthrough implementation for android.hardware.gatekeeper@1.0::IGatekeeper/default.
11-19 10:15:00.026 494 494 E vendor.mediatek.hardware.keymaster_attestation@1.1-service: Could not get passthrough implementation for vendor.mediatek.hardware.keymaster_attestation@1.1::IKeymasterDevice/default.

And that error in reocvery.log when trying to decrypt from adb with comand decrypt:

I:Command 'decrypt pattern' received
I:Set page: 'singleaction_page'
I:operation_start: 'TWRP CLI Command'
E:Unexpected value for crypto key location
E:Error getting crypt footer and key
E:Could not get footer

Can't understand what it needs.... =(

Any help, please?
[Android Software Development] alexenferman:
Deleted
[Android Software Development] alexenferman:
Hi everyone, I am getting this error while building TWRP android-10.0 branch trough Lineage OS 17.

build/make/core/base_rules.mk:510: error: overriding commands for target `out/target/product/ginna/recovery/root/system/etc/mkshrc', previously defined at build/make/core/base_rules.mk:510
19:40:19 ckati failed with: exit status 1
[Android Software Development] roynatech2544:
@Dees_Troy

I have sucessfully compiled TWRP from source for my device. Samsung Galaxy A20e. Can I get it official?

Links:

Device Tree : https://github.com/roynatech2544/TWRP_device_samsung_a20e
[Android Software Development] artd3vx:
bro,ihave a cubot x30 also,if possible bro,can u share your TWRP if u already finalised it

thanks
[Android Software Development] alexenferman:
Contact the Teamwin team via their website, but you must make sure that everything works in the recovery
[Android Software Development] DeadP00ll:
No, i've stuck on decrypting data =( Now i'am trying to read sources, but because i know nothing about android as a programmer it's too hard and i don't have much free time for it =(

And there is nowhere to ask for help, cause noone did it before (Android 10 TWRP with data decrypt)
[Android Software Development] Yahoo Mike:
Big shout out to CaptainThrowback and the TeamWin team for the incredible work on android_device_qcom_twrp-common . It takes all the pain out of decryption on QCom devices.

Decryption worked on the first compile for the Lenovo TB-X505F (android-10.0). I couldn't believe it.

Amazing !
[Android Software Development] 4n0nymou2:
Is Proton AOSP Rom (Android 11) on Pixel 4a 5G supported for compiling?
[Android Software Development] Severus_:
I have built it successfully, but when I booted it from boot.img, lineage logo appeared and boot loop - no twrp logo.

I replaced bootable/recovery of lineageos with teamwin. What's wrong here?
[Android Software Development] DiamondJohn:
Is anyone building TWRP based off of A11 trees? I understand that the A10 only just official got released, but my device is A11 and I feel so naked without a TWRP if only to create and restore nandroids.
[Android Software Development] Jespert:
Is it possible to compile TWRP 3+ based on CM11?
[Android Software Development] SummerCicada:
Hey bro did you solve this problem ?
[Android Software Development] a-dead-trousers:
Nope. I switched to a Omni Rom based build.

https://github.com/minimal-manifest-twrp/platform_manifest_twrp_omni.git

Although I think most of the problems I encountered back then originated in the fact that the Android 10 support in TWRP wasn't fully implemented when I started my work.

Meanwhile (almost) everything works with my Omni build so I don't have the desire to go through the hassle again and switch back to Lineage only for the novelity of having to maintain just one device tree.
[Android Software Development] Jespert:
Hello, have you managed to fix this?
[Android Software Development] loloudoudara:
Hi guys,

I'm trying to build TWRP for a Surface Duo A/B device that originally shipped with Android 10. I'm using the minimal TWRP-only repo and created the BoardConfig.mk file. I get a successfuly build but I don't even get the TWRP logo splashcreen when I "fastboot boot recovery.img". Any tips on how to troubleshoot this, maybe a log to look at, a dmesg like tool, or some obvious pitfalls?

DEVICE_PATH := device/microsoft/surfaceduo

# A/B devices
AB_OTA_UPDATER := true

# Architecture
TARGET_ARCH := arm64
TARGET_ARCH_VARIANT := armv8-2a
TARGET_CPU_ABI := arm64-v8a
TARGET_CPU_ABI2 :=
TARGET_CPU_VARIANT := generic
TARGET_CPU_VARIANT_RUNTIME := kryo385
TARGET_CPU_SMP := true

TARGET_2ND_ARCH := arm
TARGET_2ND_ARCH_VARIANT := armv8-2a
TARGET_2ND_CPU_ABI := armeabi-v7a
TARGET_2ND_CPU_ABI2 := armeabi
TARGET_2ND_CPU_VARIANT := cortex-a9
TARGET_2ND_CPU_VARIANT_RUNTIME := kryo385
TARGET_USES_64_BIT_BINDER := true

ENABLE_CPUSETS := true
ENABLE_SCHEDBOOST := true

ALLOW_MISSING_DEPENDENCIES=true

# Bootloader
BOARD_VENDOR := qualcomm
TARGET_SOC := qcom #snapdragon855
TARGET_BOOTLOADER_BOARD_NAME := surface.duo
TARGET_NO_BOOTLOADER := true
TARGET_NO_RADIOIMAGE := true

# Kernel
BOARD_KERNEL_BASE := 00000000
BOARD_KERNEL_PAGESIZE := 4096
BOARD_INCLUDE_RECOVERY_DTBO := true
BOARD_PREBUILT_DTBOIMAGE := $(DEVICE_PATH)/prebuilt/dtbo
TARGET_PREBUILT_KERNEL := $(DEVICE_PATH)/prebuilt/zImage
BOARD_KERNEL_OFFSET := 0x00008000
BOARD_RAMDISK_OFFSET := 0x01000000
BOARD_KERNEL_TAGS_OFFSET := 0x00000100
BOARD_BOOTIMG_HEADER_VERSION := 2

BOARD_MKBOOTIMG_ARGS := \
--kernel_offset $(BOARD_KERNEL_OFFSET) \
--ramdisk_offset $(BOARD_RAMDISK_OFFSET) \
--tags_offset $(BOARD_KERNEL_TAGS_OFFSET) \
--header_version $(BOARD_BOOTIMG_HEADER_VERSION)

BOARD_KERNEL_IMAGE_NAME := zImage.gz-dtb

# Platform
TARGET_BOARD_PLATFORM := msmnile
TARGET_BOARD_PLATFORM_GPU := qcom-adreno640

# Filesystem
BOARD_HAS_LARGE_FILESYSTEM := true
TARGET_USERIMAGES_USE_EXT4 := true
TARGET_USERIMAGES_USE_F2FS := true

# System as root
BOARD_BUILD_SYSTEM_ROOT_IMAGE := false
BOARD_SUPPRESS_SECURE_ERASE := true

# Workaround for error copying vendor files to recovery ramdisk
BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
TARGET_COPY_OUT_VENDOR := vendor

# Recovery
BOARD_HAS_LARGE_FILESYSTEM := true
TARGET_RECOVERY_PIXEL_FORMAT := "ABGR_8888"

TARGET_SCREEN_HEIGHT := 1800
TARGET_SCREEN_WIDTH := 1350

# TWRP specific build flags
TW_THEME := portrait_hdpi
RECOVERY_SDCARD_ON_DATA := true
TW_BRIGHTNESS_PATH := "/sys/class/backlight/panel0-backlight/brightness"
TW_EXCLUDE_DEFAULT_USB_INIT := true
TW_EXTRA_LANGUAGES := true
TW_INCLUDE_NTFS_3G := true
TW_USE_TOOLBOX := true
TW_NO_LEGACY_PROPS := true
TW_INPUT_BLACKLIST := "hbtp_vm"
TW_MAX_BRIGHTNESS := 255
TW_DEFAULT_BRIGHTNESS := 180
TW_Y_OFFSET := 80
TW_H_OFFSET := -80
TW_SCREEN_BLANK_ON_BOOT := true

# prevent anti-rollback
PLATFORM_SECURITY_PATCH := 2099-12-31

# fstab
PRODUCT_COPY_FILES += device/microsoft/surfaceduo/twrp.fstab:recovery/root/etc/twrp.fstab
[Android Software Development] Rootmaster906:
I noticed in one of the settings in twrp it says fix recovery boot loop. Version 3.3.1 for Google pixel. Does this actually work? And besides the title, what exactly does it do?