Nouveau Trouve le job que tu mérites sur Les Joies du Code

Thème d'affichage

Faire tourner des applis Android sur Mac sans émulateur, c'est possible avec Mac.apk

Nicolas Lecointre ·
Faire tourner des applis Android sur Mac sans émulateur, c'est possible avec Mac.apk

Des applis et jeux Android comme Minecraft, Fruit Ninja ou Candy Crush qui s'ouvrent depuis le Dock de votre Mac, dans leur propre fenêtre avec le bouton retour d'Android ajouté à côté des boutons rouge, jaune et vert de la barre de titre : c'est ce que propose Mac.apk, un projet open source sorti en alpha début octobre.

Pas d'émulateur ni de machine virtuelle, promet le projet : rien ne démarre Android en arrière-plan et aucun noyau Linux ne tourne en dessous. Son auteur, Kaleb Simpson, a tout bonnement réimplémenté l'environnement des applis Android directement par-dessus macOS.

Un Wine pour Android

Mac.apk appartient à la même famille que Proton ou Wine (dont le nom est justement l'acronyme récursif de "Wine Is Not an Emulator", comme PHP pour "PHP: Hypertext Preprocessor", au cœur de l'actu cette semaine 👀) : celle des couches de compatibilité.

Plutôt que de simuler un téléphone entier, il fournit à l'appli tout ce qu'elle attend d'Android, mais branché sur macOS. Ses fenêtres sont des fenêtres Mac, le presse-papiers est celui du Mac et votre position vient du service de localisation de macOS.

Schéma montrant une appli Android (code Java/Kotlin, code natif ARM, ressources) convertie par Mac.apk en vraie appli Mac

Au premier lancement, Mac.apk convertit le code Java ou Kotlin de l'appli, livré au format DEX (le bytecode maison d'Android), en bytecode Java standard grâce à son outil dex2jvm. Cette conversion rend le premier démarrage assez lent, jusqu'à une minute pour une grosse appli.

Le code converti tourne ensuite sur un runtime Java tiré d'OpenJDK.

Quand le projet promet de se passer de machine virtuelle, il pense aux Parallels et autres VirtualBox, qui simulent un ordinateur entier. Mais techniquement, une machine virtuelle tourne bel et bien derrière chaque appli : la bonne vieille JVM, pour Java Virtual Machine (eh ouais).

Reste le code natif en C ou C++, présent dans presque tous les jeux. Compilé pour l'ARM 64 bits, il tourne tel quel sur les puces Apple Silicon, qui parlent la même langue.

Les bibliothèques 32 bits, que ces puces ne savent pas exécuter, sont traduites une fois pour toutes en 64 bits, avant leur lancement. Quant aux graphismes, ils passent par Metal, l'API graphique d'Apple : c'est directement le GPU du Mac qui dessine.

Fortnite reste à la porte

Mac.apk réclame un Mac Apple Silicon sous macOS 26.4 ou plus récent : sur un Mac Intel, il faudrait émuler l'ARM (exactement ce que le projet s'interdit).

Sur les 71 applis testées à la main par le projet, 58 fonctionnent, dont Minecraft (multijoueur compris), Among Us, VLC ou Telegram. D'autres coincent encore, comme Instagram et ses drôles de soucis de mise en page.

Minecraft Android lancé dans une fenêtre sur macOS, avec commandes tactiles à l'écran et paysage de collines herbeuses

Certaines limites sont en revanche délibérées : Mac.apk ne se fait pas passer pour un téléphone certifié et n'implémente donc pas Play Integrity, le contrôle par lequel une appli vérifie qu'elle tourne sur un appareil Android authentique.

Il ne cherche pas non plus à tromper les anti-triche, ces protections que les jeux en ligne embarquent pour repérer un environnement suspect. Fortnite bute donc sur celui d'Epic et ne démarre pas.

Et rien ne s'achète dans les applis (Candy Crush peut tourner, mais ses boosters resteront en vitrine).

De vraies applis Mac, mais sans bac à sable

Chaque appli installée devient une vraie appli Mac, avec son nom et son icône dans le dossier Applications. Son .app ne renferme que l'APK d'origine et ses bibliothèques natives : le code converti et vos sauvegardes sont rangés à part, dans ~/Library/Application Support/MacApk.

Glisser l'appli dans la corbeille, le réflexe habituel sur Mac, laisse donc ces données derrière elle.

Pour désinstaller proprement, il faut passer par le panneau de Mac.apk, qui fait le ménage, peut mettre les sauvegardes de côté et les remet en place si vous réinstallez la même version de l'appli.

Le point le plus sérieux reste le bac à sable : les applis n'en ont aucun. Sur un téléphone, chacune vit dans le sien ; sous Mac.apk, elle tourne avec les droits de votre compte macOS, comme n'importe quel programme téléchargé.

Les permissions Android ne couvrent que le code Java : une appli qui embarque du code natif peut lire sans rien demander les dossiers partagés d'Android, qui sont du coup vos vrais dossiers Mac (Images, Films, Musique...).

Les dossiers Documents, Téléchargements, le Bureau et la photothèque restent protégés par macOS, qui demande votre feu vert une fois par appli.

Le projet le répète sur tous les tons : un APK se traite comme n'importe quel exécutable trouvé sur le web, et ne s'installe que s'il vient d'une source de confiance. Surtout s'il promet de faire tourner Fortnite. 👀

À propos de l'auteur

Nicolas Lecointre

Nicolas Lecointre

Fondateur des Joies du Code, je suis l'actualité et la culture des développeurs depuis 2012. Ancien développeur, je me consacre aujourd'hui entièrement au média.

Voir sa page auteur

Offres d'emploi

Voir toutes les offres

À lire également

Articles similaires