[MOD][XPOSED][5.0+] Exi for Swiftkey [2.7.1][2020.09.22]]

348 posts
Thanks Meter: 1,215
By Roughy, Senior Member on 2nd August 2017, 04:55 PM
Post Reply Email Thread
Announcement from Roughy: Exi for Swiftkey[2.7.1] - Bug fix
It is still compatible with the versions of Swiftkey versions to'ish, but not the latest versions.
Goodbye post:

Exi for Swiftkey

Exi for Swiftkey is an Xposed Framework module that adds a number of features to the Swiftkey Keyboard.


The latest version supports Swiftkey to'ish
Latest Swifkey version confirmed compatible is
Swiftkey - Latest: Module unmaintained for a while, use old versions of Switkey
Swiftkey Beta - Latest: Module unmaintained for a while, use old versions of Switkey

Latest version of this module is: 2.7.1
The Xposed Installer app does not update its list properly and may not list the latest version.
Please download the apk directly from the Xposed Repository below using a browser

You can use this module with the following frameworks:
EdXposed Magisk Module: Lollipop 5.0 - Android 9.0 Pie [ Instructions here ]
Tai-Chi: Lollipop 5.0 - Android 8.0 Oreo ( On some devices. Limited to specific version of module )
Official Xposed: Lollipop 5.0 - Android 8.0 Oreo

Known issues
If you are running OxygenOs, you will likely have to whitelist Exi for Swiftkey somewhere.
OnePlusAppBootManager prevents Exi's content provider from running, preventing the module from communicating with the config app. See this post for more info.

EdXposed can be a bit sketchy. Users have reported things spontaneously fixing themselves after reinstalling/clearing cache/ etc.

This post contains basic info about the module and its features.
Detailed instructions on how to use it can be found in the next post down.

Since the Xposed Installer does not automatically update the module for you, I recommend disabling automatic updates for Swiftkey, and updating it and this module at the same time.

Note that Swiftkey no longer provides updates for Android versions below Lollipop.

  • Swipe selection [Gif]
    • Cursor movement
    • Selection (Gesture or swipe-from-key)
    • Multiple modes (Anywhere, spacebar, number row, hold-and-swipe)
  • More Suggestions [Gif]
    • Suggestions bar can be scrolled to view all suggestions
  • Custom Shortcuts [Gif]
    • Multiple shortcuts for same word
    • Trigger on verbatim input, suggestions, or flow
    • Dictionary importable from file (tab or space delimited)
  • Hotkeys ( Ctrl + key ) [Gif]
    • Define any key as CTRL
    • Supports Select all / Cut / Copy / Paste / Go to end / Undo / Redo / Toggle lots of stuff
  • Quick Actions
    • Display circular quick-menu by swiping up from spacebar [Gif]
    • Trigger corresponding hotkey by swiping from spacebar to key [Gif]
  • Popup-keys [Gif]
    • Customize popup alt-characters
  • Emoji [Gif]
    • Panels are fully customizable (Icon, position, emoji, row count)
    • Emoji importable from file ( line-break delimited )
    • Configurable font size
    • Assign default diverse-emoji color
  • Gifs
    • Remove Bing url redirect
    • Gifs from more sources
    • Disable safe-search
  • Intents [Details here]
    • Set theme
      Toggle incognito mode
      Toggle vibrate
  • Other
    • Remove empty space next to suggestions [Image]
    • Prevent period key from triggering on tap
    • Cursor stays where you place it, rather than moving to end of word
    • Disable auto-space after punctuation
    • Custom key-press sounds
    • Disable full-screen mode
    • Resize keyboard
    • Keyboard transparency
    • Remap hardware keys
    • Hide prediction's bar
    • Text selection with arrow keys ( mod + arrow key )
A more detailed explanation of the features can be found in the next post.


The ClassHunter library was developed alongside this module to counteract Proguard obfuscation:
ClassHunter on Github

Version History:
  • 2.7.1[ 22.09.2020 ] - Bug fix( Stable: Beta: ) [No release Post]
  • 2.7.0[ 15.05.2020 ] - Compatibility ( Stable: Beta: ) [Release Post]
  • 2.6.9[ 25.04.2020 ] - Arrow key selection, bug fixes ( Stable: Beta: ) [Release Post]
  • 2.6.8[ 03.04.2020 ] - Toolbar/Number row toggle actions, bug fixes, behavioral changes ( Stable: Beta: ) [Release Post]
  • 2.6.7[ 21.03.2020 ] - Toolbar toggle fix, Bing GIF NSFW region filter workaround ( Stable: Beta: ) [Release Post]
  • 2.6.6[ 18.03.2020 ] - Compatibility, emoji panel size modifier, toolbar gesture ( Stable: Beta: ) [Release Post]
  • 2.6.5[ 07.03.2020 ] - Bug fixes ( Stable: Beta: ) [Release Post]
  • 2.6.0[ 02.03.2020 ] - Compatibility, 10 Emoji, Newline action ( Stable: Beta: ) [Release Post]
  • 2.5.3[ 06.12.2019 ] - Compatibility ( Emoji panel ), translations ( Stable: Beta: ) [Release Post]
  • 2.5.1[ 19.11.2019 ] - Android 10 emoji, plain paste, autocorrect/incog toggles ( Stable: Beta: ) [Release Post]
  • 2.4.1[ 11.11.2019 ] - Compatibility ( Stable: Beta: ) [Release Post]
  • 2.4.0[ 02.10.2019 ] - Compatibility, Lenny ( Stable: Beta: ) [Release Post]
  • 2.3.6[ 29.08.2019 ] - Bug fixes ( Stable: Beta: ) [Release Post]
  • 2.3.5[ 22.08.2019 ] - Compatibility ( Stable: Beta: ) [Release Post]
  • 2.3.4 [ 18.07.2019 ] - Compatibility ( Stable: Beta: ) [Release Post]
  • 2.3.2 [ 06.07.2019 ] - Compatibility ( Stable: Beta: ) [Release Post]
  • 2.3.1 [ 24.06.2019 ] - Compatibility ( Stable: Beta: ) [Release Post]
  • 2.3.0 [ 17.06.2019 ] - Drag & Drop emoji, translations ( Stable: Beta: ) [Release Post]
  • 2.2.3 [ 05.06.2019 ] - Ampersand punctuation & Ellipse ( Stable: Beta: ) [Release Post]
  • 2.2.2 [ 26.05.2019 ] - Compatibility & Punctuation ( Stable: Beta: ) [Release Post]
  • 2.2.1 [ 26.04.2019 ] - Maintenance & Translations ( Stable: Beta: ) [Release Post]
  • 2.2.0 [ 01.04.2019 ] - Backup & Restore, Compatibility ( Stable: Beta: ) [Release Post]
  • 2.1.3 [ 11.03.2019 ] - Compatibility, bug fixes ( Stable: Beta: ) [Release Post]
  • 2.1.0 [ 28.02.2019 ] - EdXposed fixes, remap only when keyboard open ( Stable:, Beta: ) [Release Post]
  • 2.0.4 [ 16.02.2019 ] - Compatibility fixes ( Stable:, Beta: ) [Release Post]
  • 2.0.3 [ 12.02.2019 ] - Theme/Incog intents, EdXposed shift fix ( Stable:, Beta: ) [Release Post]
  • 1.9.1 [ 01.02.2019 ] - Custom portrait/landscape size, compatibility( Stable:, Beta: ) [Release Post]
  • 1.8.2 [ 03.01.2019 ] - Compatibility fixes ( Stable:, Beta: ) [Release Post]
  • 1.8.1 [ 05.12.2018 ] - Custom search, updated emoji, bug fixes ( Stable:, Beta: ) [Release Post]
  • 1.7.2 [ 04.11.2018 ] - Compatibility, bug fix ( Stable: 7.1.7.?, Beta: ) [Release Post]
  • 1.7.0 [ 01.11.2018 ] - Quick menu insert, vib quick setting, location feature ( Stable:, Beta: ) [Release Post]
  • 1.6.0 [ 21.08.2018 ] - Compatibility, hide predictions, bug fixes ( Stable: ?, Beta: ) [Release Post]
  • 1.5.4 [ 21.07.2018 ] - Can disable vertical swipe, fix full-screen / oreo crash ( Stable:, Beta: ) [Release Post]
  • 1.5.3 [ 23.06.2018 ] - Compatibility fixes ( Stable:, Beta: ) [Release Post]
  • 1.5.2 [ 31.05.2018 ] - Compatibility fixes, async setup ( Stable:, Beta: ) [Release Post]
  • 1.4.3 [ 12.05.2018 ] - Compatibility fixes ( Stable:, Beta: ) [Release Post]
  • 1.4.2 [ 17.04.2018 ] - Default diverse emoji, keyboard opacity fix ( Stable:, Beta: ) [Release Post]
  • 1.4.1 [ 11.04.2018 ] - Hardware key remapping, undo/redo, transparent keyboard ( Stable:, Beta: ) [Release Post]
  • 1.3.4 [ 23.01.2018 ] - Bug fixes, compatibility fixes ( Stable:, Beta: ) [Release Post]
  • 1.3.3 [ 18.01.2018 ] - Bug fixes, Oreo support ( Stable:, Beta: ) [Release Post]
  • 1.3.2 [ 15.01.2018 ] - Compatibility fixes, size multiplier, emoji vibrate toggle ( Stable:, Beta: ) [Release Post]
  • 1.3.1 [ 06.12.2017 ] - shortcut ellipse removed, emoji vibrate, translations ( Stable:, Beta: ) [Release Post]
  • 1.3.0 [ 30.11.2017 ] - RTL support, custom sounds, number-row swipe, popups case, nsfw gifs( Stable:, Beta: ) [Release Post]
  • 1.2.1 [ 02.11.2017 ] - translations, remove existing popups, select old/new emoji panels, bug fixes( Stable:, Beta: ) [Release Post]
  • 1.2.0 [ 28.10.2017 ] -Nougat, diverse emoji, restore defaults, bug fixes( Stable:, Beta: ) [Release Post]
  • 1.1.1 [ 02.10.2017 ] -Flow shortcuts crash fix( Stable:, Beta: ) [Release Post]
  • 1.1.0 [ 01.10.2017 ] - QuickMenu config, bug fixes( Stable:, Beta: ) [Release Post]
  • 1.0.3 [ 10.09.2017 ] - Compatibility fixes ( Stable:, Beta: ) [Release Post]
  • 1.0.2 [ 24.08.2017 ] - bug fixes, vertical swipe, punctuation auto-space ( Stable:, Beta: ) [Release Post]
  • 1.0.1 [ 08.08.2017 ] - Bug fixes, ui tweaks ( Stable:, Beta: ) [Release Post]
  • 1.0.0 [ 02.08.2017 ] - Initial Release ( Stable:, Beta: )
Changes in 2.7.1 ( Compatibility ( Stable: Beta: ) ):[No release post]
  • Fixed
    - Crash caused by bad comparison when loading emoji order

Complete List of changes


Exi for Swiftkey on Xposed module repository

My own mirror of all versions

Bug reports:
This module tags its logcat messages with "Exi/"
If you run into any issues, please include any relevant xposed or logcat logs.
DO NOT bother the Swiftkey developers with any issues you encounter a result of using this module


Libraries used:Thanks to:
  • Rovo89 for the Xposed Framework
  • Anyone I've forgotten to mention

Support the Project:
As it stands Exi for Swiftkey is entirely free, open-source, and completely without limitations.
Consider buying the developer a brownie if you found this module useful:

Bitcoin Address
Bitcoin: 1Mx17r3DuwUzzp87zhZwfunsLQ2jpmTmfJ


XDA:DevDB Information
Exi for Swiftkey, Xposed for all devices (see above for details)

Source Code:

Xposed Package Name: com.mayulive.swiftkeyexi

Version Information
Status: Stable
Current Stable Version: 2.7.1
Stable Release Date: 2020-09-22

Created 2017-08-02
Last Updated 2020-09-21
Attached Thumbnails
Click image for larger version

Name:	JXoyS4Y.png
Views:	17688
Size:	85.6 KB
ID:	4230623   Click image for larger version

Name:	MOq3ruu.png
Views:	17558
Size:	103.9 KB
ID:	4230624   Click image for larger version

Name:	aIuGd0H.png
Views:	17636
Size:	81.9 KB
ID:	4230625   Click image for larger version

Name:	Rn2r9eT.png
Views:	16770
Size:	33.7 KB
ID:	4230626  
The Following 109 Users Say Thank You to Roughy For This Useful Post: [ View ] Gift Roughy Ad-Free
2nd August 2017, 04:56 PM |#2  
OP Senior Member
Thanks Meter: 1,215
Donate to Me
Detailed Instructions
Below are detailed explanations of all the features and how to configure them.

NOTE: These instructions are severely out of date. Maybe check the release posts of the updates if you're after something specific

Shift / Delete / Modifier keys
The shift, delete, and modifier keys will be referred to frequently in these explanations.
The modifier is like a ctrl key, which by default is mapped to the symbols key (123 - switch to the symbols layout).
This mapping is configurable, and you can add and remove multiple keys as you see fit.
Likewise, what this module considers to be the shift/delete keys is up to you.
These mappings can be configured in settings under Keys.

Key Defintions
Keys can be defined by content or function, such as spacebar or enter key.
Keys which are defined by their content are identified by their display string.
That means that a key that the content of a key that displays as "A" is also "A".
This also applies to the more exotic Asian layouts.
There are some exceptions, such as the Japanese long-vowel ( ー ) key using a normal hyphen ( - ) instead.

Settings - Specify swipe threshold and speed:

Threshold - This slider specifies how far you have to swipe before swipe-mode is triggered. The |--| bar above the slider displays the actual physical distance on screen.
Speed - This slider specifies how fast the cursor moves. The number of characters above the bar show how far the cursor will move when swiped that distance.

Swipe mode - how and where to swipe:

Swipe Anywhere - Swipe mode can be triggered by swiping anywhere, except for on the spacebar or enter keys. Swiftkey's flow and swipe gestures interfere with swipe selection in this mode, and are therefore disabled.
Swipe on Spacebar - Swipe will only trigger on the spacebar. This means you can use flow and swipe-gestures are normal. You can still switch between languages as usual, but have to wait the popup to appear before swiping to select it.
Hold any and Swipe - Swiping requires two fingers. Hold down one finger and use the second to swipe.
Hold Shift and Swipe - Swiping requires two fingers. Hold down one finger on the shift key and use the second to swipe.

Selection Mode - how to swipe-select text .

Two-finger Gesture - Select text by using two-finger pinch and zoom gestures.
Swipe from shift/delete - Swipe from the shift key to select to the right, from the delete key to select to the left. What keys are treated as shift/delete can be configured under Keys.

Spacebar Swipe-up mode- Behavior when swiping up from space .

Quick-menu - Swiping up from the spacebar will display a circular quick-action menu with select all / copy / paste / go-to-end. This menu is currently not customizable.
Hotkeys - You can swipe from the spacebar to any of the keys defined in in the Hotkeys tab, and trigger their corresponding action.


The emoji panel tab is split into two sections:

Top: A list of panels you can choose emoji from. This is also where imported emoji will first appear.
Bottom: The panels that will appear inside Swiftkey.

The existing templates in the top pane cannot be modified or deleted, as we may make additions to them as Android evolves.
You can create a new panel here to manually input emoji, or create a new panel by importing from a line-break delimited file.

In the bottom pane you can add or remove panels as you see fit, and add emoji (individually or by selecting add-all from the menu) from the templates in the top pane.
The one exception is the Recent Emoji panel (Denoted by a clock icon), which you may only change the position or icon of.

Setting icon and position:

Any of the panels can be renamed or moved around by long clicking on them.
You may also hit the pick button to choose an icon from any of the existing emoji panels.

Setting row count:
By selecting Column Size from the menu, you can specify the column width for each emoji panel.


The dictionary tab lets you specify shortcut - word mappings.
In the above screenshot the shortcut is "xx", and typing it in the keyboard results in all the nested words showing up as suggestions.
This is particularly powerful when combined with the More Suggestions feature, allowing you to scroll through all of them.

Swiftkey's existing shortcut solution will only trigger if you spell out the trigger verbatim. It also doesn't allow certain characters, such as emoji, in the mapped word.
Our solution can also be configured to be inserted if the primary suggestion matches the shortcut, and even inserted during flow.
These options can be configured under settings.

Secondary suggestions:

By default shortcuts will be inserted starting from the primary suggestion.
When defining the shortcut, or changing it after creation by clicking the shortcut itself, you can configure the mapped words to be inserted as secondary suggestions instead.
This means the primary, center suggestion remains, and your shortcuts will be inserted starting with the second suggestion (right side in most languages).
The behavior is the same as when Swiftkey provides emoji predictions.


Hotkeys are basically just Ctrl - a/x/c/v combos we are all familiar with on full-sized keyboards.
Our equivalent for Ctrl is the Modifier key, which can be set to one or more keys under settings - Keys.
The default Modifier Key is the Symbols layout key ( 123 ).
Available actions are Select all / Copy / cut / paste / go to end.

Configuring a key:

With the exception of keys defined by their function (spacebar, enter key etc), most keys are defined by the character they display.
In general means you just punch in the character the key is displaying and everything should work out. This applies to the more exotic Asian languages as well.
There are occasionally some discrepancies though. For instance, the long-vowel symbol "ー" in the Japanese layout actually displays a standard hyphen "-".


The alternate characters that popup when long-pressing a key can be configured to your liking.
Because different layouts shift the position of these keys around, their positions are defined as either center, or any of the remaining positions starting from left to right.

When you first add a popup, you will be asked to set a parent key. This is the key that popups will appear under.

Configuring keys:

Once the parent key has been added you can click any empty space to add a key there, or the PLUS button to add more slots.
Slots already occupied by characters are greyed out. If Swiftkey does not provide any characters for the empty slots, they will simply be ignored.
Any popup characters provided by Swiftkey will be shifted to the right to make space for our insertions.

This is the result of the above configuration. There is an existing symbol ( + ) which is shifted from it's center slot to the first position, and then shifted again by the "1" we insert there.
Our "5" wants to be in slot 5, so it ends up after it.


The settings panel provides a few additional tweaks.

Emoji Panel
Replace Emoji Panel: If disabled, Swiftkey's original emoji panel will be used instead
Emoji Size: The emoji font size can be configured to some degree. The default value is 12.

Flow & Suggestions
More Suggestions: If enabled, the suggestions bar will be made scrollable, and display many more suggestions.
Suggestion shortcuts: If enabled, shortcuts will trigger on the primary suggestion, instead of only on verbatim input
Flow shortcuts: If enabled, shortcuts will also be inserted when you flow. Suggestion shortcuts must be enabled for this to work.
No auto-correct after swiping: When moving the cursor, Swiftkey sometimes insists on inserting the primary suggestion when you hit space, instead of inserting a space. If enabled, a space will always be inserted.
Maximize suggestions: Swiftkey recently added gaps to both sides of the suggestions bar to make their menu button easier to hit. If enabled, the suggestions bar will fill the screen like it used to.

Disable period tap: Apparently many people hit the period button by mistake. If enabled, a quick tap will no longer trigger it. It must instead be clicked proper.
Quick-Menu color: Set the color used to highlight the selected item in the quick-menu.


Here you can choose which keys will be treated as shift, delete, and modifiers keys by this module.
See the beginning of this post for a more detailed explanation.

Unlike Hotkeys, here you can define keys not only be their content, but also their function.
By default it makes sense for the shift and delete keys to be mapped to their respective keys,
but some languages do not have a shift key, and in others the delete key is an a completely unreasonable location.
The content field is only available if Letter or Symbol key is picked from the list.
The Following 24 Users Say Thank You to Roughy For This Useful Post: [ View ] Gift Roughy Ad-Free
2nd August 2017, 05:48 PM |#3  
oroboros74's Avatar
Senior Member
Thanks Meter: 189
I was looking forward to this. Looks great! Awesome UI! Might I suggest a video tutorial explaining all the options?
2nd August 2017, 05:50 PM |#4  
OP Senior Member
Thanks Meter: 1,215
Donate to Me
Originally Posted by oroboros74

I was looking forward to this. Looks great! Awesome UI! Might I suggest a video tutorial explaining all the options?

The second post in this thread is reserved for this purpose, I just need a quick breather. Soon!
The Following 2 Users Say Thank You to Roughy For This Useful Post: [ View ] Gift Roughy Ad-Free
2nd August 2017, 06:59 PM |#5  
Senior Member
Thanks Meter: 90
I definitely will try it once xposed for Nougat comes. Hopefully soon (fingers crossed)
2nd August 2017, 10:17 PM |#6  
godlesplay's Avatar
Senior Member
Thanks Meter: 240
@Roughy very nice module, could you add functionality of this module? (because it is abandoned) thanks!
2nd August 2017, 11:20 PM |#7  
Ibuprophen's Avatar
Senior Member
Flag Upstate New York
Thanks Meter: 6,634
Donate to Me
This looks very interesting.... Hmmm...

I think I'll give it a try now

PLEASE NOTE: I welcome any member to help with further valuable information/clarification for any of my posts.

[APP][TOOL][4.2+]The SELinux Toggler
[ZIP][TOOL][AIO]BusyBox Stericson Binary Installer v1.26.2 {BB/TB Auto-Symlink}
[APP][TOOL][4.2+][OFFICIAL]The SELinux Switch
Will Supersede "The SELinux Toggler"
[APP][UNOFFICIAL][4.2+]XDA Forum {Classic}
[APP][UNOFFICIAL][4.2+]XDA Reader {Classic}
3rd August 2017, 12:34 AM |#8  
Nekrozys's Avatar
Junior Member
Flag Bruxelles
Thanks Meter: 1
I've been wanting this for years. I used to use SwipeSelection on a jailbroken iPhone 4 before I moved to Android and this was one of my biggest let down when doing so.
So happy to find so many improvement coming to the Swiftkey keyboard.
The Following User Says Thank You to Nekrozys For This Useful Post: [ View ] Gift Nekrozys Ad-Free
3rd August 2017, 02:13 AM |#9  
Senior Member
Thanks Meter: 90
Amazing App..
3rd August 2017, 03:08 AM |#10  
Senior Member
Thanks Meter: 50
amazing is it possible in future version to implement Swipe right to trigger space like fleksy keyboard thanks
The Following 2 Users Say Thank You to ale82to For This Useful Post: [ View ] Gift ale82to Ad-Free
3rd August 2017, 04:08 AM |#11  
leonardoroza's Avatar
Senior Member
Thanks Meter: 98
Great app, congrats!

Sent from my Moto X Play using XDA Labs
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes