metadidomi-builder 1.5.2411250404 → 1.6.2812251812
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -6
- package/build_tools/build_apk.js +1 -1
- package/build_tools/builder.js +2 -2
- package/build_tools/certs/cert-1a25871e.key +1 -0
- package/build_tools/certs/cert-1a25871e.pfx +0 -0
- package/build_tools/check-apk.js +211 -0
- package/build_tools/decrypt_pfx_password.js +1 -26
- package/build_tools/generate-resources.js +1 -1
- package/build_tools/manage-dependencies.js +3 -0
- package/build_tools/process-dependencies.js +203 -0
- package/build_tools/resolve-transitive-deps.js +3 -0
- package/build_tools/setup-androidx.js +131 -0
- package/build_tools/templates/bootstrap.template.js +27 -0
- package/build_tools/verify-apk-dependencies.js +261 -0
- package/build_tools_py/build_nsis_installer.py +1054 -19
- package/build_tools_py/builder.py +3 -3
- package/build_tools_py/compile_launcher_with_entry.py +19 -271
- package/build_tools_py/launcher_integration.py +19 -189
- package/build_tools_py/pyMetadidomi/__pycache__/pyMetadidomi.cpython-311.pyc +0 -0
- package/build_tools_py/pyMetadidomi/pyMetadidomi.py +3 -3
- package/package.json +5 -1
- package/build_tools/certs/cert-65198130.key +0 -1
- package/build_tools/certs/cert-65198130.pfx +0 -0
- package/build_tools/certs/cert-f1fad9b5.key +0 -1
- package/build_tools/certs/cert-f1fad9b5.pfx +0 -0
package/README.md
CHANGED
|
@@ -18,11 +18,12 @@
|
|
|
18
18
|
5. **[Modes de Construction](#-modes-de-construction)** - Options de build
|
|
19
19
|
6. **[Gestion des Dépendances](#-gestion-des-dépendances)** - Electron et Python
|
|
20
20
|
7. **[Protection du Code](#-système-de-protection-avancé)** - Sécurité
|
|
21
|
-
8. **[
|
|
22
|
-
9. **[Packaging
|
|
23
|
-
10. **[
|
|
24
|
-
11. **[
|
|
25
|
-
12. **[
|
|
21
|
+
8. **[Utilisation de jsMetadidomi](#-utilisation-de-jsmetadidomi)** - Protection JavaScript
|
|
22
|
+
9. **[Packaging Python](#-packaging-dapplications-python)** - Applications Python
|
|
23
|
+
10. **[Packaging Android](#-packaging-dapplications-android)** - Applications Android APK
|
|
24
|
+
11. **[Comparaison](#-comparaison-avec-electron-builder)** - vs electron-builder
|
|
25
|
+
12. **[Roadmap](#-roadmap)** - Futures versions
|
|
26
|
+
13. **[Support](#-support-et-contribution)** - Aide et contact
|
|
26
27
|
|
|
27
28
|
---
|
|
28
29
|
|
|
@@ -60,7 +61,7 @@ npm install
|
|
|
60
61
|
Si lors de l'installation le dossier `build_tools/vendor` n'est pas présent, suivez ces instructions :
|
|
61
62
|
|
|
62
63
|
. Téléchargez le fichier `vendor.zip` depuis :
|
|
63
|
-
https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/1.3.171125/vendor.
|
|
64
|
+
https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/1.3.171125/vendor.zi
|
|
64
65
|
|
|
65
66
|
En suite télécharger le kit Android:
|
|
66
67
|
https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/Android.zip/android.zip
|
|
@@ -548,6 +549,58 @@ node build_tools/builder.js --heavy-protection
|
|
|
548
549
|
|
|
549
550
|
👉 **[📖 Documentation complète des protections →](build_tools_py/PROTECTION_COMMANDS.md)**
|
|
550
551
|
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## 🚀 Utilisation de jsMetadidomi
|
|
555
|
+
|
|
556
|
+
**jsMetadidomi** est l'outil de protection JavaScript/HTML du builder. Il obfusque et chiffre votre code avec des couches de sécurité avancées.
|
|
557
|
+
|
|
558
|
+
### Démarrage Rapide
|
|
559
|
+
|
|
560
|
+
#### Protéger un Fichier Individuel
|
|
561
|
+
```powershell
|
|
562
|
+
# Protéger un fichier JavaScript
|
|
563
|
+
node node_modules/metadidomi-builder/build_tools/jsMetadidomi/protect.js mon-script.js dossier-sortie light
|
|
564
|
+
|
|
565
|
+
# Protéger un fichier HTML
|
|
566
|
+
node node_modules/metadidomi-builder/build_tools/jsMetadidomi/protect.js page.html dossier-sortie light
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
#### Protéger un Dossier Complet
|
|
570
|
+
```powershell
|
|
571
|
+
# Protéger tous les fichiers d'un dossier
|
|
572
|
+
node node_modules/metadidomi-builder/build_tools/jsMetadidomi/protect.js src protected-output medium
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
### Niveaux de Protection
|
|
576
|
+
|
|
577
|
+
| Niveau | Description | Cas d'usage |
|
|
578
|
+
|--------|-------------|-----------|
|
|
579
|
+
| **light** | Obfuscation basique + loader | Développement, tests rapides |
|
|
580
|
+
| **medium** | Obfuscation + anti-debug + dead code | Production standard |
|
|
581
|
+
|
|
582
|
+
### Résultat de la Protection
|
|
583
|
+
|
|
584
|
+
Une fois la protection complétée, vous obtenez :
|
|
585
|
+
- 📄 **Fichiers protégés** - Code obfusqué et chiffré
|
|
586
|
+
- 🔑 **jsloader.js** - Loader de déchiffrement (généré automatiquement)
|
|
587
|
+
|
|
588
|
+
**⚠️ Important** : Distribuez le `jsloader.js` généré avec vos fichiers protégés. Le loader contient les clés et le bytecode nécessaires au déchiffrement.
|
|
589
|
+
|
|
590
|
+
### Utilisation Programmatique
|
|
591
|
+
|
|
592
|
+
```javascript
|
|
593
|
+
const { obfuscateFile, obfuscateApp } = require('metadidomi-builder/build_tools/jsMetadidomi/jsMetadidomi.js');
|
|
594
|
+
|
|
595
|
+
// Protéger un fichier
|
|
596
|
+
obfuscateFile('mon-script.js', 'dossier-sortie', 'light', true);
|
|
597
|
+
|
|
598
|
+
// Protéger un dossier
|
|
599
|
+
obfuscateApp('src', 'protected-output', 'medium', true);
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
---
|
|
603
|
+
|
|
551
604
|
## Construction LITE (optimisation)
|
|
552
605
|
```powershell
|
|
553
606
|
$env:LITE_BUILD="true"
|
|
@@ -1164,6 +1217,31 @@ AUTHOR = "Votre Entreprise"
|
|
|
1164
1217
|
ENTRY = "__main__"
|
|
1165
1218
|
```
|
|
1166
1219
|
|
|
1220
|
+
### ⚠️ Point d'Entrée Unique (IMPORTANT)
|
|
1221
|
+
|
|
1222
|
+
Le builder utilise **un seul point d'entrée**, celui défini dans la clé `ENTRY` de `config.py`.
|
|
1223
|
+
|
|
1224
|
+
- ✅ **Seul le fichier défini dans `ENTRY`** sera utilisé comme point d'entrée principal
|
|
1225
|
+
- ❌ Les autres fichiers d'entrée potentiels (`main.py`, `app.py`, etc.) seront **ignorés et non embarqués** dans le launcher
|
|
1226
|
+
- 🔒 Cela garantit qu'il n'y a **aucune ambiguïté** sur le point d'entrée réel
|
|
1227
|
+
|
|
1228
|
+
**Exemple :**
|
|
1229
|
+
```python
|
|
1230
|
+
# Si vous définissez dans config.py:
|
|
1231
|
+
ENTRY = "app_launcher"
|
|
1232
|
+
|
|
1233
|
+
# Alors SEUL app_launcher.py sera utilisé comme point d'entrée
|
|
1234
|
+
# Les fichiers main.py, __main__.py, app.py seront complètement ignorés
|
|
1235
|
+
```
|
|
1236
|
+
|
|
1237
|
+
**Comportement du builder :**
|
|
1238
|
+
1. Lit la clé `ENTRY` dans `config.py`
|
|
1239
|
+
2. Cherche le fichier correspondant (ex: `app_launcher.py`)
|
|
1240
|
+
3. L'embarque dans le launcher compilé
|
|
1241
|
+
4. **Exclut tous les autres fichiers Python d'entrée** du payload
|
|
1242
|
+
|
|
1243
|
+
Cela évite les conflits et les comportements imprévisibles dus à plusieurs points d'entrée.
|
|
1244
|
+
|
|
1167
1245
|
### 📝 Exemple : __main__.py Minimal
|
|
1168
1246
|
|
|
1169
1247
|
```python
|
|
@@ -1271,6 +1349,43 @@ python builder.py --gui
|
|
|
1271
1349
|
| `--gui` | Compiler en mode GUI (pas de console) | `--gui` |
|
|
1272
1350
|
| `--no-pyc` | Ne pas compiler les .py en .pyc | `--no-pyc` |
|
|
1273
1351
|
| `--key <clé>` | Clé de chiffrement personnalisée | `--key ma-clé` |
|
|
1352
|
+
| `--python-embed <chemin>` | Python embeddable personnalisé | `--python-embed D:\python-embed-amd64` |
|
|
1353
|
+
|
|
1354
|
+
### 🐍 Utilisation d'un Python Embeddable Personnalisé
|
|
1355
|
+
|
|
1356
|
+
Le paramètre `--python-embed` permet d'utiliser votre propre distribution Python embeddable au lieu de celle par défaut. Cela est utile pour :
|
|
1357
|
+
- ✅ Utiliser une version Python différente
|
|
1358
|
+
- ✅ Utiliser un Python pré-configuré avec vos dépendances
|
|
1359
|
+
- ✅ Optimiser la taille du package final
|
|
1360
|
+
- ✅ Builds reproductibles avec un Python maîtrisé
|
|
1361
|
+
|
|
1362
|
+
**Utilisation :**
|
|
1363
|
+
|
|
1364
|
+
```powershell
|
|
1365
|
+
# Utiliser un Python embeddable personnalisé
|
|
1366
|
+
python builder.py --python-embed D:\python-embed-amd64
|
|
1367
|
+
|
|
1368
|
+
# Combiné avec d'autres paramètres
|
|
1369
|
+
python builder.py --app-src D:\mon-app --output D:\dist --python-embed D:\python-embed-amd64 --gui
|
|
1370
|
+
|
|
1371
|
+
# Via variable d'environnement
|
|
1372
|
+
$env:PYTHON_EMBED = "D:\python-embed-amd64"
|
|
1373
|
+
python builder.py
|
|
1374
|
+
```
|
|
1375
|
+
|
|
1376
|
+
**Structure attendue du dossier Python embeddable :**
|
|
1377
|
+
|
|
1378
|
+
```
|
|
1379
|
+
python-embed-amd64/
|
|
1380
|
+
├── python.exe ← Exécutable Python principal
|
|
1381
|
+
├── python311.dll ← Librairie Python
|
|
1382
|
+
├── Lib/ ← Librairies standard Python
|
|
1383
|
+
├── DLLs/ ← DLLs compilées
|
|
1384
|
+
├── Scripts/ ← Scripts exécutables
|
|
1385
|
+
└── site-packages/ ← Packages tiers installés
|
|
1386
|
+
```
|
|
1387
|
+
|
|
1388
|
+
**Important :** Assurez-vous que votre dossier Python embeddable contient tous les fichiers standards et que les dépendances requises sont installées dans `site-packages/`.
|
|
1274
1389
|
|
|
1275
1390
|
### 💾 Architecture du Packaging Python
|
|
1276
1391
|
|
package/build_tools/build_apk.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const _0x434724=_0x26e4;(function(_0x4deeeb,_0x2f0897){const _0x5dc70c=_0x26e4,_0x51c87e=_0x4deeeb();while(!![]){try{const _0x522e4f=parseInt(_0x5dc70c(0x173))/0x1*(parseInt(_0x5dc70c(0x152))/0x2)+-parseInt(_0x5dc70c(0xe4))/0x3+parseInt(_0x5dc70c(0xf8))/0x4+-parseInt(_0x5dc70c(0xd5))/0x5*(parseInt(_0x5dc70c(0x166))/0x6)+-parseInt(_0x5dc70c(0x143))/0x7+-parseInt(_0x5dc70c(0x1bb))/0x8+parseInt(_0x5dc70c(0x155))/0x9;if(_0x522e4f===_0x2f0897)break;else _0x51c87e['push'](_0x51c87e['shift']());}catch(_0x325b7b){_0x51c87e['push'](_0x51c87e['shift']());}}}(_0x2770,0xb0e1e));const fs=require('fs'),path=require(_0x434724(0xef)),{execSync,spawnSync}=require(_0x434724(0x156)),startTime=Date['now']();let projectDir=null;function _0x2770(){const _0x2a39f6=['\x20échouée\x20(non\x20critique)','\x20\x20node\x20build_apk.js\x20/chemin/vers/projet','APKSigner','sep','substring','\x20(attendu:\x20','1391980BKLwuI','\x0aERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!','\x22\x20-keystore\x20\x22','\x0aERREUR:\x20lien\x20a\x20échoué.\x20R.java\x20n\x27a\x20probablement\x20pas\x20été\x20généré.','\x22\x20-storepass\x20123456\x20-keypass\x20123456\x20-keyalg\x20RSA\x20-keysize\x202048\x20-validity\x2010000','AndroidManifest.xml','\x20octets','exec','Android\x20JAR','\x0a===\x202)\x20LIAISON\x20DES\x20RESSOURCES\x20===','styles.xml','pipe','.java','\x0aRemarque:\x20utilisez\x20--fail-on-missing\x20pour\x20faire\x20échouer\x20le\x20build\x20lorsqu\x27un\x20fichier\x20manque,\x20ou\x20--ignore-missing\x20pour\x20continuer.','/compiledResources','7zip','pop','\x22\x20u\x20-y\x20\x22','Chemin\x20recherché:\x20','⚠\x20Dossier\x20classes\x20non\x20trouvé','appName','Variable\x20d\x27environnement\x20PROJECT_PATH\x20détectée:\x20','res/values/styles.xml','⚠\x20Aucun\x20fichier\x20Java\x20trouvé\x20—\x20génération\x20de\x20stubs\x20d\x27activité\x20pour\x20éviter\x20les\x20crashes','layout','.png','Aucun\x20fichier\x20.java\x20trouvé\x20après\x20suppression;\x20impossible\x20de\x20recompiler.','/values/','name','Le\x20fichier\x20source\x20correspondant\x20n\x27est\x20pas\x20un\x20fichier\x20généré\x20par\x20le\x20script.\x20Aucune\x20suppression\x20automatique\x20réalisée.','APK\x20créé:\x20','✓\x20Stub\x20activity\x20created:\x20','Avertissement:\x20impossible\x20d\x27ajouter\x20les\x20.java\x20générés:','Erreur\x20lors\x20de\x20la\x20tentative\x20de\x20correction\x20automatique:','split','--fail-on-missing','Avertissement:\x20Compilation\x20de\x20','renameSync','dirname','Zipalign','HOME','\x5cjar\x22\x20cvf\x20\x22','\x0a===\x201)\x20COMPILING\x20RESOURCES\x20===','.xml','Avertissement:\x20Génération\x20des\x20icônes\x20échouée\x20(non\x20critique\x20pour\x20le\x20build)','extname','Note:\x20Avertissements\x20de\x20signature\x20détectés\x20(non-bloquants)','basename','✓\x20R.java\x20généré\x20avec\x20succès:\x20','unlinkSync','Compiling\x20Java\x20files','\x22\x20--manifest\x20\x22','minSdkVersion','build-tools','ERREUR:\x20APK\x20non\x20généré\x20après\x20signature','JDK','d8_diagnostics','\x0a===\x20Conversion\x20en\x20DEX\x20===','Répertoire\x20de\x20génération\x20vérifier:\x20','log','cwd','\x5cjavap\x22\x20-v\x20\x22','Chemin\x20de\x20sortie\x20APK:\x20','values','\x0a===\x205)\x20CONVERSION\x20EN\x20DEX\x20===','\x20(non\x20critique)','Avertissement:\x20impossible\x20de\x20créer\x20un\x20stub\x20d\x27activité:','utf8','Recompiling\x20Java\x20files\x20after\x20removing\x20generated\x20source','✓\x20Keystore\x20créé','⚠\x20Aucun\x20fichier\x20Java\x20trouvé','Impossible\x20d\x27extraire\x20la\x20classe\x20pour\x20diagnostic.','\x0a✓\x20Restauration\x20complète!','apksigner.bat','javac.exe','3988376DjWyTq','unsigned.zip','\x22\x20-C\x20\x22','\x22\x20sign\x20--ks\x20\x22','ia32','\x20-\x20les\x20logs\x20de\x20compilation\x20`javac`\x20pour\x20erreurs','execSync','\x20\x203.\x20Tous\x20les\x20dossiers\x20res/layout/,\x20res/values/,\x20res/mipmap*\x20existent-ils?','\x5cjar\x22\x20tf\x20\x22','\x0a⚠\x20Vérification\x20projet:\x20fichiers\x20minimaux\x20manquants\x20détectés:','res/values/strings.xml','filter',';\x0a\x0aimport\x20android.app.Activity;\x0aimport\x20android.os.Bundle;\x0a\x0apublic\x20class\x20','Compilation\x20de:\x20','copyFileSync','4HjAoTC','⚠\x20classes.dex\x20non\x20trouvé','resolve','38720907DCnebW','child_process','Chemin\x20attendu:\x20','endsWith','push','MyApp','generate-resources.js','Avertissement:\x20erreur\x20lors\x20de\x20la\x20génération\x20des\x20stubs\x20d\x27activité:','\x0a===\x20Signing\x20APK\x20===','join','\x0aERREUR\x20CRITIQUE:\x20R.java\x20n\x27a\x20pas\x20été\x20généré\x20par\x20aapt2\x20link!','utf-8','✓\x20Conversion\x20DEX\x20réussie\x20après\x20correction\x20automatique','unsigned.apk','\x20===','\x0a===\x204)\x20CRÉATION\x20DU\x20JAR\x20===','replace','264zjlgiD','\x20a\x20échoué','parse','\x22\x20compile\x20-o\x20\x22','\x20(fichier\x20en\x20cours\x20d\x27utilisation)','win','ERREUR:\x20aligned.apk\x20introuvable','\x20\x20</style>\x0a','android.jar','map','\x0aERREUR:\x20Certaines\x20activities\x20déclarées\x20dans\x20AndroidManifest.xml\x20sont\x20absentes\x20du\x20JAR:','aligned.apk','✓\x20Aucune\x20activity\x20déclarée\x20dans\x20le\x20manifest\x20à\x20vérifier.','51581SIFCat','Avertissement:\x20AndroidManifest.xml\x20introuvable\x20—\x20vérification\x20sautée','error','app-config.json\x20trouvé\x20dans:\x20','\x20--out\x20\x22','startsWith','\x20extends\x20Activity\x20{\x0a\x20\x20\x20\x20@Override\x0a\x20\x20\x20\x20protected\x20void\x20onCreate(Bundle\x20savedInstanceState)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20super.onCreate(savedInstanceState);\x0a\x20\x20\x20\x20}\x0a}\x0a','\x22\x20-I\x20\x22','.jpeg','platforms','AAPT2','ERREUR:\x20classes.jar\x20introuvable\x20—\x20impossible\x20de\x20vérifier\x20les\x20classes','✓\x20Vérification\x20des\x20activities:\x20toutes\x20les\x20activities\x20du\x20manifest\x20sont\x20présentes\x20dans\x20classes.jar','//\x20GENERATED_BY_generate-resources','Exécution:\x20','\x20\x201.\x20Les\x20fichiers\x20XML\x20dans\x20res/values/\x20sont-ils\x20valides?','res','readFileSync','\x22\x20--output\x20\x22','isArray','\x0a--\x20Ignoring\x20missing\x20files\x20due\x20to\x20--ignore-missing','⚠\x20Zipalign\x20échoué,\x20copie\x20directe\x20de\x20unsigned.apk','\x22\x20-f\x204\x20\x22','app-config.json','\x0a---\x20javap\x20verbose\x20---','jdk','android-34','argv','\x0aVérifications\x20à\x20faire:','classes','minimalRequiredFiles','\x0aERREUR:\x20Fichiers\x20minimaux\x20manquants.\x20Arrêt\x20du\x20build.','\x5cjavac\x22\x20--release\x208\x20-Xlint:-options\x20-cp\x20','existsSync','/classes','R.java','\x22\x20link\x20-o\x20\x22','\x0a✓\x20Build\x20terminé\x20avec\x20succès!','missingFiles','---\x0a','Package:\x20','readdirSync','Message\x20d\x27erreur:','packageName','\x0a===\x206)\x20AJOUT\x20DU\x20DEX\x20À\x20L\x27APK\x20===','\x5ckeytool\x22\x20-genkey\x20-noprompt\x20-alias\x20key\x20-dname\x20\x22CN=','\x22\x20--ks-pass\x20pass:123456\x20--min-sdk-version\x20','src','length','7za.exe','generated','\x0aUsage:','Recreating\x20JAR\x20after\x20recompilation','✓\x20Ressources\x20liées\x20avec\x20succès','size','activity','.9.png','✓\x20Keystore\x20existant\x20réutilisé:\x20','\x0a===\x20✓\x20COMPILATION\x20RÉUSSIE\x20===','inherit','package\x20','\x20\x20PROJECT_PATH=/chemin/vers/projet\x20node\x20build_apk.js','/layout/','\x20--no-backup','aapt2.exe','\x0aOptions:','\x0a===\x20','7zip-bin','android','✓\x20Supprimé:\x20','Dossier\x20MyApp\x20trouvé\x20par\x20défaut:\x20','.apk','8637496EWrJdB','\x22\x20--auto-add-overlay\x20\x22','PROJECT_PATH','\x22\x20-o\x22','.webp','env','warn','message','⚠\x20Impossible\x20de\x20supprimer\x20','cmd.exe','Création\x20du\x20JAR','✓\x20APK\x20signé\x20avec\x20succès','--ignore-missing','ERREUR\x20lors\x20de\x20la\x20vérification\x20des\x20classes\x20dans\x20le\x20JAR:','rmSync','ERREUR:\x20app-config.json\x20non\x20trouvé\x20dans\x20le\x20projet!','toFixed','mkdirSync','\x0a===\x203)\x20COMPILATION\x20DE\x20JAVA\x20===','✓\x20DEX\x20ajouté\x20à\x20l\x27APK','\x22\x20--java\x20\x22','\x22\x20\x22','\x22\x20.','Argument\x20CLI\x20détecté:\x20','/compiledResources\x22\x20\x22','Aligning\x20APK','\x0aCause\x20probable:\x20les\x20sources\x20Java\x20n\x27ont\x20pas\x20été\x20trouvées/compilées\x20ou\x20le\x20package\x20des\x20.java\x20ne\x20correspond\x20pas\x20au\x20manifest.','⚠\x20JAR\x20non\x20trouvé,\x20création\x20DEX\x20vide','match','Classe\x20problématique\x20détectée:\x20','140155LTfgzW','node\x20\x22','compiledResources','34.0.0','\x0a✓\x20Vérification\x20projet:\x20tous\x20les\x20fichiers\x20minimaux\x20présents','timeout\x20/t\x201\x20/nobreak','\x20\x202.\x20AndroidManifest.xml\x20est-il\x20bien\x20formé?','exit','now','ignore','\x20-\x20que\x20`generate-resources.js`\x20n\x27a\x20pas\x20supprimé\x20des\x20fichiers\x20importants','includes','classes.jar','\x22\x20--lib\x20\x22','\x22\x20e\x20-y\x20\x22','3438453NuBLtQ','\x20-d\x20\x22','<resources>\x0a','hasJava','🔄\x20Restauration\x20des\x20fichiers\x20depuis\x20le\x20backup...\x0a','\x20-\x20que\x20les\x20.java\x20existent\x20dans\x20`src/`\x20avec\x20le\x20bon\x20`package`\x20en\x20tête','isDirectory','ERREUR:\x20D8\x20échoue\x20encore\x20après\x20tentative\x20de\x20correction\x20automatique.','\x0a===\x20Compile\x20','android-sdk','statSync','path','writeFileSync','--no-backup'];_0x2770=function(){return _0x2a39f6;};return _0x2770();}process[_0x434724(0x18e)][0x2]&&(projectDir=path[_0x434724(0x154)](process[_0x434724(0x18e)][0x2]),console[_0x434724(0x133)](_0x434724(0xce)+projectDir));!projectDir&&process[_0x434724(0x1c0)][_0x434724(0x1bd)]&&(projectDir=path['resolve'](process[_0x434724(0x1c0)]['PROJECT_PATH']),console[_0x434724(0x133)](_0x434724(0x10d)+projectDir));if(!projectDir){let searchDir=process[_0x434724(0x134)]();for(let i=0x0;i<0x5;i++){const configPath=path[_0x434724(0x15e)](searchDir,_0x434724(0x18a));if(fs[_0x434724(0x194)](configPath)){projectDir=searchDir,console[_0x434724(0x133)](_0x434724(0x176)+projectDir);break;}searchDir=path[_0x434724(0x11e)](searchDir);}}if(!projectDir){const defaultPaths=[path[_0x434724(0x15e)](__dirname,'..','..',_0x434724(0x15a)),path[_0x434724(0x154)](_0x434724(0x15a)),path[_0x434724(0x15e)](process['env']['USERPROFILE']||process[_0x434724(0x1c0)][_0x434724(0x120)]||'',_0x434724(0x15a))];for(const checkPath of defaultPaths){if(checkPath&&fs[_0x434724(0x194)](checkPath)&&fs[_0x434724(0x194)](path[_0x434724(0x15e)](checkPath,_0x434724(0x18a)))){projectDir=checkPath,console[_0x434724(0x133)](_0x434724(0x1b9)+projectDir);break;}}}(!projectDir||!fs[_0x434724(0x194)](projectDir))&&(console[_0x434724(0x175)](_0x434724(0xf9)),console[_0x434724(0x175)](_0x434724(0x1a6)),console[_0x434724(0x175)](_0x434724(0xf3)),console[_0x434724(0x175)](_0x434724(0x1b0)),console[_0x434724(0x175)](_0x434724(0x1b4)),process['exit'](0x1));const buildToolsDir=__dirname,skipBackup=process[_0x434724(0x18e)][_0x434724(0xe0)](_0x434724(0xf1)),restoreFromBackup=process[_0x434724(0x18e)][_0x434724(0xe0)]('--restore');if(restoreFromBackup){console[_0x434724(0x133)](_0x434724(0xe8));try{execSync(_0x434724(0xd6)+path[_0x434724(0x15e)](buildToolsDir,_0x434724(0x15b))+_0x434724(0xcc)+projectDir+'\x22\x20--restore',{'stdio':'inherit','shell':_0x434724(0x1c4)}),console[_0x434724(0x133)](_0x434724(0x140)),process['exit'](0x0);}catch(_0xadc543){console[_0x434724(0x175)]('ERREUR:\x20Restauration\x20échouée'),process['exit'](0x1);}}const configPath=path[_0x434724(0x15e)](projectDir,_0x434724(0x18a));!fs['existsSync'](configPath)&&(console[_0x434724(0x175)](_0x434724(0x1ca)),process[_0x434724(0xdc)](0x1));const appConfig=JSON[_0x434724(0x168)](fs[_0x434724(0x184)](configPath,_0x434724(0x160)));console['log'](_0x434724(0x150)+appConfig['appName']+'\x20v'+appConfig['appVersion']),console['log'](_0x434724(0x19b)+appConfig[_0x434724(0x19e)]),console['log'](_0x434724(0x19a)),console[_0x434724(0x133)]('Génération\x20des\x20ressources\x20dynamiques...');const backupOption=skipBackup?_0x434724(0x1b2):'';try{execSync(_0x434724(0xd6)+path['join'](buildToolsDir,_0x434724(0x15b))+_0x434724(0xcc)+projectDir+'\x22'+backupOption,{'stdio':_0x434724(0x1ae)});}catch(_0x5e91fa){console[_0x434724(0x175)]('ERREUR:\x20Génération\x20des\x20ressources\x20échouée'),process[_0x434724(0xdc)](0x1);}console[_0x434724(0x133)](''),console[_0x434724(0x133)]('Génération\x20des\x20icônes\x20pour\x20les\x20différentes\x20densités...');try{execSync(_0x434724(0xd6)+path[_0x434724(0x15e)](buildToolsDir,'generate-icons.js')+_0x434724(0xcc)+projectDir+'\x22',{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'});}catch(_0x3968d9){console['warn'](_0x434724(0x124)),console['warn']('Détail:\x20'+_0x3968d9[_0x434724(0x1c2)][_0x434724(0xf6)](0x0,0x64));}console[_0x434724(0x133)]('');const ignoreMissing=process['argv'][_0x434724(0xe0)](_0x434724(0x1c7)),failOnMissing=process[_0x434724(0x18e)][_0x434724(0xe0)](_0x434724(0x11b));function scanProjectForMissingFiles(_0x5d2306,_0xa02bf0){const _0x36d2bd=_0x434724,_0x3be1ff=_0xa02bf0&&Array[_0x36d2bd(0x186)](_0xa02bf0[_0x36d2bd(0x191)])?_0xa02bf0[_0x36d2bd(0x191)]:[_0x36d2bd(0xfd),_0x36d2bd(0x14d),_0x36d2bd(0x10e),'res/layout/activity_main.xml'],_0x404080=[];for(const _0x18634c of _0x3be1ff){const _0x30e345=path[_0x36d2bd(0x15e)](_0x5d2306,_0x18634c);if(!fs[_0x36d2bd(0x194)](_0x30e345))_0x404080[_0x36d2bd(0x159)](_0x18634c);}let _0x193365=![];const _0x484e3c=path[_0x36d2bd(0x15e)](_0x5d2306,_0x36d2bd(0x1a2));if(fs[_0x36d2bd(0x194)](_0x484e3c)){const _0x369405=[_0x484e3c];while(_0x369405['length']){const _0x4e96cc=_0x369405[_0x36d2bd(0x108)]();try{for(const _0x487636 of fs[_0x36d2bd(0x19c)](_0x4e96cc)){const _0x24647e=path['join'](_0x4e96cc,_0x487636),_0xd5649b=fs[_0x36d2bd(0xee)](_0x24647e);if(_0xd5649b[_0x36d2bd(0xea)]())_0x369405['push'](_0x24647e);else{if(_0x487636[_0x36d2bd(0x158)](_0x36d2bd(0x104))){_0x193365=!![];break;}}}}catch(_0x34190d){}if(_0x193365)break;}}return{'missingFiles':_0x404080,'hasJava':_0x193365};}const scanResult=scanProjectForMissingFiles(projectDir,appConfig);if(scanResult['missingFiles'][_0x434724(0x1a3)]>0x0){console[_0x434724(0x1c1)](_0x434724(0x14c));for(const m of scanResult[_0x434724(0x199)])console[_0x434724(0x1c1)]('\x20-\x20'+m);!ignoreMissing?failOnMissing?(console[_0x434724(0x175)](_0x434724(0x192)),process['exit'](0x1)):console['warn'](_0x434724(0x105)):console[_0x434724(0x133)](_0x434724(0x187));}else console['log'](_0x434724(0xd9));!scanResult[_0x434724(0xe7)]&&console[_0x434724(0x1c1)]('\x0a⚠\x20Aucune\x20source\x20Java\x20détectée\x20sous\x20`src/`\x20—\x20le\x20build\x20générera\x20des\x20stubs\x20ou\x20utilisera\x20les\x20fichiers\x20générés\x20par\x20aapt2\x20si\x20nécessaire.');const VENDOR_DIR=path[_0x434724(0x15e)](buildToolsDir,'vendor'),SDK=path[_0x434724(0x15e)](VENDOR_DIR,_0x434724(0x1b7),_0x434724(0xed)),JDK=path[_0x434724(0x15e)](VENDOR_DIR,_0x434724(0x1b7),_0x434724(0x18c),'bin'),AAPT2=path['join'](SDK,_0x434724(0x12d),_0x434724(0xd8),_0x434724(0x1b3)),ANDROID_JAR=path[_0x434724(0x15e)](SDK,_0x434724(0x17c),_0x434724(0x18d),_0x434724(0x16e)),D8=path[_0x434724(0x15e)](SDK,_0x434724(0x12d),'34.0.0','d8.bat'),ZIPALIGN=path['join'](SDK,_0x434724(0x12d),_0x434724(0xd8),'zipalign.exe'),APKSIGNER=path['join'](SDK,_0x434724(0x12d),_0x434724(0xd8),_0x434724(0x141)),SEVENZIP=path[_0x434724(0x15e)](VENDOR_DIR,_0x434724(0x1b6),_0x434724(0x16b),_0x434724(0x147),_0x434724(0x1a4)),requiredTools=[{'name':_0x434724(0x17d),'path':AAPT2},{'name':_0x434724(0x100),'path':ANDROID_JAR},{'name':'D8','path':D8},{'name':_0x434724(0x11f),'path':ZIPALIGN},{'name':_0x434724(0xf4),'path':APKSIGNER},{'name':_0x434724(0x107),'path':SEVENZIP},{'name':_0x434724(0x12f),'path':path[_0x434724(0x15e)](JDK,_0x434724(0x142))}];for(const tool of requiredTools){!fs[_0x434724(0x194)](tool[_0x434724(0xef)])&&(console['error']('\x0aERREUR:\x20'+tool[_0x434724(0x114)]+'\x20non\x20trouvé\x20à:\x20'+tool[_0x434724(0xef)]),console[_0x434724(0x175)]('Vérifiez\x20que\x20le\x20SDK\x20Android\x20et\x20JDK\x20sont\x20correctement\x20installés.'),process['exit'](0x1));}const BUILD_DIR=path[_0x434724(0x15e)](projectDir,'build'),SRC_DIR=path[_0x434724(0x15e)](projectDir,_0x434724(0x1a2)),RES_DIR=path[_0x434724(0x15e)](projectDir,_0x434724(0x183));function run(_0x16287b,_0x46898d,_0x38ea70=projectDir){const _0x23d300=_0x434724;console[_0x23d300(0x133)](_0x23d300(0x1b5)+_0x46898d+'\x20===');try{const _0x227266=execSync(_0x16287b,{'cwd':_0x38ea70,'stdio':'inherit','shell':_0x23d300(0x1c4)});return!![];}catch(_0x292b76){console[_0x23d300(0x175)]('ERREUR:\x20'+_0x46898d+_0x23d300(0x167)),process[_0x23d300(0xdc)](0x1);}}function copyFile(_0x2d0b97,_0x1a2d02){const _0x29604e=_0x434724,_0x58eaac=path['dirname'](_0x1a2d02);!fs[_0x29604e(0x194)](_0x58eaac)&&fs[_0x29604e(0x1cc)](_0x58eaac,{'recursive':!![]}),fs[_0x29604e(0x151)](_0x2d0b97,_0x1a2d02);}function removeDir(_0x2390dd){const _0x5ee191=_0x434724;fs['existsSync'](_0x2390dd)&&fs[_0x5ee191(0x1c9)](_0x2390dd,{'recursive':!![],'force':!![]});}function makeDir(_0xdb35af){const _0x5a4803=_0x434724;!fs[_0x5a4803(0x194)](_0xdb35af)&&fs['mkdirSync'](_0xdb35af,{'recursive':!![]});}const APK_NAME=path[_0x434724(0x15e)](projectDir,appConfig[_0x434724(0x10c)][_0x434724(0x165)](/\s+/g,'')+_0x434724(0x1ba));console['log']('Nettoyage\x20complet\x20de\x20tous\x20les\x20fichiers\x20générés...'),removeDir(BUILD_DIR);if(fs['existsSync'](APK_NAME))try{fs[_0x434724(0x129)](APK_NAME),console['log'](_0x434724(0x1b8)+APK_NAME);}catch(_0x263f97){console['warn'](_0x434724(0x1c3)+APK_NAME+_0x434724(0x16a));}const keystoreName=appConfig[_0x434724(0x10c)]['replace'](/\s+/g,'')+'.keystore';console[_0x434724(0x133)]('✓\x20Structure\x20de\x20build\x20recréée\x0a'),makeDir(BUILD_DIR),makeDir(BUILD_DIR+_0x434724(0x195)),makeDir(BUILD_DIR+_0x434724(0x106));const stylesDir=path['join'](projectDir,_0x434724(0x183),_0x434724(0x137)),stylesPath=path[_0x434724(0x15e)](stylesDir,_0x434724(0x102));try{!fs[_0x434724(0x194)](stylesDir)&&fs[_0x434724(0x1cc)](stylesDir,{'recursive':!![]});if(!fs[_0x434724(0x194)](stylesPath)){const defaultStyles='<?xml\x20version=\x221.0\x22\x20encoding=\x22utf-8\x22?>\x0a'+_0x434724(0xe6)+'\x20\x20<style\x20name=\x22AppTheme\x22\x20parent=\x22android:Theme.DeviceDefault.Light.DarkActionBar\x22>\x0a'+_0x434724(0x16d)+'</resources>\x0a';fs[_0x434724(0xf0)](stylesPath,defaultStyles,'utf8'),console['log']('✓\x20styles.xml\x20par\x20défaut\x20créé\x20pour\x20éviter\x20les\x20erreurs\x20de\x20thème');}}catch(_0x33533a){console['warn']('Avertissement:\x20impossible\x20de\x20créer\x20styles.xml\x20par\x20défaut:',_0x33533a[_0x434724(0x1c2)]);}console[_0x434724(0x133)](_0x434724(0x122));const layoutFiles=fs[_0x434724(0x194)](path[_0x434724(0x15e)](RES_DIR,_0x434724(0x110)))?fs[_0x434724(0x19c)](path['join'](RES_DIR,'layout'))[_0x434724(0x14e)](_0x4ac8de=>_0x4ac8de[_0x434724(0x158)](_0x434724(0x123))):[],valueFiles=fs[_0x434724(0x194)](path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137)))?fs[_0x434724(0x19c)](path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137)))['filter'](_0x72b0d5=>_0x72b0d5['endsWith']('.xml')):[],allResources=[];for(const file of layoutFiles){console[_0x434724(0x133)](_0x434724(0xec)+path['join'](RES_DIR,_0x434724(0x110),file)+_0x434724(0x163));const cmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+BUILD_DIR+_0x434724(0xcf)+path[_0x434724(0x15e)](RES_DIR,_0x434724(0x110),file)+'\x22';try{execSync(cmd,{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0xe69d6c){console['error'](_0x434724(0x11c)+file+_0x434724(0xf2));}allResources[_0x434724(0x159)](RES_DIR+_0x434724(0x1b1)+file);}for(const file of valueFiles){console['log'](_0x434724(0xec)+path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137),file)+'\x20===');const cmd='\x22'+AAPT2+_0x434724(0x169)+BUILD_DIR+_0x434724(0xcf)+path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137),file)+'\x22';try{execSync(cmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'});}catch(_0x3c23a7){console[_0x434724(0x175)](_0x434724(0x11c)+file+_0x434724(0xf2));}allResources[_0x434724(0x159)](RES_DIR+_0x434724(0x113)+file);}for(let mimapDir of fs[_0x434724(0x19c)](RES_DIR)[_0x434724(0x14e)](_0x4ba701=>_0x4ba701[_0x434724(0x178)]('mipmap'))){const mimapPath=path['join'](RES_DIR,mimapDir);if(fs[_0x434724(0xee)](mimapPath)['isDirectory']()){const files=fs[_0x434724(0x19c)](mimapPath)['filter'](_0x5463d8=>_0x5463d8[_0x434724(0x158)](_0x434724(0x111)));for(const file of files){console[_0x434724(0x133)](_0x434724(0xec)+path[_0x434724(0x15e)](mimapDir,file)+_0x434724(0x163));const cmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+BUILD_DIR+_0x434724(0xcf)+path['join'](mimapPath,file)+'\x22';try{execSync(cmd,{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0x1711e8){console['error']('Avertissement:\x20Compilation\x20de\x20'+file+_0x434724(0xf2));}}}}console[_0x434724(0x133)]('\x0a===\x20Compile\x20récursif\x20des\x20ressources\x20restantes\x20===');const resourceExtensions=[_0x434724(0x123),_0x434724(0x111),'.jpg',_0x434724(0x17b),_0x434724(0x1bf),_0x434724(0x1ab)];function _0x26e4(_0x17ec2e,_0x4b0668){const _0x27700a=_0x2770();return _0x26e4=function(_0x26e48b,_0x347703){_0x26e48b=_0x26e48b-0xcb;let _0x4a2334=_0x27700a[_0x26e48b];return _0x4a2334;},_0x26e4(_0x17ec2e,_0x4b0668);}function walkDirForResources(_0x582f10){const _0x31960e=_0x434724,_0x2eec54=[];if(!fs[_0x31960e(0x194)](_0x582f10))return _0x2eec54;const _0x3851cb=fs['readdirSync'](_0x582f10);for(const _0x86f03f of _0x3851cb){const _0x3ac5f9=path[_0x31960e(0x15e)](_0x582f10,_0x86f03f),_0x3493a1=fs['statSync'](_0x3ac5f9);if(_0x3493a1[_0x31960e(0xea)]())_0x2eec54[_0x31960e(0x159)](...walkDirForResources(_0x3ac5f9));else{const _0x3ac3c9=path[_0x31960e(0x125)](_0x86f03f)['toLowerCase']();(resourceExtensions[_0x31960e(0xe0)](_0x3ac3c9)||_0x86f03f['endsWith'](_0x31960e(0x1ab)))&&_0x2eec54[_0x31960e(0x159)](_0x3ac5f9);}}return _0x2eec54;}const allResFiles=walkDirForResources(RES_DIR);for(const resFile of allResFiles){console['log'](_0x434724(0xec)+resFile+_0x434724(0x163));const compileCmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0xd7))+_0x434724(0xcc)+resFile+'\x22';try{execSync(compileCmd,{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0x31a59c){console[_0x434724(0x1c1)]('Avertissement:\x20impossible\x20de\x20compiler\x20'+resFile+_0x434724(0x139));}}console['log'](_0x434724(0x101));const apkPath=path['join'](BUILD_DIR,_0x434724(0x144)),resourcesDir=path['join'](BUILD_DIR,'compiledResources'),generatedDir=path[_0x434724(0x154)](BUILD_DIR,_0x434724(0x1a5));if(!fs[_0x434724(0x194)](resourcesDir))fs['mkdirSync'](resourcesDir,{'recursive':!![]});if(!fs[_0x434724(0x194)](generatedDir))fs['mkdirSync'](generatedDir,{'recursive':!![]});const compiledFiles=fs[_0x434724(0x19c)](resourcesDir)[_0x434724(0x14e)](_0x4ed70c=>_0x4ed70c[_0x434724(0x158)]('.flat')||_0x4ed70c[_0x434724(0x158)]('.zip'))['map'](_0x313705=>path['join'](resourcesDir,_0x313705));console['log']('Création\x20de\x20la\x20structure\x20APK\x20et\x20génération\x20de\x20R.java...');try{let linkCmd;const manifestPath=path[_0x434724(0x15e)](projectDir,_0x434724(0xfd));if(compiledFiles[_0x434724(0x1a3)]>0x0){const compiledArgs=compiledFiles[_0x434724(0x16f)](_0x1a6cd6=>'\x22'+_0x1a6cd6+'\x22')[_0x434724(0x15e)]('\x20');linkCmd='\x22'+AAPT2+_0x434724(0x197)+apkPath+'\x22\x20-I\x20\x22'+ANDROID_JAR+'\x22\x20--manifest\x20\x22'+manifestPath+'\x22\x20--java\x20\x22'+generatedDir+'\x22\x20'+compiledArgs;}else linkCmd='\x22'+AAPT2+'\x22\x20link\x20-o\x20\x22'+apkPath+_0x434724(0x17a)+ANDROID_JAR+_0x434724(0x12b)+manifestPath+_0x434724(0xcb)+generatedDir+_0x434724(0x1bc)+path[_0x434724(0x15e)](projectDir,'res')+'\x22';console[_0x434724(0x133)](_0x434724(0x181)+linkCmd[_0x434724(0xf6)](0x0,0x64)+'...'),execSync(linkCmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'}),console[_0x434724(0x133)](_0x434724(0x1a8));}catch(_0x5bcb06){console['error'](_0x434724(0xfb)),console[_0x434724(0x175)](_0x434724(0x19d),_0x5bcb06[_0x434724(0x1c2)][_0x434724(0xf6)](0x0,0xc8)),process['exit'](0x1);}function findRJava(){const _0x1b4a4a=[];try{const _0x29caad=_0xcf5dad=>{const _0x58e361=_0x26e4,_0x49b06e=fs['readdirSync'](_0xcf5dad);for(const _0x528c55 of _0x49b06e){const _0x5cf883=path[_0x58e361(0x15e)](_0xcf5dad,_0x528c55),_0x1af0f5=fs[_0x58e361(0xee)](_0x5cf883);if(_0x1af0f5['isDirectory']())_0x29caad(_0x5cf883);else _0x528c55===_0x58e361(0x196)&&_0x1b4a4a[_0x58e361(0x159)](_0x5cf883);}};_0x29caad(generatedDir);}catch(_0x2b4caf){}return _0x1b4a4a;}const rJavaFiles=findRJava();rJavaFiles['length']===0x0&&(console[_0x434724(0x175)](_0x434724(0x15f)),console[_0x434724(0x175)](_0x434724(0x132)+generatedDir),console[_0x434724(0x175)]('Cause\x20possible:\x20fichiers\x20res/\x20mal\x20structurés,\x20XML\x20invalides,\x20ou\x20manifest\x20corrompu.'),console['error'](_0x434724(0x18f)),console[_0x434724(0x175)](_0x434724(0x182)),console[_0x434724(0x175)](_0x434724(0xdb)),console[_0x434724(0x175)](_0x434724(0x14a)),console[_0x434724(0x175)]('\x0aBuild\x20échouée\x20-\x20APK\x20n\x27est\x20pas\x20généré.'),process[_0x434724(0xdc)](0x1));console[_0x434724(0x133)](_0x434724(0x128)+rJavaFiles[0x0]),console[_0x434724(0x133)](_0x434724(0x1cd));const javaFiles=[],srcPath=SRC_DIR,findJavaFiles=_0x57b820=>{const _0x5b0f2c=_0x434724,_0x28f449=fs['readdirSync'](_0x57b820);for(const _0x5ab7b3 of _0x28f449){const _0x156ac2=path[_0x5b0f2c(0x15e)](_0x57b820,_0x5ab7b3),_0x1ee80e=fs[_0x5b0f2c(0xee)](_0x156ac2);if(_0x1ee80e[_0x5b0f2c(0xea)]())findJavaFiles(_0x156ac2);else _0x5ab7b3[_0x5b0f2c(0x158)](_0x5b0f2c(0x104))&&javaFiles[_0x5b0f2c(0x159)](_0x156ac2);}};fs[_0x434724(0x194)](srcPath)&&findJavaFiles(srcPath);const generatedJavaDir=path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x1a5));if(fs['existsSync'](generatedJavaDir)){const findGeneratedJavaFiles=_0x223307=>{const _0x44058f=_0x434724,_0x315613=[],_0x84a0b=fs[_0x44058f(0x19c)](_0x223307);for(const _0x5e1db5 of _0x84a0b){const _0xb52772=path['join'](_0x223307,_0x5e1db5),_0x1f8b91=fs[_0x44058f(0xee)](_0xb52772);if(_0x1f8b91['isDirectory']())_0x315613[_0x44058f(0x159)](...findGeneratedJavaFiles(_0xb52772));else _0x5e1db5['endsWith'](_0x44058f(0x104))&&_0x315613[_0x44058f(0x159)](_0xb52772);}return _0x315613;};try{const genFiles=findGeneratedJavaFiles(generatedJavaDir);genFiles[_0x434724(0x1a3)]>0x0&&(javaFiles['push'](...genFiles),console['log']('✓\x20'+genFiles[_0x434724(0x1a3)]+'\x20fichiers\x20Java\x20générés\x20par\x20aapt2\x20ajoutés\x20à\x20la\x20compilation'));}catch(_0x5e78cf){console['warn'](_0x434724(0x118),_0x5e78cf['message']);}}function ensureActivityStubs(){const _0x13047a=_0x434724;try{const _0x359096=path['join'](projectDir,'AndroidManifest.xml');if(!fs[_0x13047a(0x194)](_0x359096))return;const _0xe8bf08=fs[_0x13047a(0x184)](_0x359096,'utf8'),_0xe2a6f=_0xe8bf08[_0x13047a(0xd3)](/<manifest[^>]*\spackage\s*=\s*['"]([^'"]+)['"]/),_0x5f593c=_0xe2a6f?_0xe2a6f[0x1]:null,_0x365efa=/<activity[^>]*android:name\s*=\s*['\"]([^'\"]+)['\"]/g;let _0x3024c0;const _0x521059=new Set();while((_0x3024c0=_0x365efa[_0x13047a(0xff)](_0xe8bf08))!==null){_0x521059['add'](_0x3024c0[0x1]);}if(_0x521059[_0x13047a(0x1a9)]===0x0)return;const _0x376b1d=path['join'](BUILD_DIR,_0x13047a(0x1a5));if(!fs[_0x13047a(0x194)](_0x376b1d))fs['mkdirSync'](_0x376b1d,{'recursive':!![]});for(const _0x2495cd of _0x521059){let _0x586109=_0x2495cd;if(_0x2495cd[_0x13047a(0x178)]('.')){if(_0x5f593c)_0x586109=_0x5f593c+_0x2495cd;}else!_0x2495cd['includes']('.')&&_0x5f593c&&(_0x586109=_0x5f593c+'.'+_0x2495cd);const _0x32a838=_0x586109[_0x13047a(0x11a)]('.'),_0x35d09a=_0x32a838[_0x13047a(0x108)](),_0x5b2bd7=_0x32a838[_0x13047a(0x15e)](path[_0x13047a(0xf5)]),_0xbf70fd=path[_0x13047a(0x15e)](_0x376b1d,_0x5b2bd7);if(!fs[_0x13047a(0x194)](_0xbf70fd))fs[_0x13047a(0x1cc)](_0xbf70fd,{'recursive':!![]});const _0x5d7ede=path['join'](_0xbf70fd,_0x35d09a+_0x13047a(0x104));if(!fs['existsSync'](_0x5d7ede)){const _0x412a04=_0x13047a(0x1af)+_0x32a838[_0x13047a(0x15e)]('.')+_0x13047a(0x14f)+_0x35d09a+_0x13047a(0x179);try{fs[_0x13047a(0xf0)](_0x5d7ede,_0x412a04,_0x13047a(0x13b)),console[_0x13047a(0x133)](_0x13047a(0x117)+_0x5d7ede);}catch(_0x2f7fea){console[_0x13047a(0x1c1)](_0x13047a(0x13a),_0x2f7fea[_0x13047a(0x1c2)]);}}javaFiles[_0x13047a(0x159)](_0x5d7ede);}}catch(_0x5caca6){console[_0x13047a(0x1c1)](_0x13047a(0x15c),_0x5caca6[_0x13047a(0x1c2)]);}}javaFiles[_0x434724(0x1a3)]===0x0&&(console[_0x434724(0x1c1)](_0x434724(0x10f)),ensureActivityStubs());if(javaFiles[_0x434724(0x1a3)]===0x0)console[_0x434724(0x1c1)](_0x434724(0x13e));else{const classPath='\x22'+ANDROID_JAR+'\x22',javaFilesStr=javaFiles[_0x434724(0x16f)](_0x58ce53=>'\x22'+_0x58ce53+'\x22')[_0x434724(0x15e)]('\x20'),compileCmd='\x22'+JDK+_0x434724(0x193)+classPath+_0x434724(0xe5)+path['join'](BUILD_DIR,_0x434724(0x190))+'\x22\x20'+javaFilesStr;run(compileCmd,_0x434724(0x12a));}console[_0x434724(0x133)](_0x434724(0x164));const classesDir=path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190)),jarPath=path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0xe1));if(fs[_0x434724(0x194)](classesDir)){const jarCmd='\x22'+JDK+'\x5cjar\x22\x20cvf\x20\x22'+jarPath+_0x434724(0x145)+classesDir+_0x434724(0xcd);run(jarCmd,_0x434724(0x1c5));}else console[_0x434724(0x1c1)](_0x434724(0x10b));function checkManifestClassesPresentInJar(){const _0x5bdce2=_0x434724;try{!fs[_0x5bdce2(0x194)](jarPath)&&(console[_0x5bdce2(0x175)](_0x5bdce2(0x17e)),process[_0x5bdce2(0xdc)](0x1));const _0x1805ca=path[_0x5bdce2(0x15e)](projectDir,_0x5bdce2(0xfd));if(!fs[_0x5bdce2(0x194)](_0x1805ca)){console[_0x5bdce2(0x1c1)](_0x5bdce2(0x174));return;}const _0x5d0afb=fs['readFileSync'](_0x1805ca,_0x5bdce2(0x13b)),_0x46ecf7=_0x5d0afb[_0x5bdce2(0xd3)](/<manifest[^>]*\spackage\s*=\s*['"]([^'\"]+)['"]/),_0x5872f8=_0x46ecf7?_0x46ecf7[0x1]:appConfig&&appConfig[_0x5bdce2(0x19e)]||null,_0x35654c=/<activity[^>]*android:name\s*=\s*['\"]([^'\"]+)['\"]/g;let _0x1ecb4d;const _0x5d7d9a=[];while((_0x1ecb4d=_0x35654c[_0x5bdce2(0xff)](_0x5d0afb))!==null){let _0x564936=_0x1ecb4d[0x1];if(_0x564936[_0x5bdce2(0x178)]('.')){if(_0x5872f8)_0x564936=_0x5872f8+_0x564936;}else!_0x564936[_0x5bdce2(0xe0)]('.')&&_0x5872f8&&(_0x564936=_0x5872f8+'.'+_0x564936);_0x5d7d9a['push'](_0x564936);}if(_0x5d7d9a[_0x5bdce2(0x1a3)]===0x0){console[_0x5bdce2(0x133)](_0x5bdce2(0x172));return;}const _0x29f806=execSync('\x22'+JDK+_0x5bdce2(0x14b)+jarPath+'\x22',{'encoding':_0x5bdce2(0x13b),'stdio':[_0x5bdce2(0x103),_0x5bdce2(0x103),_0x5bdce2(0xde)]}),_0x34b2a3=[];for(const _0xb12943 of _0x5d7d9a){const _0x3e4a0b=_0xb12943[_0x5bdce2(0x165)](/\./g,'/')+'.class';!_0x29f806[_0x5bdce2(0xe0)](_0x3e4a0b)&&_0x34b2a3['push']({'activity':_0xb12943,'expected':_0x3e4a0b});}if(_0x34b2a3['length']>0x0){console[_0x5bdce2(0x175)](_0x5bdce2(0x170));for(const _0x2a4340 of _0x34b2a3){console[_0x5bdce2(0x175)]('\x20-\x20'+_0x2a4340[_0x5bdce2(0x1aa)]+_0x5bdce2(0xf7)+_0x2a4340['expected']+')');}console[_0x5bdce2(0x175)](_0x5bdce2(0xd1)),console['error']('Vérifiez:'),console['error'](_0x5bdce2(0xe9)),console[_0x5bdce2(0x175)](_0x5bdce2(0xdf)),console['error'](_0x5bdce2(0x148)),process[_0x5bdce2(0xdc)](0x1);}console[_0x5bdce2(0x133)](_0x5bdce2(0x17f));}catch(_0x5ca2ca){console[_0x5bdce2(0x175)](_0x5bdce2(0x1c8),_0x5ca2ca['message']),process[_0x5bdce2(0xdc)](0x1);}}checkManifestClassesPresentInJar(),console[_0x434724(0x133)](_0x434724(0x138));const dexPath=path['join'](BUILD_DIR,'classes.dex');if(fs[_0x434724(0x194)](jarPath)){const d8Cmd='\x22'+D8+_0x434724(0xe2)+ANDROID_JAR+_0x434724(0x185)+BUILD_DIR+_0x434724(0xcc)+jarPath+'\x22';console[_0x434724(0x133)](_0x434724(0x131));try{execSync(d8Cmd,{'stdio':'inherit','shell':_0x434724(0x1c4)}),console['log']('✓\x20Conversion\x20DEX\x20réussie');}catch(_0x617dee){const msg=_0x617dee&&_0x617dee['message']?_0x617dee[_0x434724(0x1c2)]:String(_0x617dee),classMatch=msg['match'](/([^:\s]+\.jar):([^:\s]+\.class)/);let problematicClassEntry=null;if(classMatch)problematicClassEntry=classMatch[0x2][_0x434724(0x165)](/\\\\/g,'/');else{const alt=msg[_0x434724(0xd3)](/(com\/[\w\/-]*\$?[^\s:]*\.class)/);if(alt)problematicClassEntry=alt[0x1];}console[_0x434724(0x175)]('\x0aERREUR:\x20D8\x20a\x20échoué\x20lors\x20de\x20la\x20conversion\x20en\x20DEX.');if(problematicClassEntry){console[_0x434724(0x175)](_0x434724(0xd4)+problematicClassEntry);try{const tmpDir=path['join'](BUILD_DIR,_0x434724(0x130));if(!fs['existsSync'](tmpDir))fs[_0x434724(0x1cc)](tmpDir,{'recursive':!![]});const extractCmd='\x22'+SEVENZIP+_0x434724(0xe3)+jarPath+_0x434724(0xcc)+problematicClassEntry+_0x434724(0x1be)+tmpDir+'\x22';try{execSync(extractCmd,{'stdio':'inherit','shell':'cmd.exe'});}catch(_0x38cae8){try{execSync('\x22'+SEVENZIP+'\x22\x20e\x20-y\x20\x22'+jarPath+'\x22\x20\x22*'+path['basename'](problematicClassEntry)+_0x434724(0x1be)+tmpDir+'\x22',{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0x5d9910){}}const extracted=path['join'](tmpDir,path[_0x434724(0x127)](problematicClassEntry));if(fs[_0x434724(0x194)](extracted)){console[_0x434724(0x133)]('\x0a✓\x20Classe\x20extraite\x20pour\x20diagnostic:\x20'+extracted);try{const javapCmd='\x22'+JDK+_0x434724(0x135)+extracted+'\x22';console[_0x434724(0x133)](_0x434724(0x18b)),execSync(javapCmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'}),console[_0x434724(0x133)]('---\x20fin\x20javap\x20---\x0a');}catch(_0x4a1229){console[_0x434724(0x1c1)]('Impossible\x20d\x27exécuter\x20javap\x20sur\x20la\x20classe\x20extraite:',_0x4a1229[_0x434724(0x1c2)]);}}else console[_0x434724(0x1c1)](_0x434724(0x13f));}catch(_0x3fe905){console[_0x434724(0x1c1)]('Erreur\x20durant\x20le\x20diagnostic\x20D8:',_0x3fe905[_0x434724(0x1c2)]);}}try{if(problematicClassEntry){const classPathNoDollar=problematicClassEntry[_0x434724(0x11a)]('$')[0x0],javaPath=path[_0x434724(0x15e)](projectDir,_0x434724(0x1a2),classPathNoDollar[_0x434724(0x165)](/\//g,path[_0x434724(0xf5)])+'.java');if(fs[_0x434724(0x194)](javaPath)){const content=fs[_0x434724(0x184)](javaPath,_0x434724(0x13b));if(content[_0x434724(0xe0)](_0x434724(0x180))){console['log']('\x0aTentative:\x20fichier\x20source\x20généré\x20détecté.\x20Suppression\x20et\x20recompilation.'),fs['unlinkSync'](javaPath),removeDir(path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190))),makeDir(path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190)));const javaFilesNow=[],findJavaFilesLocal=_0x537323=>{const _0x311c27=_0x434724,_0x41719a=fs[_0x311c27(0x19c)](_0x537323);for(const _0x5bffd2 of _0x41719a){const _0x523209=path['join'](_0x537323,_0x5bffd2),_0x208ab6=fs['statSync'](_0x523209);if(_0x208ab6[_0x311c27(0xea)]())findJavaFilesLocal(_0x523209);else{if(_0x5bffd2[_0x311c27(0x158)](_0x311c27(0x104)))javaFilesNow[_0x311c27(0x159)](_0x523209);}}};if(fs[_0x434724(0x194)](srcPath))findJavaFilesLocal(srcPath);if(fs[_0x434724(0x194)](path['join'](BUILD_DIR,_0x434724(0x1a5))))findJavaFilesLocal(path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x1a5)));if(javaFilesNow[_0x434724(0x1a3)]>0x0){const classPathArg='\x22'+ANDROID_JAR+'\x22',javaFilesStr2=javaFilesNow['map'](_0x351155=>'\x22'+_0x351155+'\x22')[_0x434724(0x15e)]('\x20'),compileCmd2='\x22'+JDK+_0x434724(0x193)+classPathArg+'\x20-d\x20\x22'+path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190))+'\x22\x20'+javaFilesStr2;run(compileCmd2,_0x434724(0x13c));const jarCmd2='\x22'+JDK+_0x434724(0x121)+jarPath+_0x434724(0x145)+classesDir+_0x434724(0xcd);run(jarCmd2,_0x434724(0x1a7));try{execSync(d8Cmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'}),console[_0x434724(0x133)](_0x434724(0x161));}catch(_0x81de93){console[_0x434724(0x175)](_0x434724(0xeb)),process[_0x434724(0xdc)](0x1);}}else console[_0x434724(0x1c1)](_0x434724(0x112)),process[_0x434724(0xdc)](0x1);}else console['warn'](_0x434724(0x115));}else console[_0x434724(0x1c1)]('Fichier\x20source\x20Java\x20correspondant\x20introuvable:\x20'+javaPath);}}catch(_0x398e81){console[_0x434724(0x1c1)](_0x434724(0x119),_0x398e81[_0x434724(0x1c2)]);}process[_0x434724(0xdc)](0x1);}}else console[_0x434724(0x1c1)](_0x434724(0xd2));console[_0x434724(0x133)](_0x434724(0x19f));try{if(fs[_0x434724(0x194)](dexPath)){const unsignedApkFull=path['resolve'](BUILD_DIR,path[_0x434724(0x127)](apkPath)),classesDexFull=path[_0x434724(0x154)](dexPath),addDexCmd='\x22'+SEVENZIP+_0x434724(0x109)+unsignedApkFull+'\x22\x20\x22'+classesDexFull+'\x22';execSync(addDexCmd,{'cwd':path[_0x434724(0x154)](BUILD_DIR),'stdio':_0x434724(0x1ae),'shell':'cmd.exe','timeout':0xea60}),console[_0x434724(0x133)](_0x434724(0x1ce));}else console[_0x434724(0x1c1)](_0x434724(0x153));}catch(_0x3b25b5){console[_0x434724(0x175)]('ERREUR:\x20Ajout\x20du\x20DEX\x20échoué:\x20'+_0x3b25b5[_0x434724(0x1c2)]),process['exit'](0x1);}console['log']('\x0a===\x207)\x20ALIGNEMENT\x20DE\x20L\x27APK\x20===');const alignedApkPath=path['join'](BUILD_DIR,_0x434724(0x171)),unsignedApkPath=path['join'](BUILD_DIR,_0x434724(0x162));fs['existsSync'](apkPath)&&fs[_0x434724(0x11d)](apkPath,unsignedApkPath);try{run('\x22'+ZIPALIGN+_0x434724(0x189)+unsignedApkPath+_0x434724(0xcc)+alignedApkPath+'\x22',_0x434724(0xd0));}catch(_0x184d45){console[_0x434724(0x1c1)](_0x434724(0x188)),fs['copyFileSync'](unsignedApkPath,alignedApkPath);}console[_0x434724(0x133)]('\x0a===\x208)\x20SIGNATURE\x20DE\x20L\x27APK\x20===');const keystorePath=path['join'](projectDir,keystoreName);if(!fs[_0x434724(0x194)](keystorePath)){console[_0x434724(0x133)]('Création\x20du\x20keystore...');const keygenCmd='\x22'+JDK+_0x434724(0x1a0)+appConfig['appName']+_0x434724(0xfa)+keystorePath+_0x434724(0xfc);try{execSync(keygenCmd,{'cwd':projectDir,'stdio':'pipe','shell':_0x434724(0x1c4)}),console[_0x434724(0x133)](_0x434724(0x13d));}catch(_0x3137c8){console[_0x434724(0x175)]('ERREUR:\x20Impossible\x20de\x20créer\x20le\x20keystore'),process[_0x434724(0xdc)](0x1);}}else console[_0x434724(0x133)](_0x434724(0x1ac)+keystorePath);if(fs[_0x434724(0x194)](alignedApkPath)){const minSdkVersion=appConfig[_0x434724(0x12c)]||0x15,signCmd='\x22'+APKSIGNER+_0x434724(0x146)+keystorePath+_0x434724(0x1a1)+minSdkVersion+_0x434724(0x177)+APK_NAME+'\x22\x20\x22'+alignedApkPath+'\x22';console[_0x434724(0x133)](_0x434724(0x15d)),console[_0x434724(0x133)]('Commande:\x20'+signCmd),console[_0x434724(0x133)](_0x434724(0x136)+APK_NAME);try{const output=execSync(signCmd,{'cwd':projectDir,'stdio':_0x434724(0x103),'shell':'cmd.exe','encoding':'utf-8'});console[_0x434724(0x133)](_0x434724(0x1c6));}catch(_0x21ae02){console['log'](_0x434724(0x126)),console[_0x434724(0x133)]('Détails:\x20'+_0x21ae02[_0x434724(0x1c2)][_0x434724(0xf6)](0x0,0xc8));}const maxWait=0xbb8,startWait=Date['now']();while(!fs['existsSync'](APK_NAME)&&Date[_0x434724(0xdd)]()-startWait<maxWait){require(_0x434724(0x156))[_0x434724(0x149)](_0x434724(0xda),{'shell':_0x434724(0x1c4)});}if(fs[_0x434724(0x194)](APK_NAME)){const stats=fs[_0x434724(0xee)](APK_NAME),endTime=Date[_0x434724(0xdd)](),buildTime=((endTime-startTime)/0x3e8)[_0x434724(0x1cb)](0x2);console[_0x434724(0x133)](_0x434724(0x1ad)),console[_0x434724(0x133)](_0x434724(0x116)+APK_NAME),console[_0x434724(0x133)]('Taille:\x20'+stats[_0x434724(0x1a9)]+_0x434724(0xfe)),console['log']('Temps\x20de\x20build:\x20'+buildTime+'s'),console[_0x434724(0x133)](_0x434724(0x198));}else console['error'](_0x434724(0x12e)),console[_0x434724(0x175)](_0x434724(0x157)+APK_NAME),console['error']('Fichiers\x20dans\x20le\x20répertoire:',fs[_0x434724(0x19c)](projectDir)[_0x434724(0x14e)](_0x4ed6f2=>_0x4ed6f2[_0x434724(0x158)](_0x434724(0x1ba)))),process[_0x434724(0xdc)](0x1);}else console[_0x434724(0x175)](_0x434724(0x16c)),console['error'](_0x434724(0x10a)+alignedApkPath),process[_0x434724(0xdc)](0x1);
|
|
3
|
+
const a0_0x16d1d1=a0_0x22b6;(function(_0x58c2b0,_0x14dd59){const _0x5117eb=a0_0x22b6,_0x7cb952=_0x58c2b0();while(!![]){try{const _0x244a15=-parseInt(_0x5117eb(0x228))/0x1*(parseInt(_0x5117eb(0x2c9))/0x2)+-parseInt(_0x5117eb(0x2b1))/0x3+parseInt(_0x5117eb(0x1e7))/0x4+parseInt(_0x5117eb(0x2ad))/0x5+-parseInt(_0x5117eb(0x28c))/0x6*(parseInt(_0x5117eb(0x2a4))/0x7)+-parseInt(_0x5117eb(0x24c))/0x8+parseInt(_0x5117eb(0x218))/0x9;if(_0x244a15===_0x14dd59)break;else _0x7cb952['push'](_0x7cb952['shift']());}catch(_0x4fb313){_0x7cb952['push'](_0x7cb952['shift']());}}}(a0_0x4038,0x2f806));const fs=require('fs'),path=require(a0_0x16d1d1(0x2c8)),{execSync,spawnSync}=require('child_process'),startTime=Date[a0_0x16d1d1(0x235)]();let projectDir=null;process[a0_0x16d1d1(0x28a)][0x2]&&(projectDir=path[a0_0x16d1d1(0x2c6)](process['argv'][0x2]),console['log']('Argument\x20CLI\x20détecté:\x20'+projectDir));!projectDir&&process['env'][a0_0x16d1d1(0x253)]&&(projectDir=path[a0_0x16d1d1(0x2c6)](process[a0_0x16d1d1(0x1c5)][a0_0x16d1d1(0x253)]),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x21c)+projectDir));if(!projectDir){let searchDir=process[a0_0x16d1d1(0x285)]();for(let i=0x0;i<0x5;i++){const configPath=path[a0_0x16d1d1(0x28d)](searchDir,'app-config.json');if(fs['existsSync'](configPath)){projectDir=searchDir,console['log'](a0_0x16d1d1(0x274)+projectDir);break;}searchDir=path[a0_0x16d1d1(0x201)](searchDir);}}if(!projectDir){const defaultPaths=[path[a0_0x16d1d1(0x28d)](__dirname,'..','..','MyApp'),path[a0_0x16d1d1(0x2c6)]('MyApp'),path[a0_0x16d1d1(0x28d)](process[a0_0x16d1d1(0x1c5)]['USERPROFILE']||process['env'][a0_0x16d1d1(0x24b)]||'',a0_0x16d1d1(0x238))];for(const checkPath of defaultPaths){if(checkPath&&fs[a0_0x16d1d1(0x1de)](checkPath)&&fs[a0_0x16d1d1(0x1de)](path[a0_0x16d1d1(0x28d)](checkPath,a0_0x16d1d1(0x28f)))){projectDir=checkPath,console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x263)+projectDir);break;}}}(!projectDir||!fs['existsSync'](projectDir))&&(console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2ea)),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2bf)),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x254)),console['error'](a0_0x16d1d1(0x1cb)),console['error']('\x0aOptions:'),process[a0_0x16d1d1(0x1ef)](0x1));const buildToolsDir=__dirname,skipBackup=process[a0_0x16d1d1(0x28a)][a0_0x16d1d1(0x20f)]('--no-backup'),restoreFromBackup=process[a0_0x16d1d1(0x28a)][a0_0x16d1d1(0x20f)]('--restore');if(restoreFromBackup){console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x251));try{execSync(a0_0x16d1d1(0x27e)+path[a0_0x16d1d1(0x28d)](buildToolsDir,a0_0x16d1d1(0x1c7))+a0_0x16d1d1(0x20a)+projectDir+a0_0x16d1d1(0x224),{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)}),console['log'](a0_0x16d1d1(0x215)),process[a0_0x16d1d1(0x1ef)](0x0);}catch(a0_0x207960){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2b4)),process[a0_0x16d1d1(0x1ef)](0x1);}}const configPath=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x28f));!fs[a0_0x16d1d1(0x1de)](configPath)&&(console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x268)),process[a0_0x16d1d1(0x1ef)](0x1));const appConfig=JSON['parse'](fs[a0_0x16d1d1(0x1b0)](configPath,'utf-8'));console[a0_0x16d1d1(0x2b2)]('Compilation\x20de:\x20'+appConfig[a0_0x16d1d1(0x277)]+'\x20v'+appConfig[a0_0x16d1d1(0x294)]),console['log'](a0_0x16d1d1(0x2b8)+appConfig[a0_0x16d1d1(0x1d6)]),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x243));function extractClassesFromAARs(_0x5a8665){const _0x407a28=a0_0x16d1d1,_0x46f836=path[_0x407a28(0x28d)](_0x5a8665,_0x407a28(0x241)),_0x22d817=path[_0x407a28(0x28d)](_0x5a8665,_0x407a28(0x1c8));if(!fs[_0x407a28(0x1de)](_0x46f836))return console['log'](_0x407a28(0x281)),[];!fs['existsSync'](_0x22d817)&&fs[_0x407a28(0x2d0)](_0x22d817,{'recursive':!![]});let _0x20ed87=null;const _0x410a46=process[_0x407a28(0x1af)],_0x47d607=process[_0x407a28(0x2a5)];if(_0x410a46===_0x407a28(0x220)){const _0x1d524b=_0x47d607===_0x407a28(0x2b5)?'x64':_0x47d607==='arm64'?_0x407a28(0x1b3):_0x407a28(0x2da);_0x20ed87=path['join'](buildToolsDir,_0x407a28(0x1ec),_0x407a28(0x1bf),_0x407a28(0x289),_0x1d524b,_0x407a28(0x1c6));}else{if(_0x410a46==='linux')_0x20ed87=path[_0x407a28(0x28d)](buildToolsDir,_0x407a28(0x1ec),_0x407a28(0x1bf),'linux',_0x407a28(0x2b5),_0x407a28(0x296));else _0x410a46===_0x407a28(0x2c4)&&(_0x20ed87=path[_0x407a28(0x28d)](buildToolsDir,_0x407a28(0x1ec),_0x407a28(0x1bf),_0x407a28(0x256),_0x407a28(0x2b5),_0x407a28(0x296)));}if(!_0x20ed87||!fs[_0x407a28(0x1de)](_0x20ed87))return console[_0x407a28(0x258)](_0x407a28(0x248)+_0x410a46+'\x20'+_0x47d607+_0x407a28(0x221)+_0x20ed87),[];const _0x10e937=[];console[_0x407a28(0x2b2)]('\x0a📦\x20Extraction\x20des\x20classes.jar\x20depuis\x20les\x20AARs...');try{const _0xc0d002=fs[_0x407a28(0x22f)](_0x46f836);for(const _0x4e7844 of _0xc0d002){if(_0x4e7844['endsWith'](_0x407a28(0x2a2))){const _0x22f679=path[_0x407a28(0x28d)](_0x46f836,_0x4e7844),_0x5e8a5d=_0x4e7844[_0x407a28(0x2c0)]('.aar',_0x407a28(0x1df)),_0x5485b3=path[_0x407a28(0x28d)](_0x22d817,_0x5e8a5d);if(fs[_0x407a28(0x1de)](_0x5485b3)){_0x10e937[_0x407a28(0x287)](_0x5485b3),console[_0x407a28(0x2b2)](_0x407a28(0x2c5)+_0x5e8a5d);continue;}const _0x5577f7=path['join'](_0x22d817,_0x407a28(0x1fb)+Date[_0x407a28(0x235)]()+'_'+Math['random']()['toString'](0x24)[_0x407a28(0x222)](0x2,0x9));try{fs[_0x407a28(0x2d0)](_0x5577f7,{'recursive':!![]});const _0x391bb7='\x22'+_0x20ed87+'\x22\x20x\x20\x22'+_0x22f679+'\x22\x20-o\x22'+_0x5577f7+'\x22';console[_0x407a28(0x2b2)](_0x407a28(0x206)+_0x4e7844+_0x407a28(0x1bb)),execSync(_0x391bb7,{'stdio':_0x407a28(0x1d2),'shell':'cmd.exe'});const _0x54c286=path[_0x407a28(0x28d)](_0x5577f7,_0x407a28(0x227));fs[_0x407a28(0x1de)](_0x54c286)?(fs[_0x407a28(0x286)](_0x54c286,_0x5485b3),_0x10e937['push'](_0x5485b3),console['log'](_0x407a28(0x278)+_0x4e7844+'\x20->\x20'+_0x5e8a5d)):console[_0x407a28(0x258)](_0x407a28(0x207)+_0x4e7844);try{fs['rmSync'](_0x5577f7,{'recursive':!![],'force':!![]});}catch(_0xf4df1c){}}catch(_0x70f22e){console['warn']('⚠\x20Impossible\x20d\x27extraire\x20'+_0x4e7844+':\x20'+_0x70f22e[_0x407a28(0x2ce)]);try{fs[_0x407a28(0x298)](_0x5577f7,{'recursive':!![],'force':!![]});}catch(_0x18c961){}}}}}catch(_0x2d0f33){console[_0x407a28(0x258)]('⚠\x20Erreur\x20lors\x20de\x20la\x20lecture\x20du\x20répertoire\x20libs:\x20'+_0x2d0f33[_0x407a28(0x2ce)]);}return _0x10e937;}console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2aa));const backupOption=skipBackup?a0_0x16d1d1(0x1b4):'';try{execSync(a0_0x16d1d1(0x27e)+path[a0_0x16d1d1(0x28d)](buildToolsDir,a0_0x16d1d1(0x1c7))+a0_0x16d1d1(0x20a)+projectDir+'\x22'+backupOption,{'stdio':a0_0x16d1d1(0x25f)});}catch(a0_0x233fc8){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x292)),process[a0_0x16d1d1(0x1ef)](0x1);}console[a0_0x16d1d1(0x2b2)](''),console[a0_0x16d1d1(0x2b2)]('Génération\x20des\x20icônes\x20pour\x20les\x20différentes\x20densités...');const forceIcons=process[a0_0x16d1d1(0x28a)][a0_0x16d1d1(0x20f)](a0_0x16d1d1(0x1e4));function iconsExistInProject(_0x21c539){const _0x5e2f34=a0_0x16d1d1,_0x16c617=[path['join'](_0x21c539,_0x5e2f34(0x202),_0x5e2f34(0x1f7),'ic_launcher.xml'),path[_0x5e2f34(0x28d)](_0x21c539,_0x5e2f34(0x202),_0x5e2f34(0x1ce),_0x5e2f34(0x1f2)),path['join'](_0x21c539,_0x5e2f34(0x202),_0x5e2f34(0x239),_0x5e2f34(0x1f2)),path[_0x5e2f34(0x28d)](_0x21c539,_0x5e2f34(0x202),_0x5e2f34(0x20c),_0x5e2f34(0x1f2)),path[_0x5e2f34(0x28d)](_0x21c539,_0x5e2f34(0x202),_0x5e2f34(0x255),_0x5e2f34(0x1f2)),path[_0x5e2f34(0x28d)](_0x21c539,_0x5e2f34(0x202),_0x5e2f34(0x1c3),_0x5e2f34(0x1f2))];try{for(const _0x222870 of _0x16c617)if(fs[_0x5e2f34(0x1de)](_0x222870))return!![];}catch(_0x3f97ec){}return![];}if(!forceIcons&&iconsExistInProject(projectDir))console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2c1));else try{execSync(a0_0x16d1d1(0x27e)+path[a0_0x16d1d1(0x28d)](buildToolsDir,'generate-icons.js')+a0_0x16d1d1(0x20a)+projectDir+'\x22',{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)});}catch(a0_0x8f6319){console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x262)),console['warn'](a0_0x16d1d1(0x2b3)+a0_0x8f6319['message'][a0_0x16d1d1(0x1e8)](0x0,0x64));}console['log']('');const ignoreMissing=process['argv'][a0_0x16d1d1(0x20f)]('--ignore-missing'),failOnMissing=process[a0_0x16d1d1(0x28a)][a0_0x16d1d1(0x20f)](a0_0x16d1d1(0x2de));function scanProjectForMissingFiles(_0x14e70c,_0x3b7e5d){const _0x4a6b6d=a0_0x16d1d1,_0x5c53f1=_0x3b7e5d&&Array['isArray'](_0x3b7e5d['minimalRequiredFiles'])?_0x3b7e5d[_0x4a6b6d(0x203)]:['AndroidManifest.xml',_0x4a6b6d(0x269),'res/values/styles.xml',_0x4a6b6d(0x1d7)],_0x4c7fcb=[];for(const _0x17e8f9 of _0x5c53f1){const _0x182c39=path[_0x4a6b6d(0x28d)](_0x14e70c,_0x17e8f9);if(!fs[_0x4a6b6d(0x1de)](_0x182c39))_0x4c7fcb[_0x4a6b6d(0x287)](_0x17e8f9);}let _0x50e783=![];const _0x440653=path[_0x4a6b6d(0x28d)](_0x14e70c,_0x4a6b6d(0x229));if(fs[_0x4a6b6d(0x1de)](_0x440653)){const _0x5d9485=[_0x440653];while(_0x5d9485['length']){const _0x2e2a19=_0x5d9485[_0x4a6b6d(0x1ee)]();try{for(const _0x3a0916 of fs['readdirSync'](_0x2e2a19)){const _0x26fecf=path[_0x4a6b6d(0x28d)](_0x2e2a19,_0x3a0916),_0x3ec127=fs[_0x4a6b6d(0x1dc)](_0x26fecf);if(_0x3ec127['isDirectory']())_0x5d9485[_0x4a6b6d(0x287)](_0x26fecf);else{if(_0x3a0916[_0x4a6b6d(0x276)](_0x4a6b6d(0x297))){_0x50e783=!![];break;}}}}catch(_0x15070d){}if(_0x50e783)break;}}return{'missingFiles':_0x4c7fcb,'hasJava':_0x50e783};}const scanResult=scanProjectForMissingFiles(projectDir,appConfig);if(scanResult[a0_0x16d1d1(0x26b)][a0_0x16d1d1(0x2e1)]>0x0){console[a0_0x16d1d1(0x258)]('\x0a⚠\x20Vérification\x20projet:\x20fichiers\x20minimaux\x20manquants\x20détectés:');for(const m of scanResult[a0_0x16d1d1(0x26b)])console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x2b0)+m);!ignoreMissing?failOnMissing?(console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x1e0)),process[a0_0x16d1d1(0x1ef)](0x1)):console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x236)):console['log'](a0_0x16d1d1(0x21b));}else console['log']('\x0a✓\x20Vérification\x20projet:\x20tous\x20les\x20fichiers\x20minimaux\x20présents');!scanResult[a0_0x16d1d1(0x1fe)]&&console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x2a7));const VENDOR_DIR=path['join'](buildToolsDir,'vendor'),SDK=path['join'](VENDOR_DIR,a0_0x16d1d1(0x2bd),'android-sdk'),JDK=path[a0_0x16d1d1(0x28d)](VENDOR_DIR,a0_0x16d1d1(0x2bd),a0_0x16d1d1(0x1cd),a0_0x16d1d1(0x288)),AAPT2=path[a0_0x16d1d1(0x28d)](SDK,a0_0x16d1d1(0x23b),a0_0x16d1d1(0x1fa),a0_0x16d1d1(0x1e1)),ANDROID_JAR=path[a0_0x16d1d1(0x28d)](SDK,'platforms',a0_0x16d1d1(0x1f6),a0_0x16d1d1(0x24d)),D8=path['join'](SDK,a0_0x16d1d1(0x23b),'34.0.0',a0_0x16d1d1(0x2d4)),ZIPALIGN=path[a0_0x16d1d1(0x28d)](SDK,a0_0x16d1d1(0x23b),a0_0x16d1d1(0x1fa),a0_0x16d1d1(0x2cd)),APKSIGNER=path[a0_0x16d1d1(0x28d)](SDK,a0_0x16d1d1(0x23b),a0_0x16d1d1(0x1fa),a0_0x16d1d1(0x279)),SEVENZIP=path[a0_0x16d1d1(0x28d)](VENDOR_DIR,a0_0x16d1d1(0x1bf),a0_0x16d1d1(0x289),'ia32',a0_0x16d1d1(0x1c6)),requiredTools=[{'name':a0_0x16d1d1(0x216),'path':AAPT2},{'name':'Android\x20JAR','path':ANDROID_JAR},{'name':'D8','path':D8},{'name':a0_0x16d1d1(0x2ba),'path':ZIPALIGN},{'name':a0_0x16d1d1(0x1e2),'path':APKSIGNER},{'name':a0_0x16d1d1(0x22a),'path':SEVENZIP},{'name':a0_0x16d1d1(0x1cf),'path':path[a0_0x16d1d1(0x28d)](JDK,'javac.exe')}];for(const tool of requiredTools){!fs[a0_0x16d1d1(0x1de)](tool[a0_0x16d1d1(0x2c8)])&&(console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2be)+tool[a0_0x16d1d1(0x2e2)]+a0_0x16d1d1(0x1f1)+tool[a0_0x16d1d1(0x2c8)]),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2dc)),process['exit'](0x1));}const BUILD_DIR=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x29b)),SRC_DIR=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x229)),RES_DIR=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x202));function run(_0x284a93,_0xf805c7,_0x584927=projectDir){const _0x608d40=a0_0x16d1d1;console[_0x608d40(0x2b2)](_0x608d40(0x1bd)+_0xf805c7+_0x608d40(0x28e));try{const _0x4f35bd=execSync(_0x284a93,{'cwd':_0x584927,'stdio':_0x608d40(0x25f),'shell':'cmd.exe'});return!![];}catch(_0xcca0ed){console[_0x608d40(0x231)]('ERREUR:\x20'+_0xf805c7+_0x608d40(0x275)),process[_0x608d40(0x1ef)](0x1);}}function copyFile(_0x57530c,_0x3fc53e){const _0x5058f6=a0_0x16d1d1,_0x3779cb=path[_0x5058f6(0x201)](_0x3fc53e);!fs[_0x5058f6(0x1de)](_0x3779cb)&&fs[_0x5058f6(0x2d0)](_0x3779cb,{'recursive':!![]}),fs['copyFileSync'](_0x57530c,_0x3fc53e);}function removeDir(_0x17b240){const _0x4529bd=a0_0x16d1d1;fs['existsSync'](_0x17b240)&&fs[_0x4529bd(0x298)](_0x17b240,{'recursive':!![],'force':!![]});}function cleanBuildDir(_0x2249ab){const _0x31880c=a0_0x16d1d1;if(!fs[_0x31880c(0x1de)](_0x2249ab)){fs[_0x31880c(0x2d0)](_0x2249ab,{'recursive':!![]});return;}const _0x54c967=['classes',_0x31880c(0x2a1),_0x31880c(0x26c)],_0x3c3dc7=[_0x31880c(0x250),_0x31880c(0x227),'classes.dex','dependencies-config.json'];try{const _0x376260=fs[_0x31880c(0x22f)](_0x2249ab);for(const _0x4a2254 of _0x376260){const _0x5e2585=path[_0x31880c(0x28d)](_0x2249ab,_0x4a2254),_0x3cb216=fs[_0x31880c(0x1dc)](_0x5e2585);if(_0x3cb216[_0x31880c(0x1c1)]()&&_0x54c967[_0x31880c(0x20f)](_0x4a2254))console[_0x31880c(0x2b2)](_0x31880c(0x22b)+_0x4a2254+'/'),fs['rmSync'](_0x5e2585,{'recursive':!![],'force':!![]});else{if(_0x3cb216[_0x31880c(0x257)]()&&_0x3c3dc7['includes'](_0x4a2254))console[_0x31880c(0x2b2)]('\x20\x20Suppression:\x20'+_0x4a2254),fs['unlinkSync'](_0x5e2585);else _0x3cb216[_0x31880c(0x1c1)]()&&console[_0x31880c(0x2b2)](_0x31880c(0x2d3)+_0x4a2254+'/\x20(non\x20ciblé\x20par\x20le\x20nettoyage)');}}}catch(_0x4764e3){console[_0x31880c(0x258)]('⚠\x20Erreur\x20lors\x20du\x20nettoyage:\x20'+_0x4764e3[_0x31880c(0x2ce)]);}}function makeDir(_0x5ebcff){const _0x50a465=a0_0x16d1d1;!fs['existsSync'](_0x5ebcff)&&fs[_0x50a465(0x2d0)](_0x5ebcff,{'recursive':!![]});}const APK_NAME=path[a0_0x16d1d1(0x28d)](projectDir,appConfig['appName']['replace'](/\s+/g,'')+a0_0x16d1d1(0x1f5));console['log'](a0_0x16d1d1(0x1f3)),cleanBuildDir(BUILD_DIR);if(fs[a0_0x16d1d1(0x1de)](APK_NAME))try{fs[a0_0x16d1d1(0x232)](APK_NAME),console[a0_0x16d1d1(0x2b2)]('✓\x20Supprimé:\x20'+APK_NAME);}catch(a0_0x358767){console[a0_0x16d1d1(0x258)]('⚠\x20Impossible\x20de\x20supprimer\x20'+APK_NAME+a0_0x16d1d1(0x264));}const keystoreName=appConfig[a0_0x16d1d1(0x277)][a0_0x16d1d1(0x2c0)](/\s+/g,'')+a0_0x16d1d1(0x2d2);console['log'](a0_0x16d1d1(0x246));const libsDir=path[a0_0x16d1d1(0x28d)](BUILD_DIR,'libs'),libsExtractedDir=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x1c8));if(fs['existsSync'](libsDir)){const libsCount=fs[a0_0x16d1d1(0x22f)](libsDir)[a0_0x16d1d1(0x2e1)];console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2dd)+libsCount+a0_0x16d1d1(0x1fc));}if(fs[a0_0x16d1d1(0x1de)](libsExtractedDir)){const extractedCount=fs[a0_0x16d1d1(0x22f)](libsExtractedDir)[a0_0x16d1d1(0x2e1)];console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2b7)+extractedCount+a0_0x16d1d1(0x23c));}console[a0_0x16d1d1(0x2b2)]('');const hasDependencies=appConfig[a0_0x16d1d1(0x1c9)]&&(appConfig[a0_0x16d1d1(0x1c9)][a0_0x16d1d1(0x2a3)]&&appConfig[a0_0x16d1d1(0x1c9)][a0_0x16d1d1(0x2a3)][a0_0x16d1d1(0x2e1)]>0x0||appConfig[a0_0x16d1d1(0x1c9)]['custom']&&appConfig[a0_0x16d1d1(0x1c9)][a0_0x16d1d1(0x26f)]['length']>0x0);if(hasDependencies){console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2eb));try{execSync(a0_0x16d1d1(0x27e)+path[a0_0x16d1d1(0x28d)](buildToolsDir,'process-dependencies.js')+'\x22\x20\x22'+projectDir+'\x22',{'stdio':a0_0x16d1d1(0x25f)});}catch(a0_0x2215da){console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x2cb));}console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1ff));try{execSync(a0_0x16d1d1(0x27e)+path[a0_0x16d1d1(0x28d)](buildToolsDir,a0_0x16d1d1(0x26d))+a0_0x16d1d1(0x20a)+projectDir+'\x22',{'stdio':a0_0x16d1d1(0x25f)});}catch(a0_0x4bd633){console['warn'](a0_0x16d1d1(0x2db));}}else console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x209));const extractedJars=hasDependencies?extractClassesFromAARs(BUILD_DIR):[];makeDir(BUILD_DIR),makeDir(BUILD_DIR+a0_0x16d1d1(0x1bc)),makeDir(BUILD_DIR+a0_0x16d1d1(0x213));const stylesDir=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x202),a0_0x16d1d1(0x2bb)),stylesPath=path[a0_0x16d1d1(0x28d)](stylesDir,a0_0x16d1d1(0x21a));try{!fs[a0_0x16d1d1(0x1de)](stylesDir)&&fs[a0_0x16d1d1(0x2d0)](stylesDir,{'recursive':!![]});if(!fs[a0_0x16d1d1(0x1de)](stylesPath)){const defaultStyles=a0_0x16d1d1(0x217)+'<resources>\x0a'+'\x20\x20<style\x20name=\x22AppTheme\x22\x20parent=\x22android:Theme.DeviceDefault.Light.DarkActionBar\x22>\x0a'+'\x20\x20</style>\x0a'+a0_0x16d1d1(0x1d1);fs['writeFileSync'](stylesPath,defaultStyles,a0_0x16d1d1(0x1d8)),console[a0_0x16d1d1(0x2b2)]('✓\x20styles.xml\x20par\x20défaut\x20créé\x20pour\x20éviter\x20les\x20erreurs\x20de\x20thème');}}catch(a0_0x7483df){console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x282),a0_0x7483df['message']);}console['log'](a0_0x16d1d1(0x299));const layoutFiles=fs[a0_0x16d1d1(0x1de)](path[a0_0x16d1d1(0x28d)](RES_DIR,'layout'))?fs['readdirSync'](path['join'](RES_DIR,a0_0x16d1d1(0x240)))[a0_0x16d1d1(0x2e0)](_0xbdad5f=>_0xbdad5f[a0_0x16d1d1(0x276)](a0_0x16d1d1(0x2d7))):[],valueFiles=fs['existsSync'](path[a0_0x16d1d1(0x28d)](RES_DIR,'values'))?fs[a0_0x16d1d1(0x22f)](path[a0_0x16d1d1(0x28d)](RES_DIR,'values'))[a0_0x16d1d1(0x2e0)](_0x58239b=>_0x58239b[a0_0x16d1d1(0x276)]('.xml')):[],allResources=[];for(const file of layoutFiles){console[a0_0x16d1d1(0x2b2)]('\x0a===\x20Compile\x20'+path[a0_0x16d1d1(0x28d)](RES_DIR,a0_0x16d1d1(0x240),file)+a0_0x16d1d1(0x28e));const cmd='\x22'+AAPT2+a0_0x16d1d1(0x237)+BUILD_DIR+a0_0x16d1d1(0x1c4)+path['join'](RES_DIR,a0_0x16d1d1(0x240),file)+'\x22';try{execSync(cmd,{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)});}catch(a0_0x30fa46){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x283)+file+a0_0x16d1d1(0x271));}allResources['push'](RES_DIR+a0_0x16d1d1(0x27a)+file);}for(const file of valueFiles){console['log'](a0_0x16d1d1(0x223)+path[a0_0x16d1d1(0x28d)](RES_DIR,a0_0x16d1d1(0x2bb),file)+a0_0x16d1d1(0x28e));const cmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+BUILD_DIR+a0_0x16d1d1(0x1c4)+path[a0_0x16d1d1(0x28d)](RES_DIR,a0_0x16d1d1(0x2bb),file)+'\x22';try{execSync(cmd,{'stdio':a0_0x16d1d1(0x25f),'shell':'cmd.exe'});}catch(a0_0xba16b0){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x283)+file+a0_0x16d1d1(0x271));}allResources['push'](RES_DIR+a0_0x16d1d1(0x2a0)+file);}for(let mimapDir of fs[a0_0x16d1d1(0x22f)](RES_DIR)[a0_0x16d1d1(0x2e0)](_0x54f15c=>_0x54f15c[a0_0x16d1d1(0x2ac)](a0_0x16d1d1(0x1d3)))){const mimapPath=path['join'](RES_DIR,mimapDir);if(fs[a0_0x16d1d1(0x1dc)](mimapPath)['isDirectory']()){const files=fs[a0_0x16d1d1(0x22f)](mimapPath)['filter'](_0x5abfb0=>_0x5abfb0[a0_0x16d1d1(0x276)](a0_0x16d1d1(0x22c)));for(const file of files){console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x223)+path[a0_0x16d1d1(0x28d)](mimapDir,file)+a0_0x16d1d1(0x28e));const cmd='\x22'+AAPT2+a0_0x16d1d1(0x237)+BUILD_DIR+a0_0x16d1d1(0x1c4)+path['join'](mimapPath,file)+'\x22';try{execSync(cmd,{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)});}catch(a0_0x21c6a7){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x283)+file+'\x20échouée\x20(non\x20critique)');}}}}console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x23e));const resourceExtensions=[a0_0x16d1d1(0x2d7),a0_0x16d1d1(0x22c),a0_0x16d1d1(0x2a6),a0_0x16d1d1(0x2af),a0_0x16d1d1(0x21e),a0_0x16d1d1(0x1d0)];function walkDirForResources(_0x43e50c){const _0xe9ca5b=a0_0x16d1d1,_0x376d2e=[];if(!fs[_0xe9ca5b(0x1de)](_0x43e50c))return _0x376d2e;const _0x116789=fs[_0xe9ca5b(0x22f)](_0x43e50c);for(const _0x25b95d of _0x116789){const _0x53e58f=path[_0xe9ca5b(0x28d)](_0x43e50c,_0x25b95d),_0x2f34ad=fs[_0xe9ca5b(0x1dc)](_0x53e58f);if(_0x2f34ad[_0xe9ca5b(0x1c1)]())_0x376d2e[_0xe9ca5b(0x287)](...walkDirForResources(_0x53e58f));else{const _0x3d3e2b=path['extname'](_0x25b95d)['toLowerCase']();(resourceExtensions[_0xe9ca5b(0x20f)](_0x3d3e2b)||_0x25b95d[_0xe9ca5b(0x276)]('.9.png'))&&_0x376d2e[_0xe9ca5b(0x287)](_0x53e58f);}}return _0x376d2e;}const allResFiles=walkDirForResources(RES_DIR);for(const resFile of allResFiles){console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x223)+resFile+a0_0x16d1d1(0x28e));const compileCmd='\x22'+AAPT2+a0_0x16d1d1(0x237)+path[a0_0x16d1d1(0x28d)](BUILD_DIR,'compiledResources')+'\x22\x20\x22'+resFile+'\x22';try{execSync(compileCmd,{'stdio':'inherit','shell':a0_0x16d1d1(0x27f)});}catch(a0_0x1f3458){console[a0_0x16d1d1(0x258)]('Avertissement:\x20impossible\x20de\x20compiler\x20'+resFile+a0_0x16d1d1(0x219));}}function a0_0x4038(){const _0x59314a=['pop','exit','⚠\x20Aucun\x20fichier\x20Java\x20trouvé\x20—\x20génération\x20de\x20stubs\x20d\x27activité\x20pour\x20éviter\x20les\x20crashes','\x20non\x20trouvé\x20à:\x20','ic_launcher.png','Nettoyage\x20complet\x20de\x20tous\x20les\x20fichiers\x20générés...','\x0a✓\x20Classe\x20extraite\x20pour\x20diagnostic:\x20','.apk','android-34','mipmap-anydpi-v26','Répertoire\x20de\x20génération\x20vérifier:\x20','ERREUR:\x20Impossible\x20de\x20créer\x20le\x20keystore','34.0.0','temp_','\x20fichier(s)\x20dans\x20libs/','Recreating\x20JAR\x20after\x20recompilation','hasJava','\x0aRésolution\x20des\x20dépendances\x20transitives...','\x20-\x20les\x20logs\x20de\x20compilation\x20`javac`\x20pour\x20erreurs','dirname','res','minimalRequiredFiles','writeFileSync','ignore','\x20\x20Extraction:\x20','⚠\x20classes.jar\x20non\x20trouvé\x20dans\x20','minSdkVersion','ℹ️\x20\x20Aucune\x20dépendance\x20déclarée\x20-\x20étape\x20skippée\x0a','\x22\x20\x22','\x20fichiers\x20Java\x20générés\x20par\x20aapt2\x20ajoutés\x20à\x20la\x20compilation','mipmap-xhdpi','Classe\x20problématique\x20détectée:\x20','✓\x20Vérification\x20des\x20activities:\x20toutes\x20les\x20activities\x20du\x20manifest\x20sont\x20présentes\x20dans\x20classes.jar','includes','renameSync','✓\x20Conversion\x20DEX\x20réussie','AndroidManifest.xml','/compiledResources','Temps\x20de\x20build:\x20','\x0a✓\x20Restauration\x20complète!','AAPT2','<?xml\x20version=\x221.0\x22\x20encoding=\x22utf-8\x22?>\x0a','1047879lJSXpY','\x20(non\x20critique)','styles.xml','\x0a--\x20Ignoring\x20missing\x20files\x20due\x20to\x20--ignore-missing','Variable\x20d\x27environnement\x20PROJECT_PATH\x20détectée:\x20','\x0aERREUR:\x20D8\x20a\x20échoué\x20lors\x20de\x20la\x20conversion\x20en\x20DEX.','.webp','\x20\x202.\x20AndroidManifest.xml\x20est-il\x20bien\x20formé?','win32','\x20à\x20','substr','\x0a===\x20Compile\x20','\x22\x20--restore','\x5cjar\x22\x20cvf\x20\x22','✓\x20Aucune\x20activity\x20déclarée\x20dans\x20le\x20manifest\x20à\x20vérifier.','classes.jar','38pUmovH','src','7zip','\x20\x20Suppression:\x20','.png','.class','\x22\x20sign\x20--ks\x20\x22','readdirSync','\x22\x20--java\x20\x22','error','unlinkSync','size','\x20-\x20que\x20les\x20.java\x20existent\x20dans\x20`src/`\x20avec\x20le\x20bon\x20`package`\x20en\x20tête','now','\x0aRemarque:\x20utilisez\x20--fail-on-missing\x20pour\x20faire\x20échouer\x20le\x20build\x20lorsqu\x27un\x20fichier\x20manque,\x20ou\x20--ignore-missing\x20pour\x20continuer.','\x22\x20compile\x20-o\x20\x22','MyApp','mipmap-hdpi','exec','build-tools','\x20fichier(s)\x20dans\x20libs-extracted/','\x22\x20-C\x20\x22','\x0a===\x20Compile\x20récursif\x20des\x20ressources\x20restantes\x20===','Création\x20du\x20keystore...','layout','libs','undefined','---\x0a','\x0a===\x205)\x20CONVERSION\x20EN\x20DEX\x20===','\x22\x20e\x20-y\x20\x22','✓\x20Structure\x20de\x20build\x20recréée\x0a','map','⚠\x207za\x20non\x20trouvé\x20pour\x20','toFixed','\x5cjavap\x22\x20-v\x20\x22','HOME','974288uEHAzX','android.jar','Avertissement:\x20impossible\x20d\x27ajouter\x20les\x20.java\x20générés:','✓\x20Stub\x20activity\x20created:\x20','unsigned.zip','🔄\x20Restauration\x20des\x20fichiers\x20depuis\x20le\x20backup...\x0a','Chemin\x20de\x20sortie\x20APK:\x20','PROJECT_PATH','\x20\x20node\x20build_apk.js\x20/chemin/vers/projet','mipmap-xxhdpi','mac','isFile','warn','\x0a===\x208)\x20SIGNATURE\x20DE\x20L\x27APK\x20===','expected','ERREUR:\x20APK\x20non\x20généré\x20après\x20signature','Avertissement:\x20impossible\x20de\x20créer\x20un\x20stub\x20d\x27activité:','\x20-d\x20\x22','\x20extends\x20Activity\x20{\x0a\x20\x20\x20\x20@Override\x0a\x20\x20\x20\x20protected\x20void\x20onCreate(Bundle\x20savedInstanceState)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20super.onCreate(savedInstanceState);\x0a\x20\x20\x20\x20}\x0a}\x0a','inherit','ERREUR:\x20D8\x20échoue\x20encore\x20après\x20tentative\x20de\x20correction\x20automatique.','✓\x20R.java\x20généré\x20avec\x20succès:\x20','Avertissement:\x20Génération\x20des\x20icônes\x20échouée\x20(non\x20critique\x20pour\x20le\x20build)','Dossier\x20MyApp\x20trouvé\x20par\x20défaut:\x20','\x20(fichier\x20en\x20cours\x20d\x27utilisation)','basename',';\x0a\x0aimport\x20android.app.Activity;\x0aimport\x20android.os.Bundle;\x0a\x0apublic\x20class\x20','Vérifiez:','ERREUR:\x20app-config.json\x20non\x20trouvé\x20dans\x20le\x20projet!','res/values/strings.xml','aligned.apk','missingFiles','generated','resolve-transitive-deps.js','\x22\x20--manifest\x20\x22','custom','\x0aTentative:\x20fichier\x20source\x20généré\x20détecté.\x20Suppression\x20et\x20recompilation.','\x20échouée\x20(non\x20critique)','.flat','activity','app-config.json\x20trouvé\x20dans:\x20','\x20a\x20échoué','endsWith','appName','✓\x20Extrait:\x20','apksigner.bat','/layout/','\x0aERREUR:\x20Certaines\x20activities\x20déclarées\x20dans\x20AndroidManifest.xml\x20sont\x20absentes\x20du\x20JAR:','\x20dépendance(s))\x20===','Aucun\x20fichier\x20.java\x20trouvé\x20après\x20suppression;\x20impossible\x20de\x20recompiler.','node\x20\x22','cmd.exe','Avertissement:\x20AndroidManifest.xml\x20introuvable\x20—\x20vérification\x20sautée','ℹ️\x20\x20Aucun\x20répertoire\x20libs\x20trouvé','Avertissement:\x20impossible\x20de\x20créer\x20styles.xml\x20par\x20défaut:','Avertissement:\x20Compilation\x20de\x20','✓\x20APK\x20signé\x20avec\x20succès','cwd','copyFileSync','push','bin','win','argv','\x0a---\x20javap\x20verbose\x20---','41898fhqtgA','join','\x20===','app-config.json','d8_diagnostics','\x0a===\x20Signing\x20APK\x20===','ERREUR:\x20Génération\x20des\x20ressources\x20échouée','✓\x20Keystore\x20existant\x20réutilisé:\x20','appVersion','Chemin\x20recherché:\x20','7za','.java','rmSync','\x0a===\x201)\x20COMPILING\x20RESOURCES\x20===','\x20-\x20que\x20`generate-resources.js`\x20n\x27a\x20pas\x20supprimé\x20des\x20fichiers\x20importants','build','Erreur\x20durant\x20le\x20diagnostic\x20D8:','sep','Commande:\x20','split','/values/','compiledResources','.aar','androidx','161fzjDtg','arch','.jpg','\x0a⚠\x20Aucune\x20source\x20Java\x20détectée\x20sous\x20`src/`\x20—\x20le\x20build\x20générera\x20des\x20stubs\x20ou\x20utilisera\x20les\x20fichiers\x20générés\x20par\x20aapt2\x20si\x20nécessaire.','.zip','\x20(attendu:\x20','Génération\x20des\x20ressources\x20dynamiques...','\x0a===\x203)\x20COMPILATION\x20DE\x20JAVA\x20===','startsWith','578540toTEwv','\x22\x20--ks-pass\x20pass:123456\x20--min-sdk-version\x20','.jpeg','\x20-\x20','119247INuNcm','log','Détail:\x20','ERREUR:\x20Restauration\x20échouée','x64','ERREUR\x20lors\x20de\x20la\x20vérification\x20des\x20classes\x20dans\x20le\x20JAR:','✓\x20Cache\x20des\x20dépendances\x20extraites\x20préservé:\x20','Package:\x20','\x0a===\x207)\x20ALIGNEMENT\x20DE\x20L\x27APK\x20===','Zipalign','values','\x5cjar\x22\x20tf\x20\x22','android','\x0aERREUR:\x20','\x0aUsage:','replace','ℹ\x20Icônes\x20détectées\x20dans\x20le\x20projet\x20—\x20génération\x20d\x27icônes\x20ignorée\x20(utilisez\x20--force-icons\x20pour\x20forcer)','\x0a===\x204)\x20CRÉATION\x20DU\x20JAR\x20===','⚠\x20classes.dex\x20non\x20trouvé','darwin','✓\x20Existe\x20déjà:\x20','resolve','\x20--out\x20\x22','path','2524lCKkuC','\x20octets','Avertissement:\x20Traitement\x20des\x20dépendances\x20échoué\x20(non\x20critique)','Impossible\x20d\x27exécuter\x20javap\x20sur\x20la\x20classe\x20extraite:','zipalign.exe','message','\x20\x201.\x20Les\x20fichiers\x20XML\x20dans\x20res/values/\x20sont-ils\x20valides?','mkdirSync','\x5cjavac\x22\x20--release\x208\x20-Xlint:-options\x20-cp\x20','.keystore','\x20\x20Préservé:\x20','d8.bat','match','Le\x20fichier\x20source\x20correspondant\x20n\x27est\x20pas\x20un\x20fichier\x20généré\x20par\x20le\x20script.\x20Aucune\x20suppression\x20automatique\x20réalisée.','.xml','ERREUR:\x20Ajout\x20du\x20DEX\x20échoué:\x20','Message\x20d\x27erreur:','ia32','Avertissement:\x20Résolution\x20des\x20dépendances\x20transitives\x20échouée\x20(non\x20critique)','Vérifiez\x20que\x20le\x20SDK\x20Android\x20et\x20JDK\x20sont\x20correctement\x20installés.','✓\x20Cache\x20des\x20dépendances\x20préservé:\x20','--fail-on-missing','classes','filter','length','name','\x22\x20-f\x204\x20\x22','Exécution:\x20','\x22\x20.','⚠\x20Aucun\x20fichier\x20Java\x20trouvé','package\x20','Chemin\x20attendu:\x20','Recompiling\x20Java\x20files\x20after\x20removing\x20generated\x20source','\x0aERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!','Traitement\x20des\x20dépendances...','platform','readFileSync','✓\x20Conversion\x20DEX\x20réussie\x20après\x20correction\x20automatique','unsigned.apk','arm64','\x20--no-backup','Compiling\x20Java\x20files','✓\x20Keystore\x20créé','utf-8','\x0a===\x20Conversion\x20en\x20DEX\x20===','\x22\x20-o\x22','⚠\x20Zipalign\x20échoué,\x20copie\x20directe\x20de\x20unsigned.apk','...','/classes','\x0a===\x20','\x22\x20link\x20-o\x20\x22','7zip-bin','\x0aBuild\x20échouée\x20-\x20APK\x20n\x27est\x20pas\x20généré.','isDirectory','ERREUR:\x20classes.jar\x20introuvable\x20—\x20impossible\x20de\x20vérifier\x20les\x20classes','mipmap-xxxhdpi','/compiledResources\x22\x20\x22','env','7za.exe','generate-resources.js','libs-extracted','dependencies','✓\x20DEX\x20ajouté\x20à\x20l\x27APK','\x20\x20PROJECT_PATH=/chemin/vers/projet\x20node\x20build_apk.js','\x0a✓\x20Build\x20terminé\x20avec\x20succès!','jdk','mipmap-mdpi','JDK','.9.png','</resources>\x0a','pipe','mipmap','\x22\x20\x22*','\x22\x20u\x20-y\x20\x22','packageName','res/layout/activity_main.xml','utf8','Création\x20du\x20JAR','\x0a===\x202)\x20LIAISON\x20DES\x20RESSOURCES\x20===','Cause\x20possible:\x20fichiers\x20res/\x20mal\x20structurés,\x20XML\x20invalides,\x20ou\x20manifest\x20corrompu.','statSync','classes.dex','existsSync','.jar','\x0aERREUR:\x20Fichiers\x20minimaux\x20manquants.\x20Arrêt\x20du\x20build.','aapt2.exe','APKSigner','\x0aERREUR\x20CRITIQUE:\x20R.java\x20n\x27a\x20pas\x20été\x20généré\x20par\x20aapt2\x20link!','--force-icons','Erreur\x20lors\x20de\x20la\x20tentative\x20de\x20correction\x20automatique:','\x22\x20--output\x20\x22','1330108ZcbnoS','substring','\x22\x20-I\x20\x22','Avertissement:\x20erreur\x20lors\x20de\x20la\x20génération\x20des\x20stubs\x20d\x27activité:','Fichier\x20source\x20Java\x20correspondant\x20introuvable:\x20','vendor','timeout\x20/t\x201\x20/nobreak'];a0_0x4038=function(){return _0x59314a;};return a0_0x4038();}console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1da));const apkPath=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x250)),resourcesDir=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x2a1)),generatedDir=path[a0_0x16d1d1(0x2c6)](BUILD_DIR,a0_0x16d1d1(0x26c));if(!fs[a0_0x16d1d1(0x1de)](resourcesDir))fs[a0_0x16d1d1(0x2d0)](resourcesDir,{'recursive':!![]});if(!fs[a0_0x16d1d1(0x1de)](generatedDir))fs[a0_0x16d1d1(0x2d0)](generatedDir,{'recursive':!![]});const compiledFiles=fs[a0_0x16d1d1(0x22f)](resourcesDir)['filter'](_0x2bf29f=>_0x2bf29f['endsWith'](a0_0x16d1d1(0x272))||_0x2bf29f['endsWith'](a0_0x16d1d1(0x2a8)))[a0_0x16d1d1(0x247)](_0x216d01=>path[a0_0x16d1d1(0x28d)](resourcesDir,_0x216d01));console[a0_0x16d1d1(0x2b2)]('Création\x20de\x20la\x20structure\x20APK\x20et\x20génération\x20de\x20R.java...');try{let linkCmd;const manifestPath=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x212));if(compiledFiles['length']>0x0){const compiledArgs=compiledFiles[a0_0x16d1d1(0x247)](_0x5ef129=>'\x22'+_0x5ef129+'\x22')[a0_0x16d1d1(0x28d)]('\x20');linkCmd='\x22'+AAPT2+'\x22\x20link\x20-o\x20\x22'+apkPath+a0_0x16d1d1(0x1e9)+ANDROID_JAR+a0_0x16d1d1(0x26e)+manifestPath+a0_0x16d1d1(0x230)+generatedDir+'\x22\x20'+compiledArgs;}else linkCmd='\x22'+AAPT2+a0_0x16d1d1(0x1be)+apkPath+a0_0x16d1d1(0x1e9)+ANDROID_JAR+a0_0x16d1d1(0x26e)+manifestPath+'\x22\x20--java\x20\x22'+generatedDir+'\x22\x20--auto-add-overlay\x20\x22'+path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x202))+'\x22';console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2e4)+linkCmd['substring'](0x0,0x64)+a0_0x16d1d1(0x1bb)),execSync(linkCmd,{'stdio':a0_0x16d1d1(0x25f),'shell':'cmd.exe'}),console[a0_0x16d1d1(0x2b2)]('✓\x20Ressources\x20liées\x20avec\x20succès');}catch(a0_0x16b5cb){console[a0_0x16d1d1(0x231)]('\x0aERREUR:\x20lien\x20a\x20échoué.\x20R.java\x20n\x27a\x20probablement\x20pas\x20été\x20généré.'),console['error'](a0_0x16d1d1(0x2d9),a0_0x16b5cb[a0_0x16d1d1(0x2ce)]['substring'](0x0,0xc8)),process[a0_0x16d1d1(0x1ef)](0x1);}function findRJava(){const _0x225f85=[];try{const _0x13a670=_0x3b0929=>{const _0x19eca9=a0_0x22b6,_0x1bde16=fs['readdirSync'](_0x3b0929);for(const _0xd45a17 of _0x1bde16){const _0x1ae02a=path['join'](_0x3b0929,_0xd45a17),_0x32ba88=fs[_0x19eca9(0x1dc)](_0x1ae02a);if(_0x32ba88['isDirectory']())_0x13a670(_0x1ae02a);else _0xd45a17==='R.java'&&_0x225f85['push'](_0x1ae02a);}};_0x13a670(generatedDir);}catch(_0x17e78e){}return _0x225f85;}const rJavaFiles=findRJava();function a0_0x22b6(_0x5bc01e,_0x27c71a){_0x5bc01e=_0x5bc01e-0x1af;const _0x40385b=a0_0x4038();let _0x22b6f3=_0x40385b[_0x5bc01e];return _0x22b6f3;}rJavaFiles['length']===0x0&&(console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x1e3)),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x1f8)+generatedDir),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x1db)),console[a0_0x16d1d1(0x231)]('\x0aVérifications\x20à\x20faire:'),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2cf)),console['error'](a0_0x16d1d1(0x21f)),console[a0_0x16d1d1(0x231)]('\x20\x203.\x20Tous\x20les\x20dossiers\x20res/layout/,\x20res/values/,\x20res/mipmap*\x20existent-ils?'),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x1c0)),process[a0_0x16d1d1(0x1ef)](0x1));console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x261)+rJavaFiles[0x0]),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2ab));const javaFiles=[],srcPath=SRC_DIR,findJavaFiles=_0x508b40=>{const _0x457a85=a0_0x16d1d1,_0x5d087d=fs[_0x457a85(0x22f)](_0x508b40);for(const _0x72f940 of _0x5d087d){const _0xbf1e84=path[_0x457a85(0x28d)](_0x508b40,_0x72f940),_0x8e0301=fs[_0x457a85(0x1dc)](_0xbf1e84);if(_0x8e0301[_0x457a85(0x1c1)]())findJavaFiles(_0xbf1e84);else _0x72f940[_0x457a85(0x276)](_0x457a85(0x297))&&javaFiles['push'](_0xbf1e84);}};fs[a0_0x16d1d1(0x1de)](srcPath)&&findJavaFiles(srcPath);const generatedJavaDir=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x26c));if(fs['existsSync'](generatedJavaDir)){const findGeneratedJavaFiles=_0x1be8ea=>{const _0x57c30b=a0_0x16d1d1,_0x5167f6=[],_0x538dfb=fs[_0x57c30b(0x22f)](_0x1be8ea);for(const _0x4fac8c of _0x538dfb){const _0x831cf2=path['join'](_0x1be8ea,_0x4fac8c),_0x361e38=fs[_0x57c30b(0x1dc)](_0x831cf2);if(_0x361e38[_0x57c30b(0x1c1)]())_0x5167f6[_0x57c30b(0x287)](...findGeneratedJavaFiles(_0x831cf2));else _0x4fac8c[_0x57c30b(0x276)](_0x57c30b(0x297))&&_0x5167f6['push'](_0x831cf2);}return _0x5167f6;};try{const genFiles=findGeneratedJavaFiles(generatedJavaDir);genFiles[a0_0x16d1d1(0x2e1)]>0x0&&(javaFiles[a0_0x16d1d1(0x287)](...genFiles),console[a0_0x16d1d1(0x2b2)]('✓\x20'+genFiles['length']+a0_0x16d1d1(0x20b)));}catch(a0_0x31487d){console['warn'](a0_0x16d1d1(0x24e),a0_0x31487d[a0_0x16d1d1(0x2ce)]);}}function ensureActivityStubs(){const _0x37b8f9=a0_0x16d1d1;try{const _0x55fb88=path[_0x37b8f9(0x28d)](projectDir,'AndroidManifest.xml');if(!fs['existsSync'](_0x55fb88))return;const _0x47f5e1=fs[_0x37b8f9(0x1b0)](_0x55fb88,_0x37b8f9(0x1d8)),_0x22a31e=_0x47f5e1[_0x37b8f9(0x2d5)](/<manifest[^>]*\spackage\s*=\s*['"]([^'"]+)['"]/),_0x4c38f7=_0x22a31e?_0x22a31e[0x1]:null,_0xe2d043=/<activity[^>]*android:name\s*=\s*['\"]([^'\"]+)['\"]/g;let _0x1616a1;const _0x403a1d=new Set();while((_0x1616a1=_0xe2d043['exec'](_0x47f5e1))!==null){_0x403a1d['add'](_0x1616a1[0x1]);}if(_0x403a1d[_0x37b8f9(0x233)]===0x0)return;const _0x33bb64=path[_0x37b8f9(0x28d)](BUILD_DIR,_0x37b8f9(0x26c));if(!fs['existsSync'](_0x33bb64))fs[_0x37b8f9(0x2d0)](_0x33bb64,{'recursive':!![]});for(const _0x342ddf of _0x403a1d){let _0x5c2247=_0x342ddf;if(_0x342ddf[_0x37b8f9(0x2ac)]('.')){if(_0x4c38f7)_0x5c2247=_0x4c38f7+_0x342ddf;}else!_0x342ddf[_0x37b8f9(0x20f)]('.')&&_0x4c38f7&&(_0x5c2247=_0x4c38f7+'.'+_0x342ddf);const _0xc60ab4=_0x5c2247[_0x37b8f9(0x29f)]('.'),_0x8e9399=_0xc60ab4['pop'](),_0x589446=_0xc60ab4[_0x37b8f9(0x28d)](path[_0x37b8f9(0x29d)]),_0x21911a=path['join'](_0x33bb64,_0x589446);if(!fs['existsSync'](_0x21911a))fs[_0x37b8f9(0x2d0)](_0x21911a,{'recursive':!![]});const _0x1b91c3=path[_0x37b8f9(0x28d)](_0x21911a,_0x8e9399+_0x37b8f9(0x297));if(!fs[_0x37b8f9(0x1de)](_0x1b91c3)){const _0x2d6b77=_0x37b8f9(0x2e7)+_0xc60ab4[_0x37b8f9(0x28d)]('.')+_0x37b8f9(0x266)+_0x8e9399+_0x37b8f9(0x25e);try{fs[_0x37b8f9(0x204)](_0x1b91c3,_0x2d6b77,'utf8'),console['log'](_0x37b8f9(0x24f)+_0x1b91c3);}catch(_0x3212fa){console['warn'](_0x37b8f9(0x25c),_0x3212fa[_0x37b8f9(0x2ce)]);}}javaFiles[_0x37b8f9(0x287)](_0x1b91c3);}}catch(_0x33e85c){console['warn'](_0x37b8f9(0x1ea),_0x33e85c[_0x37b8f9(0x2ce)]);}}javaFiles['length']===0x0&&(console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x1f0)),ensureActivityStubs());if(javaFiles[a0_0x16d1d1(0x2e1)]===0x0)console['warn'](a0_0x16d1d1(0x2e6));else{let classPathParts=['\x22'+ANDROID_JAR+'\x22'];extractedJars&&extractedJars[a0_0x16d1d1(0x2e1)]>0x0&&classPathParts[a0_0x16d1d1(0x287)](...extractedJars[a0_0x16d1d1(0x247)](_0x502046=>'\x22'+_0x502046+'\x22'));const classPath=classPathParts[a0_0x16d1d1(0x28d)](';'),javaFilesStr=javaFiles[a0_0x16d1d1(0x247)](_0xd86df9=>'\x22'+_0xd86df9+'\x22')[a0_0x16d1d1(0x28d)]('\x20'),compileCmd='\x22'+JDK+a0_0x16d1d1(0x2d1)+classPath+'\x20-d\x20\x22'+path[a0_0x16d1d1(0x28d)](BUILD_DIR,'classes')+'\x22\x20'+javaFilesStr;run(compileCmd,a0_0x16d1d1(0x1b5));}console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x2c2));const classesDir=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x2df)),jarPath=path[a0_0x16d1d1(0x28d)](BUILD_DIR,'classes.jar');if(fs['existsSync'](classesDir)){const jarCmd='\x22'+JDK+a0_0x16d1d1(0x225)+jarPath+a0_0x16d1d1(0x23d)+classesDir+a0_0x16d1d1(0x2e5);run(jarCmd,a0_0x16d1d1(0x1d9));}else console[a0_0x16d1d1(0x258)]('⚠\x20Dossier\x20classes\x20non\x20trouvé');function checkManifestClassesPresentInJar(){const _0x4afaed=a0_0x16d1d1;try{!fs[_0x4afaed(0x1de)](jarPath)&&(console[_0x4afaed(0x231)](_0x4afaed(0x1c2)),process['exit'](0x1));const _0x29630a=path['join'](projectDir,_0x4afaed(0x212));if(!fs[_0x4afaed(0x1de)](_0x29630a)){console[_0x4afaed(0x258)](_0x4afaed(0x280));return;}const _0x56abbc=fs[_0x4afaed(0x1b0)](_0x29630a,_0x4afaed(0x1d8)),_0x3649c1=_0x56abbc[_0x4afaed(0x2d5)](/<manifest[^>]*\spackage\s*=\s*['"]([^'\"]+)['"]/),_0x22be07=_0x3649c1?_0x3649c1[0x1]:appConfig&&appConfig[_0x4afaed(0x1d6)]||null,_0x150d9d=/<activity[^>]*android:name\s*=\s*['\"]([^'\"]+)['\"]/g;let _0x2647dd;const _0x5d0dc4=[];while((_0x2647dd=_0x150d9d[_0x4afaed(0x23a)](_0x56abbc))!==null){let _0x34be31=_0x2647dd[0x1];if(_0x34be31[_0x4afaed(0x2ac)]('.')){if(_0x22be07)_0x34be31=_0x22be07+_0x34be31;}else!_0x34be31[_0x4afaed(0x20f)]('.')&&_0x22be07&&(_0x34be31=_0x22be07+'.'+_0x34be31);_0x5d0dc4[_0x4afaed(0x287)](_0x34be31);}if(_0x5d0dc4[_0x4afaed(0x2e1)]===0x0){console[_0x4afaed(0x2b2)](_0x4afaed(0x226));return;}const _0x5ac955=execSync('\x22'+JDK+_0x4afaed(0x2bc)+jarPath+'\x22',{'encoding':'utf8','stdio':['pipe',_0x4afaed(0x1d2),_0x4afaed(0x205)]}),_0x11df6e=[];for(const _0x545fcb of _0x5d0dc4){const _0x3c23d6=_0x545fcb['replace'](/\./g,'/')+_0x4afaed(0x22d);!_0x5ac955[_0x4afaed(0x20f)](_0x3c23d6)&&_0x11df6e[_0x4afaed(0x287)]({'activity':_0x545fcb,'expected':_0x3c23d6});}if(_0x11df6e['length']>0x0){console['error'](_0x4afaed(0x27b));for(const _0x45d399 of _0x11df6e){console['error'](_0x4afaed(0x2b0)+_0x45d399[_0x4afaed(0x273)]+_0x4afaed(0x2a9)+_0x45d399[_0x4afaed(0x25a)]+')');}console[_0x4afaed(0x231)]('\x0aCause\x20probable:\x20les\x20sources\x20Java\x20n\x27ont\x20pas\x20été\x20trouvées/compilées\x20ou\x20le\x20package\x20des\x20.java\x20ne\x20correspond\x20pas\x20au\x20manifest.'),console[_0x4afaed(0x231)](_0x4afaed(0x267)),console[_0x4afaed(0x231)](_0x4afaed(0x234)),console[_0x4afaed(0x231)](_0x4afaed(0x29a)),console[_0x4afaed(0x231)](_0x4afaed(0x200)),process[_0x4afaed(0x1ef)](0x1);}console[_0x4afaed(0x2b2)](_0x4afaed(0x20e));}catch(_0x50a15b){console['error'](_0x4afaed(0x2b6),_0x50a15b[_0x4afaed(0x2ce)]),process['exit'](0x1);}}checkManifestClassesPresentInJar(),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x244));const dexPath=path['join'](BUILD_DIR,a0_0x16d1d1(0x1dd));if(fs['existsSync'](jarPath)){const jarsForDex=['\x22'+jarPath+'\x22'];typeof extractedJars!==a0_0x16d1d1(0x242)&&extractedJars&&extractedJars['length']>0x0&&jarsForDex[a0_0x16d1d1(0x287)](...extractedJars[a0_0x16d1d1(0x247)](_0x35046b=>'\x22'+_0x35046b+'\x22'));const d8Cmd='\x22'+D8+'\x22\x20--lib\x20\x22'+ANDROID_JAR+a0_0x16d1d1(0x1e6)+BUILD_DIR+'\x22\x20'+jarsForDex['join']('\x20');typeof extractedJars!==a0_0x16d1d1(0x242)&&extractedJars&&extractedJars[a0_0x16d1d1(0x2e1)]>0x0?console['log']('\x0a===\x20Conversion\x20en\x20DEX\x20(avec\x20'+extractedJars[a0_0x16d1d1(0x2e1)]+a0_0x16d1d1(0x27c)):console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1b8));try{execSync(d8Cmd,{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)}),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x211));}catch(a0_0x306442){const msg=a0_0x306442&&a0_0x306442[a0_0x16d1d1(0x2ce)]?a0_0x306442[a0_0x16d1d1(0x2ce)]:String(a0_0x306442),classMatch=msg[a0_0x16d1d1(0x2d5)](/([^:\s]+\.jar):([^:\s]+\.class)/);let problematicClassEntry=null;if(classMatch)problematicClassEntry=classMatch[0x2][a0_0x16d1d1(0x2c0)](/\\\\/g,'/');else{const alt=msg[a0_0x16d1d1(0x2d5)](/(com\/[\w\/-]*\$?[^\s:]*\.class)/);if(alt)problematicClassEntry=alt[0x1];}console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x21d));if(problematicClassEntry){console['error'](a0_0x16d1d1(0x20d)+problematicClassEntry);try{const tmpDir=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x290));if(!fs['existsSync'](tmpDir))fs[a0_0x16d1d1(0x2d0)](tmpDir,{'recursive':!![]});const extractCmd='\x22'+SEVENZIP+a0_0x16d1d1(0x245)+jarPath+'\x22\x20\x22'+problematicClassEntry+a0_0x16d1d1(0x1b9)+tmpDir+'\x22';try{execSync(extractCmd,{'stdio':'inherit','shell':a0_0x16d1d1(0x27f)});}catch(a0_0x31ea59){try{execSync('\x22'+SEVENZIP+a0_0x16d1d1(0x245)+jarPath+a0_0x16d1d1(0x1d4)+path['basename'](problematicClassEntry)+a0_0x16d1d1(0x1b9)+tmpDir+'\x22',{'stdio':'inherit','shell':a0_0x16d1d1(0x27f)});}catch(a0_0x5cd934){}}const extracted=path[a0_0x16d1d1(0x28d)](tmpDir,path['basename'](problematicClassEntry));if(fs['existsSync'](extracted)){console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1f4)+extracted);try{const javapCmd='\x22'+JDK+a0_0x16d1d1(0x24a)+extracted+'\x22';console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x28b)),execSync(javapCmd,{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)}),console['log']('---\x20fin\x20javap\x20---\x0a');}catch(a0_0x2c555b){console['warn'](a0_0x16d1d1(0x2cc),a0_0x2c555b[a0_0x16d1d1(0x2ce)]);}}else console[a0_0x16d1d1(0x258)]('Impossible\x20d\x27extraire\x20la\x20classe\x20pour\x20diagnostic.');}catch(a0_0x5d5719){console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x29c),a0_0x5d5719['message']);}}try{if(problematicClassEntry){const classPathNoDollar=problematicClassEntry[a0_0x16d1d1(0x29f)]('$')[0x0],javaPath=path[a0_0x16d1d1(0x28d)](projectDir,a0_0x16d1d1(0x229),classPathNoDollar['replace'](/\//g,path[a0_0x16d1d1(0x29d)])+a0_0x16d1d1(0x297));if(fs[a0_0x16d1d1(0x1de)](javaPath)){const content=fs[a0_0x16d1d1(0x1b0)](javaPath,a0_0x16d1d1(0x1d8));if(content[a0_0x16d1d1(0x20f)]('//\x20GENERATED_BY_generate-resources')){console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x270)),fs[a0_0x16d1d1(0x232)](javaPath),removeDir(path['join'](BUILD_DIR,a0_0x16d1d1(0x2df))),makeDir(path['join'](BUILD_DIR,a0_0x16d1d1(0x2df)));const javaFilesNow=[],findJavaFilesLocal=_0x21cb06=>{const _0x5645bf=a0_0x16d1d1,_0x53bd58=fs[_0x5645bf(0x22f)](_0x21cb06);for(const _0xaf9823 of _0x53bd58){const _0xca62de=path[_0x5645bf(0x28d)](_0x21cb06,_0xaf9823),_0x4c9076=fs[_0x5645bf(0x1dc)](_0xca62de);if(_0x4c9076[_0x5645bf(0x1c1)]())findJavaFilesLocal(_0xca62de);else{if(_0xaf9823[_0x5645bf(0x276)]('.java'))javaFilesNow[_0x5645bf(0x287)](_0xca62de);}}};if(fs[a0_0x16d1d1(0x1de)](srcPath))findJavaFilesLocal(srcPath);if(fs[a0_0x16d1d1(0x1de)](path['join'](BUILD_DIR,'generated')))findJavaFilesLocal(path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x26c)));if(javaFilesNow['length']>0x0){let classPathArgParts=['\x22'+ANDROID_JAR+'\x22'];extractedJars&&extractedJars[a0_0x16d1d1(0x2e1)]>0x0&&classPathArgParts[a0_0x16d1d1(0x287)](...extractedJars[a0_0x16d1d1(0x247)](_0x1b92c9=>'\x22'+_0x1b92c9+'\x22'));const classPathArg=classPathArgParts[a0_0x16d1d1(0x28d)](';'),javaFilesStr2=javaFilesNow[a0_0x16d1d1(0x247)](_0x85fc0f=>'\x22'+_0x85fc0f+'\x22')[a0_0x16d1d1(0x28d)]('\x20'),compileCmd2='\x22'+JDK+a0_0x16d1d1(0x2d1)+classPathArg+a0_0x16d1d1(0x25d)+path[a0_0x16d1d1(0x28d)](BUILD_DIR,'classes')+'\x22\x20'+javaFilesStr2;run(compileCmd2,a0_0x16d1d1(0x2e9));const jarCmd2='\x22'+JDK+a0_0x16d1d1(0x225)+jarPath+a0_0x16d1d1(0x23d)+classesDir+a0_0x16d1d1(0x2e5);run(jarCmd2,a0_0x16d1d1(0x1fd));try{execSync(d8Cmd,{'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f)}),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1b1));}catch(a0_0x2dfcaa){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x260)),process[a0_0x16d1d1(0x1ef)](0x1);}}else console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x27d)),process[a0_0x16d1d1(0x1ef)](0x1);}else console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x2d6));}else console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x1eb)+javaPath);}}catch(a0_0x43da6a){console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x1e5),a0_0x43da6a[a0_0x16d1d1(0x2ce)]);}process[a0_0x16d1d1(0x1ef)](0x1);}}else console[a0_0x16d1d1(0x258)]('⚠\x20JAR\x20non\x20trouvé,\x20création\x20DEX\x20vide');console[a0_0x16d1d1(0x2b2)]('\x0a===\x206)\x20AJOUT\x20DU\x20DEX\x20À\x20L\x27APK\x20===');try{if(fs[a0_0x16d1d1(0x1de)](dexPath)){const unsignedApkFull=path['resolve'](BUILD_DIR,path[a0_0x16d1d1(0x265)](apkPath)),classesDexFull=path[a0_0x16d1d1(0x2c6)](dexPath),addDexCmd='\x22'+SEVENZIP+a0_0x16d1d1(0x1d5)+unsignedApkFull+'\x22\x20\x22'+classesDexFull+'\x22';execSync(addDexCmd,{'cwd':path[a0_0x16d1d1(0x2c6)](BUILD_DIR),'stdio':a0_0x16d1d1(0x25f),'shell':a0_0x16d1d1(0x27f),'timeout':0xea60}),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1ca));}else console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x2c3));}catch(a0_0x1ce241){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2d8)+a0_0x1ce241[a0_0x16d1d1(0x2ce)]),process[a0_0x16d1d1(0x1ef)](0x1);}console['log'](a0_0x16d1d1(0x2b9));const alignedApkPath=path['join'](BUILD_DIR,a0_0x16d1d1(0x26a)),unsignedApkPath=path[a0_0x16d1d1(0x28d)](BUILD_DIR,a0_0x16d1d1(0x1b2));fs['existsSync'](apkPath)&&fs[a0_0x16d1d1(0x210)](apkPath,unsignedApkPath);try{run('\x22'+ZIPALIGN+a0_0x16d1d1(0x2e3)+unsignedApkPath+a0_0x16d1d1(0x20a)+alignedApkPath+'\x22','Aligning\x20APK');}catch(a0_0x4c2194){console[a0_0x16d1d1(0x258)](a0_0x16d1d1(0x1ba)),fs[a0_0x16d1d1(0x286)](unsignedApkPath,alignedApkPath);}console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x259));const keystorePath=path[a0_0x16d1d1(0x28d)](projectDir,keystoreName);if(!fs[a0_0x16d1d1(0x1de)](keystorePath)){console['log'](a0_0x16d1d1(0x23f));const keygenCmd='\x22'+JDK+'\x5ckeytool\x22\x20-genkey\x20-noprompt\x20-alias\x20key\x20-dname\x20\x22CN='+appConfig['appName']+'\x22\x20-keystore\x20\x22'+keystorePath+'\x22\x20-storepass\x20123456\x20-keypass\x20123456\x20-keyalg\x20RSA\x20-keysize\x202048\x20-validity\x2010000';try{execSync(keygenCmd,{'cwd':projectDir,'stdio':a0_0x16d1d1(0x1d2),'shell':a0_0x16d1d1(0x27f)}),console['log'](a0_0x16d1d1(0x1b6));}catch(a0_0x231a6){console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x1f9)),process[a0_0x16d1d1(0x1ef)](0x1);}}else console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x293)+keystorePath);if(fs[a0_0x16d1d1(0x1de)](alignedApkPath)){const minSdkVersion=appConfig[a0_0x16d1d1(0x208)]||0x15,signCmd='\x22'+APKSIGNER+a0_0x16d1d1(0x22e)+keystorePath+a0_0x16d1d1(0x2ae)+minSdkVersion+a0_0x16d1d1(0x2c7)+APK_NAME+a0_0x16d1d1(0x20a)+alignedApkPath+'\x22';console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x291)),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x29e)+signCmd),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x252)+APK_NAME);try{const output=execSync(signCmd,{'cwd':projectDir,'stdio':a0_0x16d1d1(0x1d2),'shell':a0_0x16d1d1(0x27f),'encoding':a0_0x16d1d1(0x1b7)});console['log'](a0_0x16d1d1(0x284));}catch(a0_0x2b3aae){console[a0_0x16d1d1(0x2b2)]('Note:\x20Avertissements\x20de\x20signature\x20détectés\x20(non-bloquants)'),console[a0_0x16d1d1(0x2b2)]('Détails:\x20'+a0_0x2b3aae[a0_0x16d1d1(0x2ce)][a0_0x16d1d1(0x1e8)](0x0,0xc8));}const maxWait=0xbb8,startWait=Date['now']();while(!fs[a0_0x16d1d1(0x1de)](APK_NAME)&&Date[a0_0x16d1d1(0x235)]()-startWait<maxWait){require('child_process')['execSync'](a0_0x16d1d1(0x1ed),{'shell':a0_0x16d1d1(0x27f)});}if(fs[a0_0x16d1d1(0x1de)](APK_NAME)){const stats=fs['statSync'](APK_NAME),endTime=Date[a0_0x16d1d1(0x235)](),buildTime=((endTime-startTime)/0x3e8)[a0_0x16d1d1(0x249)](0x2);console['log']('\x0a===\x20✓\x20COMPILATION\x20RÉUSSIE\x20==='),console[a0_0x16d1d1(0x2b2)]('APK\x20créé:\x20'+APK_NAME),console[a0_0x16d1d1(0x2b2)]('Taille:\x20'+stats[a0_0x16d1d1(0x233)]+a0_0x16d1d1(0x2ca)),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x214)+buildTime+'s'),console[a0_0x16d1d1(0x2b2)](a0_0x16d1d1(0x1cc));}else console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x25b)),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x2e8)+APK_NAME),console['error']('Fichiers\x20dans\x20le\x20répertoire:',fs[a0_0x16d1d1(0x22f)](projectDir)[a0_0x16d1d1(0x2e0)](_0x2eb84b=>_0x2eb84b[a0_0x16d1d1(0x276)](a0_0x16d1d1(0x1f5)))),process['exit'](0x1);}else console['error']('ERREUR:\x20aligned.apk\x20introuvable'),console[a0_0x16d1d1(0x231)](a0_0x16d1d1(0x295)+alignedApkPath),process[a0_0x16d1d1(0x1ef)](0x1);
|