How to Publish an RPG Maker Game on Android (Google Play Store)

Randor

Veteran
Veteran
Joined
Jan 30, 2017
Messages
81
Reaction score
96
First Language
English
Primarily Uses
Another post from RPG Maker Game Reviews!

Preparing Your Project for Deployment

Turn off any preloader plugins. The Play Store will not allow you to frontload a lot of audio or image files. If you have a preloader turned on, your game will freeze on Android devices.


Test Your Deployment
Deploy your game for Android/iOS. Go to File > Deployment and select Android / iOS. You can click Exclude unused files, but you might need to copy some files into your deployment folder later if it mistakenly excludes any files that you need.




Once it’s finished Deploying, test the deployed version by clicking on the Index file in the www folder. Chrome will not load the Index file, so use another browser. It’s important to test the deployment version. Do not assume that just because your game ran well in the editor that it will run the same once it’s deployed.

When testing at this point, you could experience two common problems:

If you have missing files, replace them in the correct folder.

If you don’t see an error message about missing files, but your game still doesn’t run correctly, turn off your plugins one by one to see which one is causing the problem. You may have multiple plugins that do not work in mobile deployment mode.


Compress Your Files
The Play Store only allows apps to be 100 MB. If your game goes over 100 MB, you’ll need to set up APK Extension folders, so it’s best to stay under the base limit if possible.


Compressing Images
Download the Pngyu image converter from https://pngquant.org/



Adjust the Colors down. The further down you go, the smaller your file sizes will be. But do not go too low, or the colors will fade.

You can adjust each image individually or use the batch function to compress all of them at once.


Compressing Audio
Download the Music Converter from dBpoweramp. You can get a free trial for 21 days or pay $39 to keep it.

Mobile versions need m4a audio file formats, so make sure you convert all of your sound files to this format.



Lower the quality of your audio to make them smaller. You probably won’t notice the change, but if you’re worried about this, you can adjust each soundtrack individually. Otherwise, use the batch converter to do them all at once.




Compressing Videos
If you have videos to convert, use https://www.online-convert.com/. You’ll need to convert your videos to both WebM and mp4 formats. Unfortunately, you can’t compress the files too much on this platform.


Setting Up APK Extension Folders
What if you’ve compressed your files as far as you want to, and your project is still over 100 MB? You’ll need to set up extension folders for your files.


I’ll probably need to do this for my next update, so I’ll give some clearer instructions then. For now, here’s the Google Play instructions: https://developer.android.com/google/play/expansion-files


Configuring Your Android Studio Project
First, you’ll need to download the Android Studio program.

On the opening screen, select Configure > SDK Manager. You can also get there under the System Settings > Android SDK.



Make sure your Android Studio installation has the latest operating system versions.



Finally, at the top of the window, click SDK Tools, and make sure you have all of the following.



Now, download the Android Client from Altimit Systems.

Building Your Android Package
On the opening screen or under File, choose to open an existing Android Studio project. You’ll then open the dummy Altimit Systems project.



To start filling the dummy project with your files, you’ll need to create an Assets folder.



Keep the default setting and click Finish.



Then, copy your www folder and paste into the assets folder.



Uncheck the box that says Open copy in editor.



Now, expand the Gradle Scripts on the left and open build.gradle (Module: app).



You’ll see a line to fill in your applicationId. You can fill this line in with your web address and game title or your name and game title.

Your version code and name can stay at 100 and 1.0.0 for your initial release.



When you’re finished, click Sync Now at the upper right of that window.

You’ll also want to rename your game in the dummy files and create a new icon to use.

First, find the res folder under the assets folder. Expand it until you find the values folder and click on the values.xml file.



Find the line that says <string name =”app name”> and replace the RPG Maker MV name with the name of your game.

The two lines under that are for changing to your website address, Facebook page, etc. This isn’t necessary, though, and users won’t see this part.

To create a unique icon for your game, expand the mipmap folder and delete everything inside it.



Then, create an image called app_icon. You can use that same image and rename it app_icon_round or use a different image. It doesn’t necessarily need to be round. Paste both files into the empty mipmap folder.


App Signing Keys
The last step before you finish in Android Studio is to choose a method to sign your apps. You can read about the different ways to do this here: https://developer.android.com/studio/publish/app-signing

The `keys` folder inside the Android project folder contains your secure publishing/signing keys. Keep it protected and safe. You won’t be able to update without it, and it can’t be recovered.

The build.gradle files contain your passwords for the keystore. You’ll see your information in the section, signingConfigs.







You only have to generate a keystore and put it in the keys folder as in the current project structure and update the signing config in app/build.gradle


Finalize Your Build

Go to the right panel named Gradle.

Click on Expand All (the symbol next to the elephant) and find assembleRelease or assembleWebviewRelease.

assembleRelease creates the file to upload to Google Play. assembleWebviewRelease creates a file you can use to test the package on your device before you upload it to Google Play.





Right-click on either option and select Run this task to generate the APK.

To install and test the APK before release, find the installWebviewRelease task and run it while your Android device is connected to the System in debug mode.



After you choose Run, you’ll see a task list running like this.



The APK file will show up in your app > build > outputs > apk > webview > release folder.




Setting Up the Google Play Console
Go to the Google Play Console at https://play.google.com/apps/publish and sign in.

Pay your $25 Developer Fee to start an account.

Create a Merchant Account to collect payments.

Then, click on Publish an App on Google Play.



There are a couple of things that you can do now in any order you choose.


Store Presence
Under Store Presence, you can fill in the title of your game and the description, upload screenshots and product images, include a link for your trailer, set your price, and answer a questionnaire to get the rating for your game. The questionnaire will ask you about the level and type of violence in your game as well as any other potentially offensive content. It will then create a rating and age recommendation to display with your game.



You can also write out a privacy policy. Here’s what I used for my game: https://www.christiangamesnow.net/p/blog-page.html

If you want to enable in-app purchasing, you’ll also do this under Store Presence. (See section below.)


Manage Console Users and Game Testers
If you want others to be able to help you manage or test the game, go to All Applications. Under Developer Account, you can fill in the details of your company (yourself if you don’t have a company) and set Users and permissions. This is completely customizable, and you can add or remove people at any time.



Under the Manage testers tab, you can add testers to your game to let them avoid paying for your game.




Releasing Your Game
After your APK is generated and everything else is configured in the Play Console, you’re ready to upload your game and release it either for testers or public consumption.

Go to Release Management > App Releases.

Choose one of the Tracks and click Manage. The Production track is for full public release. Click Create Release and upload your APK. Write your release notes and save it. Your release notes for your first release can simply be “Initial Release” or something similar.



Click Review. Then, Rollout to publish your game.




Releasing Updates

If you need to release an update, the process is very similar to creating and uploading your initial package.

Open your project and replace the contents in the assets folder with your new www deployment folder.

Expand the Gradle Scripts on the left and open build.gradle (Module: app).

Update the version code and version name and click Sync Now in the upper right corner of that window.



In the Play Console, under App Releases, click to Create a New Release. Write a release note to explain what you changed and Rollout to publish the new version.


In-App Purchasing
To set up in-app purchasing, first, go to Store Presence > In-app products. To begin coding the purchase capability into your game, you’ll need to create a Product ID. On this page, you can also fill in the title, description, and price of your in-app product. You can create as many in-app products as you want.



You’ll then take that Product ID.

In the rpg_windows file, I added a new command to the title screen.



In rgp_scenes



 

Eliaquim

Hakuen Studio
Veteran
Joined
May 22, 2018
Messages
3,174
Reaction score
2,434
First Language
Portuguese - Br
Primarily Uses
RMMZ
Thanks a lot!
I already know it, but you put a lot of information there in a more organized way.
Although I still have some doubts:

About, Releasing Updates, I have to make a new deployment? Or if I just copy and paste the data folder(for example) in the other data folder of the project that is in the asset folder used by android studio, it will work?

About the In-App Purchasing, is there a way for me to use that only in the scene map? Because in my game, I do not use the title screen(Scene_Title), I use the map scene to make my title screen.

Thanks!
 

Randor

Veteran
Veteran
Joined
Jan 30, 2017
Messages
81
Reaction score
96
First Language
English
Primarily Uses
@Eliaquim, just noticed your reply here. First, yes, copying the folders should work. I'm not sure about your scene map question. I would have to try it to make sure it works.
 

JL_T4N

Down the Rabbit Hole
Veteran
Joined
Aug 21, 2016
Messages
64
Reaction score
76
First Language
Filipino
Primarily Uses
RMMV
A very nice and wonderful guide indeed! The In-App Purchasing could come in handy. A question though, to enable IAP, do I need to manually use or add an android billing library?
I am very new to this exporting to android thing.
Also please paste the codes you used in the IAP scenes in the title scene, as well as the simple bits to check if player made a purchase or not. Your screenshots are very small. Thanks!
 
Last edited:

Randor

Veteran
Veteran
Joined
Jan 30, 2017
Messages
81
Reaction score
96
First Language
English
Primarily Uses
Sure thing @quackenbirdt I hope this helps.

Here's the script I added to rpg_windows:


Window_TitleCommand.prototype.makeCommandList = function() {
this.addCommand(TextManager.newGame, 'newGame');
this.addCommand(TextManager.continue_, 'continue', this.isContinueEnabled());
this.addCommand(TextManager.options, 'options');
try {
if (!window.IAP.purchased()) {
throw 'Not purchased';
}
} catch (e) {
this.addCommand('Buy DLC', 'iap');
}
};

Here's the script I added to rpg_scenes:

Scene_Title.prototype.createCommandWindow = function() {
this._commandWindow = new Window_TitleCommand();
this._commandWindow.setHandler('newGame', this.commandNewGame.bind(this));
this._commandWindow.setHandler('continue', this.commandContinue.bind(this));
this._commandWindow.setHandler('options', this.commandOptions.bind(this));
this._commandWindow.setHandler('iap', this.commandIAP.bind(this));
this.addWindow(this._commandWindow);
};

Scene_Title.prototype.commandNewGame = function() {
DataManager.setupNewGame();
this._commandWindow.close();
this.fadeOutAll();
SceneManager.goto(Scene_Map);
};

Scene_Title.prototype.commandContinue = function() {
this._commandWindow.close();
SceneManager.push(Scene_Load);
};

Scene_Title.prototype.commandOptions = function() {
this._commandWindow.close();
SceneManager.push(Scene_Options);
};

Scene_Title.prototype.commandIAP = function() {
try {
window.IAP.purchaseGame();
} catch (e) {
// ?
}
};

And here's the script for purchasing the DLC in-game:

try {

window.IAP.purchaseGame();

while (window.IAP.purchaseInProgress()) {

// Halt till IAP windows closes.

}

} catch (e) {

console.log(e);

}
 

Eliaquim

Hakuen Studio
Veteran
Joined
May 22, 2018
Messages
3,174
Reaction score
2,434
First Language
Portuguese - Br
Primarily Uses
RMMZ
And here's the script for purchasing the DLC in-game:

try {

window.IAP.purchaseGame();

while (window.IAP.purchaseInProgress()) {

// Halt till IAP windows closes.

}

} catch (e) {

console.log(e);

}

With this script call, you have been able to open the in app window, and when it closes, resume the game?
Because every event that I call "window.IAP.purchaseGame();" If the user buy or not, the game is reseted. :(
 

knocz06

Curious Rabbit
Member
Joined
Jun 28, 2020
Messages
24
Reaction score
6
First Language
Indonesian
Primarily Uses
RMMV
Setting Up APK Extension Folders
What if you’ve compressed your files as far as you want to, and your project is still over 100 MB? You’ll need to set up extension folders for your files.


I’ll probably need to do this for my next update, so I’ll give some clearer instructions then. For now, here’s the Google Play instructions: https://developer.android.com/google/play/expansion-files

I tried to read the instruction but I still don't get it... I hope you post your explanation about it 'cause the instruction is unclear for me. :<
 

Cqualt

Veteran
Veteran
Joined
Jul 15, 2019
Messages
74
Reaction score
6
First Language
English
Primarily Uses
RMMV
Hey there ive only just started reading your forum and this look amazing thank you in advance but i seem to be having a problem, For the sake of having problems i have turned off ALL plugins and have run it in www, but unfortunately keeps coming up with a message that it failed to load the Actors.json
any ideas? Thank you!
 

Attachments

  • screenshotgame (2).png
    screenshotgame (2).png
    14 KB · Views: 10

TheRastaGeek

Villager
Member
Joined
Sep 26, 2020
Messages
20
Reaction score
3
First Language
French
Primarily Uses
RMXP
.......... it failed to load the Actors.json any ideas? Thank you!

This error happens because you try to play a game in the web browser directly when running INDEX.HTML.

hello, try this tutorial
 

Fancybeserker

Villager
Member
Joined
Aug 6, 2021
Messages
19
Reaction score
0
First Language
German
Primarily Uses
RMMZ
Hi everyone,

I have a problem following this guide as at a certain point I'm quite lost, especially the "key part". However, I found a batch file which is doing the work for me creating an APK file.

Now the problem is, that Google changed the way of files they want. It's not an APK anymore, rather an AAB file. Is someone wise enough to tell me how to change the APK file into a AAB file?

1628248171228.png
 

Fancybeserker

Villager
Member
Joined
Aug 6, 2021
Messages
19
Reaction score
0
First Language
German
Primarily Uses
RMMZ
However, there's no "Monetization Setup" in Google Play Console: 1628331127481.png

Literally checked everything in there /-:
What bugs me a bit is that any tutorial is outdated, even they came out yesterday. Any help?

Well, found the monetization thing, but whenever I try to build the aap file, I do get errors and my programming skills are almost zero.

1628334799124.png
 
Last edited:

TheGentlemanLoser

"And when we fall, we will fall together..."
Veteran
Joined
Dec 30, 2020
Messages
373
Reaction score
506
First Language
English
Primarily Uses
RMMV
Thank you for the effort put into this very, very in depth tutorial!

That sounds like quite a process! I'd be very curious to look at anyone's comparative sales data from the store to see what the pay off for all that effort looks like, because it does seem like a borderline epic undertaking following the steps laid out.
 

HiSv

Villager
Member
Joined
Jun 6, 2020
Messages
26
Reaction score
1
First Language
German
Primarily Uses
RMMV
Am I the only one who constantly experiences save issues with the Altlimit Android Client - even in a completely fresh project?

To be exact: Saving does work but the save file are not found when re-starting the game. The continue buttons remains inactive.

Does saving/loading work for anyone of you?
 

BreakerZero

Veteran
Veteran
Joined
Jul 8, 2018
Messages
1,140
Reaction score
504
First Language
English (USA)
Primarily Uses
RMMV
Am I the only one who constantly experiences save issues with the Altlimit Android Client - even in a completely fresh project?

To be exact: Saving does work but the save file are not found when re-starting the game. The continue buttons remains inactive.

Does saving/loading work for anyone of you?
I also have this issue in a Xamarin project, so I don't think it's specific to any particular development tool. Someone reported that their issue was with the Hime save info plugin, but I am not using that for my project and I'm still having problems. (Also, I use an identity and password combo to protect my game as it's cloud-hosted for size reasons; however I don't know if that has anything to do with this.)

EDIT: Forgot to mention but AAB is an Android App Bundle file. I believe from the documentation that you have to be a bit more involved with constructing the package for this to work if you're using a local, in-app asset package (you only get 1GB for that) and it doesn't work if you put it in the base project (the package builder throws an error stating that you cannot use a version number outside of that, even if you don't actually specify a version number) which aside from the size issues is why I made my project a cloud game on Android. And obb-formatted asset packs no longer work either.
 
Last edited:

HiSv

Villager
Member
Joined
Jun 6, 2020
Messages
26
Reaction score
1
First Language
German
Primarily Uses
RMMV
I also have this issue in a Xamarin project, so I don't think it's specific to any particular development tool. Someone reported that their issue was with the Hime save info plugin, but I am not using that for my project and I'm still having problems. (Also, I use an identity and password combo to protect my game as it's cloud-hosted for size reasons; however I don't know if that has anything to do with this.)

EDIT: Forgot to mention but AAB is an Android App Bundle file. I believe from the documentation that you have to be a bit more involved with constructing the package for this to work if you're using a local, in-app asset package (you only get 1GB for that) and it doesn't work if you put it in the base project (the package builder throws an error stating that you cannot use a version number outside of that, even if you don't actually specify a version number) which aside from the size issues is why I made my project a cloud game on Android. And obb-formatted asset packs no longer work either.

By now I also found out that the issue is not related to Altlimit but rather to different save plugins that permanently damage some config and save files. I copied my ressources and maps into a fresh project and everything worked fine again
 

BreakerZero

Veteran
Veteran
Joined
Jul 8, 2018
Messages
1,140
Reaction score
504
First Language
English (USA)
Primarily Uses
RMMV
Can I ask if you have any idea if any of these plugins are possibly causing save issues? I have a system going by which I use a separate plugins.js for every platform I'm supporting, and the following is the list of plugins used for Android:

CardDeck
Casino
TSR_Title
WAY_Core
PH_QuestBook
CGMV_Core
CGMV_Achievements
CGMV_VehicleSystem
YEP_BuffsStatesCore
YEP_MessageCore
YEP_MusicMenu
YEP_RegionRestrictions
YEP_ShopMenuCore
YEP_SkillCore
YEP_SwapEnemies
YEP_VictoryAftermath
YEP_X_AftermathLevelUp
YEP_X_MessageSpeedOpt
YEP_X_MoreCurrencies
YEP_X_StateCategories
WAY_YEP_SkillCore
HIME_ActorBattleCommands
HIME_BattleCommandUseSkill
HIME_EndPhaseTriggers
MrTS_DarkRoomCovers
Eli_RevealDarkCovers
GALV_LayerGraphics
SRD_BattleBackScroll
SRD_BattleEndEvents
SRD_TimerUpgrade
Olivia_AntiPlayerStress
TDDP_NoFastForward
Chau_TransitionEffects
Irina_AnimatedLoading
ALOE_VirtualButtons
AudioStreaming
SlotMachine
title_common_event
ProgressivePrizePick
DK_Video_Player
animatedSVEnemies
ScaleActors

I have already ruled out the use of on-screen controls as a contributing factor, as it is the only major difference between Android devices and other platforms (and for obvious reasons). Any help with determining if any of the other plugins would be an issue in this matter would be appreciated. (Also, the majority of the plugins are consistent across platforms aside from the on-screen controls so I consider them mission-critical unless I can do otherwise.)

EDIT: I'd also like to know if any of the following would be causing issues. Webview settings are as follows:

JavaScriptEnabled = true
MediaPlaybackRequiresUserGesture = false
DomStorageEnabled = true
DatabaseEnabled = true

And here are the permissions from my AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 
Last edited:

HiSv

Villager
Member
Joined
Jun 6, 2020
Messages
26
Reaction score
1
First Language
German
Primarily Uses
RMMV
Sorry, I am not an expert in this but I can say that I also use ALOE_VirtualButtons, title_common_event
and TSR_Title on Android without any problems.

The problem with some save plugins (not sure which one though as I tried several, including TSR_Save and YEP_Save(core?)) is not only when they are activated but rather that they corrupt system files even when implemented only once and deactivated again. Our problems were solved by restoring the old system files + always deleting the save folder before deploying to android.
 

Latest Threads

Latest Profile Posts

If you are ever looking for your cat among a room full of identical looking cats just find the one that is doing it's best to ignore you.
Isn't "tableau" such a fun word to say? Even better is that our resident artists know what it means without google and probably get to say it regularly.
ScreenShot_3_27_2023_4_30_39.png
one of the benefits of doing almost all the assets myself is being able to add my friend's OC from his comic book into my game as an NPC.
Quick survey: How much of importance is the game UI for your experience, as a player and game designer?
I'm returning to the first game engine I've ever used, RPG Maker MV :D

Forum statistics

Threads
129,891
Messages
1,206,009
Members
171,066
Latest member
BubblegumPatty
Top