Segmentation Fault in all customs ROMs

Search This thread

andyro2008

Senior Member
Nov 22, 2012
250
89
Rosario
The Segmentation Fault error is fixed on LineageOS. It will be fixed progressively in any other ROM in the upcoming updates.

Infinite thanks to @wzedlare, and the other persons and devs that helped us. Im gonna request to mods to close this thread


And over again thanks to all! I'm so happy now!

On certain devices a series of binaries, shell/ADB commands are not working correctly.
Most of the time when one of these binaries I invoked the crash with a "Segmentation fault" error (SIGEGV 11). If the command/binarie is executed multiple times, at some point it works without the error. (1 of 30 times approximately).

These commands/binaries are very important for Root applications, but are not limited to them.
As a result many applications that need ROOT work very sporadically, and some not root apps are affected too.

If you are suffering the same problem, please share your logcats, the app or the command affected, and your device model, in order to get more information about the problem to help the devs and other users.

Affected ROMs and Devices

So far all customs ROMs for Cedric are affected. It appears to be related to a Cedric variant with Dual SIM, removable battery and 3GB of RAM. Mostly sold in Europe trough Amazon.

Known affected apps and Workarrounds:

  • SuperSu and MagikSU(all versions): Devices rooted with Magisk or SuperSu, suffer from the error almost every time that SU binarir is invoked. The visible symptom is that although according the info provided by the application (Magisk manager says that the device is correctly rooted), the requests to get root permission will not popup because the binarie is crash almost 29 to 30 times. As a result these options for root are almost useless.
  • LineageOS SU By itself works correctly, the binarie will not crash, but the other commands still will be affected. Is the most funtional root option for affected devices!!
  • Secure Settings, BetterBattery stats, AutoTools ADB commands to Grant permissions can be executed multiple times. Once authorized, they work correctly.
  • Super Doze To change doze settings you need to press apply button multiple times. There is no way to know when the change was actually applied except using ADB.
  • Nap Time it's useless to change doze settings, but force doze is working.
  • Greenify, Servicely The will pop out an error every time that trying to stop every single app. In short they are useles.
  • Titanium BackUp and Link2SD To freeze or unfreeze an app you must tap multiples times until it work.
  • Disable Services Tap multiple times until it work.
  • LiveBoot After installed it will work only 1/30 reboots (Useless)

Known affected binaries
  • pm
  • am
  • settings
  • adb backup
  • Magisk Su, and Super Su

Disclaimer​
:

I'm not a developer. I created this topic to help other users, to find a workarounds to the error. I'm not a developer. I created this topic to help other users, to find a way to dodge the error.
In addition I hope to raise awareness about this problem and help the devs with the information that is recopiled.

Screenshots Examples and Logcats of the error

Logcat: http://cloud.tapatalk.com/s/59...279dd2/2017-07-25-12-12-33.txt
Series of post in LineageOS Thread talking about the issue: https://forum.xda-developers.com/g5/development/7-1-x-lineageos-14-1-moto-g5-t3611973/page48
Tipical Crash message after invoking a command:
Code:
08-23 19:04:28.670 12408 12408 I chatty  : uid=0(root) app_process expire 847 lines
08-23 19:04:28.694 11748 11748 W Atfwd_Sendcmd: AtCmdFwd service not published, waiting... retryCnt : 4
08-23 19:04:28.715 12408 12408 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9c in tid 12408 (app_process)
08-23 19:04:28.716   402   402 I chatty  : uid=0(root) /system/bin/debuggerd expire 2 lines
08-23 19:04:28.777 12410 12410 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-23 19:04:28.778 12410 12410 F DEBUG   : LineageOS Version: '14.1-20170811-UNOFFICIAL-cedric'
08-23 19:04:28.778 12410 12410 F DEBUG   : Build fingerprint: 'motorola/lineage_cedric/cedric:7.1.2/NJH47F/43d07c81c5:userdebug/test-keys'
08-23 19:04:28.778 12410 12410 F DEBUG   : Revision: '0'
08-23 19:04:28.778 12410 12410 F DEBUG   : ABI: 'arm'
08-23 19:04:28.778 12410 12410 F DEBUG   : pid: 12408, tid: 12408, name: app_process  >>> app_process
[/Quote]
 
Last edited:

ektus

Senior Member
Aug 13, 2017
226
198
Bayern
I've got the recommended LineageSU method installed but normally don't use ADB. The only application I did try to use is Liveboot, where the test mode fails to start quite often. Transferring files via USB won't work on the first try, but I don't know how to tell if that is related. My device also is the European G5 with triple slot, 16GB and removable battery, type XT1676 or M2675. Currently running the unofficial LineageOS 14.1 build by @wzedlare from August, 2017.
 

andyro2008

Senior Member
Nov 22, 2012
250
89
Rosario
I've got the recommended LineageSU method installed but normally don't use ADB. The only application I did try to use is Liveboot, where the test mode fails to start quite often. Transferring files via USB won't work on the first try, but I don't know how to tell if that is related. My device also is the European G5 with triple slot, 16GB and removable battery, type XT1676 or M2675. Currently running the unofficial LineageOS 14.1 build by @wzedlare from August, 2017.
The easiest way to check if a problem is caused by the segmentation fault is open a terminal emulator session (you can install any terminal emulator from the Playstore), and write:

su
logcat | grep "signal 11 (SIGSEGV)"


It will filter the logcat showing the Segmentation Fault errors. If you get new errors when performing an certain action, or opening certain app, it's affected by the error.

Enviado desde mi Moto G5 mediante Tapatalk
 

ektus

Senior Member
Aug 13, 2017
226
198
Bayern
The easiest way to check if a problem is caused by the segmentation fault is open a terminal emulator session (you can install any terminal emulator from the Playstore), and write:

su
logcat | grep "signal 11 (SIGSEGV)"

That one shows quite a number of results, at a first glance most with
Code:
signal 11 (SIGSEGV), code 1 (SEGV_MAPPER), fault addr 0x9c in tid xxxxx (zygote)
and one of each with
Code:
(app_process)
and
Code:
(Downloadmanager)

The fault addr is always the same except for the Downloadmanager where it's
Code:
code 2 (SEGV_ACCERR), fault addr 0x200006464
.

Regards
Ektus.
 
Jan 20, 2017
39
12
Ulm
Just for reference and to add to the discussion started in the Moto G5 TWRP thread, I never had any such issuess. My model is the 3GB dual sim version, bought at Amazon Germany. LineageOS with root addon.
 
Last edited:
  • Like
Reactions: andyro2008

mrfrantastic

Senior Member
Sep 23, 2013
293
89
Don't know if it is of importance but it never got to boot a clean system with changed filesystem. Tried to change /data to ext4, also tried it with /system as f2fs but nothing worked. This also happened with the new TWRP 3.1.1.
I also tried to flash phh supersu with noverity. But could only boot to bootloader which gave me an error.

Just wanted to share my attempts. I have limited knowledge of the fundamentals of segmentation so I just tried whatever I could find.
 

andyro2008

Senior Member
Nov 22, 2012
250
89
Rosario
Just for reference and to add to the discussion started in the Moto G5 TWRP thread, I never had any such issuess. My model is the 3GB dual sim version, bought at Amazon Germany. LineageOS with root addon.

F***! what will be the difference between your device and mine?

Did you ever use the rooted stock ROM?
Can you please, share these numbers from the sticker behind your battery, to know your exact device variant:
d9ab6e7812ee436e353df4d1c5e7089e.jpg


Thanks for your help!

Enviado desde mi Moto G5 mediante Tapatalk
 
Last edited:

andyro2008

Senior Member
Nov 22, 2012
250
89
Rosario
Anyone affected with segmentation fault error, o with a device with Dual SIM, please share these numbers.

A picture is not necessary, just the numbers. It's behind the battery
c8e7e7e1dc7a87dd15f99e399a9d5ce0.jpg


Enviado desde mi Moto G5 mediante Tapatalk
 

andyro2008

Senior Member
Nov 22, 2012
250
89
Rosario
Jan 20, 2017
39
12
Ulm
Let's see if @floydburgermcdahm has exactly the same device. Perhaps there is more than one 3gb Dual SIM Variant.

Mine is: XT1676, 3+16GB, FCC ID: IHDT56VF4, Type: M2675

So, no idea what the difference between our devices might be. :( I did use the stock ROM briefly, but never rooted it. Went straight to LOS with root addon.

Yeah and thanks for reminding me that the bloody case is a ***** to open! :p :D
 
Last edited:

mrfrantastic

Senior Member
Sep 23, 2013
293
89
Mine is: XT1676, 3+16GB, FCC ID: IHDT56VF4, Type: M2675

So, no idea what the difference between our devices might be. :( I did use the stock ROM briefly, but never rooted it. Went straight to LOS with root addon.

Yeah and thanks for reminding me that the bloody case is a ***** to open! :p :D
So if you type "pm" in a terminal you don't get a segmentation fault?
 

andyro2008

Senior Member
Nov 22, 2012
250
89
Rosario
Just for reference my phone doesn't have any issues with root function

XT1675
2+16gb

All other numbers are the same

The FCC ID is the registration code for the United States
Federal Communications Commission
First three letters are grantee code - the rest is product code

I think the type relates to the battery size

I tried a strace with the command "pm". Something of this can be useful? Can it be something related to libraries? Those "No such file or directory" are weird. The full log files, one from a successfull pm and another for a failed one, are attached. Thanks for your atention, i hope you could help us.

Code:
openat(AT_FDCWD, "/system/lib/libart.so", O_RDONLY|O_LARGEFILE) = 5
fstat64(5, {st_mode=0, st_size=1, ...}) = 0
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
_llseek(5, 5888928, [5888928], SEEK_SET) = 0
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1320
_llseek(5, 4584364, [4584364], SEEK_SET) = 0
read(5, "\0.symtab\0.strtab\0.shstrtab\0.inte"..., 4096) = 4096
_llseek(5, 4584348, [4584348], SEEK_SET) = 0
read(5, "libart.so\0\0\0\21\r\350\370\0.symtab\0.strtab"..., 4096) = 4096
close(5)                                = 0
openat(AT_FDCWD, "/system/lib/.debug/libart.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/debug/system/lib/libart.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
clock_gettime(CLOCK_MONOTONIC, {7390, 135831818}) = 0
openat(AT_FDCWD, "/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = 5
fstat64(5, {st_mode=0, st_size=1, ...}) = 0
mmap2(NULL, 1075276, PROT_READ, MAP_PRIVATE, 5, 0) = 0xaaada000
close(5)                                = 0
openat(AT_FDCWD, "/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = 5
fstat64(5, {st_mode=0, st_size=1, ...}) = 0
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
_llseek(5, 1074116, [1074116], SEEK_SET) = 0
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1160
_llseek(5, 1073810, [1073810], SEEK_SET) = 0
read(5, "\0.shstrtab\0.interp\0.note.android"..., 4096) = 1466
_llseek(5, 1073782, [1073782], SEEK_SET) = 0
read(5, "libandroid_runtime.so\0\0\0o\223i\206\0.sh"..., 4096) = 1494
close(5)                                = 0
openat(AT_FDCWD, "/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = 5
fstat64(5, {st_mode=0, st_size=1, ...}) = 0
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
_llseek(5, 1074116, [1074116], SEEK_SET) = 0
read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1160
_llseek(5, 1073810, [1073810], SEEK_SET) = 0
read(5, "\0.shstrtab\0.interp\0.note.android"..., 4096) = 1466
_llseek(5, 1073782, [1073782], SEEK_SET) = 0
read(5, "libandroid_runtime.so\0\0\0o\223i\206\0.sh"..., 4096) = 1494
close(5)                                = 0
openat(AT_FDCWD, "/system/lib/.debug/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/debug/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/system/bin/app_process32", O_RDONLY|O_LARGEFILE) = 5
fstat64(5, {st_mode=0, st_size=1, ...}) = 0
 
Last edited:

TheFixItMan

Senior Member
  • Jul 8, 2012
    7,759
    3,966
    London
    I tried a strace with the command "pm". Something of this can be useful? Can it be something related to libraries? Those "No such file or directory" are weird. The full log files, one from a successfull pm and another for a failed one, are attached. Thanks for your atention, i hope you could help us.

    Code:
    openat(AT_FDCWD, "/system/lib/libart.so", O_RDONLY|O_LARGEFILE) = 5
    fstat64(5, {st_mode=0, st_size=1, ...}) = 0
    read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
    _llseek(5, 5888928, [5888928], SEEK_SET) = 0
    read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1320
    _llseek(5, 4584364, [4584364], SEEK_SET) = 0
    read(5, "\0.symtab\0.strtab\0.shstrtab\0.inte"..., 4096) = 4096
    _llseek(5, 4584348, [4584348], SEEK_SET) = 0
    read(5, "libart.so\0\0\0\21\r\350\370\0.symtab\0.strtab"..., 4096) = 4096
    close(5)                                = 0
    openat(AT_FDCWD, "/system/lib/.debug/libart.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/lib/debug/system/lib/libart.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
    clock_gettime(CLOCK_MONOTONIC, {7390, 135831818}) = 0
    openat(AT_FDCWD, "/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = 5
    fstat64(5, {st_mode=0, st_size=1, ...}) = 0
    mmap2(NULL, 1075276, PROT_READ, MAP_PRIVATE, 5, 0) = 0xaaada000
    close(5)                                = 0
    openat(AT_FDCWD, "/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = 5
    fstat64(5, {st_mode=0, st_size=1, ...}) = 0
    read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
    _llseek(5, 1074116, [1074116], SEEK_SET) = 0
    read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1160
    _llseek(5, 1073810, [1073810], SEEK_SET) = 0
    read(5, "\0.shstrtab\0.interp\0.note.android"..., 4096) = 1466
    _llseek(5, 1073782, [1073782], SEEK_SET) = 0
    read(5, "libandroid_runtime.so\0\0\0o\223i\206\0.sh"..., 4096) = 1494
    close(5)                                = 0
    openat(AT_FDCWD, "/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = 5
    fstat64(5, {st_mode=0, st_size=1, ...}) = 0
    read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 4096) = 4096
    _llseek(5, 1074116, [1074116], SEEK_SET) = 0
    read(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 1160
    _llseek(5, 1073810, [1073810], SEEK_SET) = 0
    read(5, "\0.shstrtab\0.interp\0.note.android"..., 4096) = 1466
    _llseek(5, 1073782, [1073782], SEEK_SET) = 0
    read(5, "libandroid_runtime.so\0\0\0o\223i\206\0.sh"..., 4096) = 1494
    close(5)                                = 0
    openat(AT_FDCWD, "/system/lib/.debug/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/usr/lib/debug/system/lib/libandroid_runtime.so", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
    openat(AT_FDCWD, "/system/bin/app_process32", O_RDONLY|O_LARGEFILE) = 5
    fstat64(5, {st_mode=0, st_size=1, ...}) = 0

    Both them lib files are present in system/lib

    I don't have any knowledge of coding to be of assistance
     

    mrfrantastic

    Senior Member
    Sep 23, 2013
    293
    89
    Since we only have a very small number of affected devices it is obviously difficult to extrapolate general statements. But for now(!) it seems(!) that there are models which are not affected by the fault although they match (on first glance) OP's and my phone's specs. On the other hand there are (again: for now) only devices with above mentioned serial number affected by the fault.

    Since we tried different ROMS with different sources could it be kernel related? I am assuming that all ROMS at least partially share the same kernel. And if so, how do we get someone to try to fix the kernel?

    The next common denominator might be either TWRP or SU...
     

    Top Liked Posts

    • There are no posts matching your filters.
    • 5
      Guys, please test this new build and tell me if you still have problems with root(segmentation fault):

      https://drive.google.com/open?id=1uSx1kuve2Wjm0QVN3bob8h9PiFMGQTr1
      5
      From what I can tell from people on the forum, this seems to have worked.

      To satisfy my curiosity — please tell: what was it?


      Cheers!

      Every rom has its own dalvik heap and hwui memory props.Our rom was using LineageOS's props which caused the problem.Taking properties from the stock rom fixed the issue.
      3
      The Segmentation Fault error is fixed on LineageOS. It will be fixed progressively in any other ROM in the upcoming updates.

      Infinite thanks to @wzedlare, and the other persons and devs that helped us. Im gonna request to mods to close this thread


      And over again thanks to all! I'm so happy now!

      On certain devices a series of binaries, shell/ADB commands are not working correctly.
      Most of the time when one of these binaries I invoked the crash with a "Segmentation fault" error (SIGEGV 11). If the command/binarie is executed multiple times, at some point it works without the error. (1 of 30 times approximately).

      These commands/binaries are very important for Root applications, but are not limited to them.
      As a result many applications that need ROOT work very sporadically, and some not root apps are affected too.

      If you are suffering the same problem, please share your logcats, the app or the command affected, and your device model, in order to get more information about the problem to help the devs and other users.

      Affected ROMs and Devices

      So far all customs ROMs for Cedric are affected. It appears to be related to a Cedric variant with Dual SIM, removable battery and 3GB of RAM. Mostly sold in Europe trough Amazon.

      Known affected apps and Workarrounds:

      • SuperSu and MagikSU(all versions): Devices rooted with Magisk or SuperSu, suffer from the error almost every time that SU binarir is invoked. The visible symptom is that although according the info provided by the application (Magisk manager says that the device is correctly rooted), the requests to get root permission will not popup because the binarie is crash almost 29 to 30 times. As a result these options for root are almost useless.
      • LineageOS SU By itself works correctly, the binarie will not crash, but the other commands still will be affected. Is the most funtional root option for affected devices!!
      • Secure Settings, BetterBattery stats, AutoTools ADB commands to Grant permissions can be executed multiple times. Once authorized, they work correctly.
      • Super Doze To change doze settings you need to press apply button multiple times. There is no way to know when the change was actually applied except using ADB.
      • Nap Time it's useless to change doze settings, but force doze is working.
      • Greenify, Servicely The will pop out an error every time that trying to stop every single app. In short they are useles.
      • Titanium BackUp and Link2SD To freeze or unfreeze an app you must tap multiples times until it work.
      • Disable Services Tap multiple times until it work.
      • LiveBoot After installed it will work only 1/30 reboots (Useless)

      Known affected binaries
      • pm
      • am
      • settings
      • adb backup
      • Magisk Su, and Super Su

      Disclaimer​
      :

      I'm not a developer. I created this topic to help other users, to find a workarounds to the error. I'm not a developer. I created this topic to help other users, to find a way to dodge the error.
      In addition I hope to raise awareness about this problem and help the devs with the information that is recopiled.

      Screenshots Examples and Logcats of the error

      Logcat: http://cloud.tapatalk.com/s/59...279dd2/2017-07-25-12-12-33.txt
      Series of post in LineageOS Thread talking about the issue: https://forum.xda-developers.com/g5/development/7-1-x-lineageos-14-1-moto-g5-t3611973/page48
      Tipical Crash message after invoking a command:
      Code:
      08-23 19:04:28.670 12408 12408 I chatty  : uid=0(root) app_process expire 847 lines
      08-23 19:04:28.694 11748 11748 W Atfwd_Sendcmd: AtCmdFwd service not published, waiting... retryCnt : 4
      08-23 19:04:28.715 12408 12408 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x9c in tid 12408 (app_process)
      08-23 19:04:28.716   402   402 I chatty  : uid=0(root) /system/bin/debuggerd expire 2 lines
      08-23 19:04:28.777 12410 12410 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
      08-23 19:04:28.778 12410 12410 F DEBUG   : LineageOS Version: '14.1-20170811-UNOFFICIAL-cedric'
      08-23 19:04:28.778 12410 12410 F DEBUG   : Build fingerprint: 'motorola/lineage_cedric/cedric:7.1.2/NJH47F/43d07c81c5:userdebug/test-keys'
      08-23 19:04:28.778 12410 12410 F DEBUG   : Revision: '0'
      08-23 19:04:28.778 12410 12410 F DEBUG   : ABI: 'arm'
      08-23 19:04:28.778 12410 12410 F DEBUG   : pid: 12408, tid: 12408, name: app_process  >>> app_process
      [/Quote]
      3
      Or stay with trebuchet, works also :)
      Live boot test mode seems to work 2 out of 3 attempts, didn't reboot yet and wouldn't work properly anyway without altering the selinux setting.
      The google mail program fails to download mail from my POP3 account. This problem has been ongoing since switching the microSD card to external mode. Workaround: Install K9 mail from f-droid.
      Re-installed OpenTasks and DavDroid from f-droid, both are working yet again with my private baikal server.
      Vanilla Music is playing in the background.
      Navit has been successful in downloading a couple GB of map data (germany). The internal storage is filled with 10GB of data now :crying:
      FM radio is working as bad as before (distorted sound, poor reception)

      Regards
      Ektus.

      I have always encountered segmentation faults using the imgur app, with this build the app runs without errors.
      Thanks

      Thank you guys, for testing it, I released this build as the new build in my los thread.By the way, the problem was not related to kernel and one kernel source can work properly on all variants.
      2
      Someone is asking for the source code off our device variant.

      Sent from my Moto G5 using Tapatalk
    Our Apps
    Get our official app!
    The best way to access XDA on your phone
    Nav Gestures
    Add swipe gestures to any Android
    One Handed Mode
    Eases uses one hand with your phone