Export Love2D to APK
Raphytator Il y a 2 ans Premium Pro3

Bonjour les codeurs !

Je m’intéresse aux jeux mobiles, et il est possible de développer des jeux sur mobile avec Love2D. Je suis alors allé regarder comment faire pour transformer le fichier .love en fichier .apk. Après quelques galères, j’ai réussi à exporter mon jeu, et à le faire tourner sur mon smartphone. J’ai alors décidé de rédiger un guide afin de le partager à la communauté.

Vous pouvez retrouver ce guide au format .pdf dans les épingles du channel #lua-love2d-corona du Discord, ou bien sur mon site à l’adresse suivante : http://www.oktopuss.net/documents/Export%20Love2D%20to%20APK.pdf

Export Love2D to APK

Ce guide vous montre étape par étape la méthode que j’emploie pour transformer un jeu développé avec Love2D en fichier .apk pour être joué sur un smartphone Android.

J’ai utilisé la méthode utilisant l’APKTool, expliquée sur le Wiki de Löve ( https://love2d.org/wiki/Game_Distribution/APKTool )

Récupération des outils

Java SDK

Tout d’abord, il faut télécharger et installer le Java JDK. Il permet de lancer les fichiers .jar et contient 2 outils nécéssaires à la procédure : keytool.exe et jarsigner.exe.

=> https://www.oracle.com/java/technologies/javase-downloads.html

Une fois installé, lancez une invite de commande ( appuyez sur les touches « widnows + r » puis tapez « cmd »), et vérifier que votre version de java est bien en 1.8 ou suppérieur en tapant la commande :

java -version

APK Tool

Il faut ensuite récupérer l’APKTool qui nous permet de créer le fichier .apk, ainsi que le script batch pour l’utiliser. (Source : https://ibotpeaches.github.io/Apktool/install/ )

APK Tool => https://bitbucket.org/iBotPeaches/apktool/downloads/

Renommez le fichier en apktool.jar

apktool.bat (faites un clic droit / enregistrer la cible du lien sous… puis assurez-vous que le fichier soir bien apktool.bat, si c’est apktool.bat.txt, renommez-le.) => https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/windows/apktool.bat

Copiez ces deux fichiers (apktool.jar et apktool.bat) dans le répertoire de windows (C:\Windows\), puis lancez une invite de commande, et vérifiez si cela fonctionne en tapant la commande :

apktool

Löve APK

Récupérez le fichier .apk de Löve à l’adresse suivante

=> https://github.com/love2d/love/releases/download/11.3/love-11.3-android-embed.apk

Créez un répertoire qui va vous servir à contruire votre fichier .apk et mettez-y l’apk de Löve.

Android Build Tools

Enfin, récupérez la boite à outils Android contenant zipalign.exe.

=> build-tools_r30-rc1-windows.zip

Création du trousseau de clés

Pour pouvoir signer votre fichier .apk et permettre son installation sur Android, vous devez vous créer un trousseau de clés. Pour se faire, il va falloir utiliser keytool.exe disponible dans le Java JDK. Ouvrez une invite de commande et rendez-vous dans le dossier bin du JDK ( C:\Program Files\Java\jdk-14\bin ), puis tapez la commande :

keytool -genkeypair -v -keystore keyring.keystore -alias keyname -keyalg RSA -keysize 2048 -validity 10000

keyring.keystore est le nom du trousseau de clé, et keyname est la clé contenue dans le trousseau. Vous pouvez modifier les nom si vous le désirez.

Cette commande va vous demander de renseigner plusieurs choses :

  • Un mot de passe pour pouvoir utiliser la clé
  • Votre nom et prénom
  • Le nom de l’unité au sein de votre organisation (vous pouvez mettre le nom de l’organisation)
  • Le nom de votre organisation
  • Le nom de votre ville
  • Le nom de votre département
  • Les 2 lettres du code de votre pays

Vous validez en tapant yes.

Conservez le fichier .keystore qui a été créé, il va vous servir à signer numériquement vos applications.

Création du fichier .apk

Décomplier le fichier APK

D’abord, compressez les fichiers de votre jeu en game.zip puis renommez ce fichier en game.love.

Il est important que le nom du fichier .love soit game.love.

Ouvrez une invite de commande, et rendez-vous dans le dossier contenant le fichier love-11.3-android-embed.apk, et tapez la commande apktool d -s -o love_decoded love-11.3-android-ambed.apk. Cela va créer un répertoire love_decoded contenant les fichiers nécéssaires pour la création du fichier .apk. Vous pouvez remplacer love_decoded par le nom que vous souhaitez, il faudra remplacer love_decoded par le nom que vous aurez choisi dans la suite de la procédure.

Dans ce répertoire love_decoded, vous devez créer un répertoire assets dans lequel vous y placez votre fichier game.love.

Vous devez ensuite modifier le fichier AndroidManifest.xml en effaçant son contenu pour le remplacer par celui-ci (disponible également ici : https://love2d.org/wiki/Game_Distribution/APKTool ) :

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest package="${GamePackageName}"
      android:versionCode="${GameVersionCode}"
      android:versionName="${GameVersionSemantic}"
      android:installLocation="auto" xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18"/>
    <!--Uncomment line below if your game uses microphone capabilities. !-->
    <!--uses-permission android:name="android.permission.RECORD_AUDIO" /!-->
    <uses-feature android:glEsVersion="0x00020000"/>
    <application
        android:allowBackup="true"
        android:icon="@drawable/love"
        android:label="${GameName}"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
    >
        <activity
            android:configChanges="orientation|screenSize"
            android:label="${GameName}"
            android:launchMode="singleTask"
            android:name="org.love2d.android.GameActivity"
            android:screenOrientation="sensorLandscape"
        >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
                <category android:name="tv.ouya.intent.category.GAME"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Remplacez les variables suivantes :

  • ${GamePackageName}
  • ${GameVersionCode}
  • ${GameVersionSemantic}
  • ${GameName}

$(GamePackageName) correspond au nom de votre fichier .apk, par exemple monJeu.apk.

$(GameVersionCode) correspond au code de version de votre APK, par exemple 1.

$(GameVersionSemantic) correspond à la version de votre APK, par exemple 1,0.

$(GameName) correspond au nom de votre jeu, par exemple MonJeu.

Exemple :

<manifest package="monJeu.apk"
      android:versionCode="1"
      android:versionName="1.0"

etc…

Changer l’icone (optionnel)

Pour changer l’icone de votre application, vous devez remplacer les fichier love.png des dossiers drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi et drawable-xxxhdpi dans le dossier res, en gardant les mêmes dimensions que les fichiers que vous avez remplacés.

Les dimensions :

  • drawable-mdpi : 48*48
  • drawable-hdpi : 72*72
  • drawable-xhdpi : 96*96
  • drawable-xxhdpi : 144*144
  • drawable-xxxhdpi : 192*192

Astuce : Créez un dossier (sur votre bureau par exemple) dans lequel vous créez les 5 dossiers drawable-[…], puis réalisez votre icone au format 192*192 et exportez la sous le nom love.png dans le dossier drawable-xxxhdpi. Redimensionnez ensuite votre image avec la taille inférieure et exportez la dans le dossier correspondant, toujours sous le nom de love.png, et répétez l’opération pour chaque format.Votre image perdra moins en qualité si vous partez d’un grand format que vous rétrécissez, plutôt qu’en partant d’un petit format que vous agrandissez. Sélectionnez ensuite tous les dossiers drawable-[…], copiez les, et collez-les dans le répertoire res.

Complier votre fichier APK

Retournez sur l’invite de commande, dans le dossier contenant le fichier love-11.3-android-ambed.apk et tapez la commande suivante :

apktool b -o monJeuUnsigned.apk love_decoded

Si vous avez choisi un autre nom de dossier que love_decoded lors de la décompilation, mettez-le à la place de love_decoded.

J’ai choisi d’appeler le fichier .apk monJeuUnsigned.apk pour voir qu’il n’a pas encore été signé numériquement, et parce que l’utilitaire zipalign.exe a besoin de créer un nouveau fichier lors de son utilisation, ce fichier sera le fichier .apk terminé, qui contiendra le nom voulu.

Signer numériquement votre fichier APK

(Source : https://docs.microsoft.com/fr-fr/xamarin/android/deploy-test/signing/manually-signing-the-apk )

Pour permettre à Android d’installer votre fichier .apk, il faut le signer numériquement.

Copiez votre fichier monJeuUnsigned.apk dans le répertoire du JDK de Java ( C:\Program Files\Java\jdk-14\bin ), ainsi que votre trousseau de clé keyring.keystore, puis rendez-vous dans ce répertoire via l’invite de commandes.

Tapez ensuite la commande :

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keyring.keystore monJeuUnsigned.apk keyname

keyring.keystore correspond à votre trousseau de clé, et keyname correspond à la clé dans le trousseau.

Le fichier monJeuUnsigned.apk sera alors modifié, vous devrez le copier dans le répertoire contenant les outils pour Android, où se situe zipalign.exe ( build-tools_r30-rc1-windows\android-R )

Rendez-vous dans ce dossier via l’invite de commandes, et tapez la commande :

zipalign -f -v 4 monJeuUnsigned.apk monJeu.apk

Cela va créer un nouveau fichier monJeu.apk qui sera le fichier final de votre jeu.

Vous pouvez à présent copier votre fichier .apk sur votre smartphone, et lancer son installation en acceptant les installations des sources inconnues.

 

J’espère que ce guide vous sera utile !

Comments (3)

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.