Tutorial How to Create MOD MENU for | il2cpp.so | and other native android games



The quieter u become , the more u are able to hear
Elite Mod Squad ⭐
VIP Member
Member for 2 years
SB Cash
Golden Key (permanent)
Musicizer! (permanent)
Country Flags (Permanent)
Select One
----------Greetings Everyone----------

PS. If you need help how to connect MemoryPatch with MOD Menu , and game functions let me know 🙂

I'd like to share with you a new MOD Menu, which is extremely good ,
because it is for android games that are not just Unity, you can now MOD Menu
il2cpp and other native android games

You can now MOD Menu this Games!


This is how it Looks Live

For this Tutorial you will need this Tools!

- Android Studio 3* = Download Link!

- APKTool (SBennyAPKT is Good) = Download Link!
- Notepad++ = Download Link!
* Floating ModMenu Repository = Download MOD Menu Project! // Original Author Link MrIkso
* knowledge of C ++, Java, Smali

+-Advanced Modders Recommended

Let's Start with Tutorial!

Once you've downloaded all the necessary files, the first thing you need to do is open Android Studio and open the Floating ModMenu Repository Project!
Extract ModMenu Project in the folder with out Space , just clear name ex. C:Users\xxxxxx\Desktop\Modding\FloatingModMenu-master
( "I'm saying this because I already had a problem compiling the game, and that was the FIX" )
Open the Project in Android Studio



After Loading your Project you will need to Locate to the FloatingModMenuService.java - in this method you will add Options for your MOD Menu.
You can Locate that file easy with Shortcut ( CTRL + SHIFT + F ) and then Search for
private void modMenu() {

Now you can add your MOD Menu "Buttons" Cheat Options , here is some Example!


When you edit your Options for MOD Menu, open this file /FloatingModMenu/app/src/main/jni/src/main.cpp in this file you will need to edit functions that will implement the hook. Used library KittyMemory. ( This library aims for runtime code patching for both Android and iOS ) Next you need to call from the native library and connect them with switches.


This file is where you Connect MOD Menu Switches with in-game Functions!

After you have added all the necessary options you can build this Project and Make APK!



Be sure that your Build is Successfully Completed with-out Errors!

Next step is to inject "Build ModMenu Stuff" into your Game folder!

Locate the file loction of build-ed MOD Menu APK.

Now you will need to Decompile the application with SBennyAPKTool, or any other tool.
and then you will need to Copy some stuff into your Game Folder!
it also requires you to Decompile your game, after you decompile MODMenu APK!

When you are Ready to Transfer Files from Created MOD Menu APK, Copy this Files into your Game Folder
Copy Assets folder into your game Assets folder (This is MOD Menu Images)
And You need to copy libKittyMemory.so into Correct Game Structure....(blabla)

but be careful move
libKittyMemory.so Manually because it depends what structure your Game Use, and which one you are Hacking!

libKittyMemory.so is located in this Folders, copy only folder that your Game use.

Next, we need to add permission to display the application on top of others and the Mod-Menu service.

Open AndroidManifest.xml from the game folder
and Add this Code in the first line of Permissions!

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Then Copy this Code also in the AndroidManifest.xml after <application>
<service android:enabled="true" android:exported="false" android:name="com.mrikso.modmenu.FloatingModMenuService"/>
Here is Image for easy Understanding.

Next step is maybe the most difficult because you need to find main activity of your game, and you need to inject your MOD Menu.
You need to register the MOD Menu call and the libKittyMemory library load.
We are looking for the main activity of our game. Usually it is written in <application> (Here is Example of "My Game")

<application android:allowBackup="true" android:icon="@mipmap/app_icon" android:label="@string/app_name" android:name="android.support.multidex.MultiDexApplication" android:supportsRtl="true" android:theme="@style/UnityThemeSelector">
    <service android:enabled="true" android:exported="false" android:name="com.mrikso.modmenu.FloatingModMenuService"/>
        <activity android:configChanges="density|fontScale|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" android:hardwareAccelerated="false" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.unity3d.player.UnityPlayerActivity" android:screenOrientation="portrait">
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
As we can see my start activity by game is com.unity3d.player.UnityPlayerActivity

In my case my Main Game Activity is located here.

When you know in what smali folder is your Main Activity you can copy Smali Folder from Decompiled MOD Menu Apk to Game Smali/Com/ Folder

Locate Game Main Activity (in my case UnityPlayerActivity ) and open it with Notepad++ , and copy class (This Code) to the main class of our game in the # virtual methods , you can paste it After Last Methode!

.method public Start()V
    .locals 3

    .line 23
    const-string v0, "KittyMemory"

    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    .line 24
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x17

    if-lt v0, v1, :cond_0

    invoke-static {p0}, Landroid/provider/Settings;->canDrawOverlays(Landroid/content/Context;)Z

    move-result v0

    if-nez v0, :cond_0

    .line 25
    new-instance v0, Landroid/content/Intent;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "package:"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p0}, Landroid/app/Activity;->getPackageName()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v1

    const-string v2, "android.settings.action.MANAGE_OVERLAY_PERMISSION"

    invoke-direct {v0, v2, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V

    .line 26
    .local v0, "intent":Landroid/content/Intent;
    const/16 v1, 0x7d2

    invoke-virtual {p0, v0, v1}, Landroid/app/Activity;->startActivityForResult(Landroid/content/Intent;I)V

    .line 27
    .end local v0    # "intent":Landroid/content/Intent;
    goto :goto_0

    .line 28
    new-instance v0, Landroid/content/Intent;

    const-class v1, Lcom/mrikso/modmenu/FloatingModMenuService;

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Landroid/app/Activity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;

    .line 30
.end method

.method public onActivityResult(IILandroid/content/Intent;)V
    .locals 2
    .param p1, "requestCode"    # I
    .param p2, "resultCode"    # I
    .param p3, "data"    # Landroid/content/Intent;

    .line 34
    const/16 v0, 0x7d2

    if-ne p1, v0, :cond_1

    .line 35
    const/4 v0, -0x1

    if-ne p2, v0, :cond_0

    .line 36
    new-instance v0, Landroid/content/Intent;

    const-class v1, Lcom/mrikso/modmenu/FloatingModMenuService;

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Landroid/app/Activity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;

    goto :goto_0

    .line 38
    const/4 v0, 0x0

    const-string v1, "Draw over other app permission not available. Closing the application"

    invoke-static {p0, v1, v0}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/Toast;->show()V

    .line 39
    invoke-virtual {p0}, Landroid/app/Activity;->finish()V

    goto :goto_0

    .line 42
    invoke-super {p0, p1, p2, p3}, Landroid/app/Activity;->onActivityResult(IILandroid/content/Intent;)V

    .line 44
.end method

And the most Important thing is also in the same File, Main Activity smali to add this Code in onCreate Method

invoke-virtual {p0}, Lcom/unity3d/player/UnityPlayerActivity;->Start()V

Info on Renameing Activity Start Function!
Example : Let's say that your Main Activity Smali is Named HavanitosPlayerTutorial -> Lcom/ohyes/idamodding/activity/HavanitosPlayerTutorial.smali
When you add ( Start Load Function , in defined Activity you need to use that Activity Name )
This is Wrong:

invoke-virtual {p0}, Lcom/mrikso/modmenu/MainActivity;->Start()V
This is Correct:
invoke-virtual {p0}, Lcom/ohyes/idamodding/activity/HavanitosPlayerTutorial;->Start()V
This was related in onCreate Method

Thanks for Reading Tutorial , if you need any Help Feel Free to ask any Advanced Modder ! 😉

I hope you Understand my English and my Tutorial Enjoy


Last edited:

Ad Manager



Apprentice Lv. 2
Member for 1 year
SB Cash
well everything painted, that's all you had to do was leave a link to the original repository.


A crazy scientist
Staff member
Elite Mod Squad ⭐
The Founder
SB Cash
Small Request Booster (single use)
Spyglass (permanent)
Golden Spade
Country Flags (Permanent)
Golden Key (permanent)
Musicizer! (permanent)
OnePlus 1 - Huawei P10 Lite Android Oreo
This is a very informative thread, thank you so much for your contribution Havanitos! It's very easy to understand and your english is perfect, excellent job!



Lurker Lv. 0
Member for 1 year
SB Cash
Can you teach me how to add function for second and third in menu.
Ex: menu have god mode, one hit , ...
I can mod god mode but one hit it's not effected
Change Language
Please note this is still an English speaking community, so please keep writing in English only, thank you!
You can also help us improve the translations by clicking here.