metadidomi-builder 1.4.201125 → 1.5.2411250404

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 CHANGED
@@ -6,7 +6,6 @@
6
6
  [![Sponsor Lygos](https://img.shields.io/badge/Sponsor-Lygos-blue?style=for-the-badge)](https://pay.lygosapp.com/$etsmeta)
7
7
  ![Version](https://img.shields.io/badge/version-1.1.171125-blue)
8
8
  ![License](https://img.shields.io/badge/license-MIT-green)
9
- ![Keywords](https://img.shields.io/badge/keywords-electron_python_js_html_css_c_code_installer_protection_obfuscation-blue)
10
9
 
11
10
  ---
12
11
 
@@ -14,20 +13,22 @@
14
13
 
15
14
  1. **[À Propos](#-à-propos)** - Présentation générale
16
15
  2. **[Installation](#-installation)** - Mise en place
17
- 3. **[Afficher les Commandes Disponibles](#afficher-toutes-les-commandes-disponibles)** - Liste interactive des commandes
18
- 4. **[Démarrage Rapide Electron](#-démarrage-rapide---applications-electron)** - Premiers pas Electron
19
- 5. **[Modes de Construction](#-modes-de-construction)** - Options de build Electron
20
- 6. **[Protection du Code](#-système-de-protection-avancé)** - Sécurité (Electron et Python)
21
- 7. **[Packaging Python](#-packaging-dapplications-python)** - Applications Python
22
- 8. **[Comparaison vs electron-builder](#-comparaison-avec-electron-builder)** - Différences et choix
23
- 9. **[Roadmap](#-roadmap-vision-multi-plateforme)** - Futures versions
24
- 10. **[Support](#-support)** - Aide et contact
16
+ 3. **[Démarrage Rapide](#-démarrage-rapide)** - Premiers pas
17
+ 4. **[Configuration](#-configuration)** - Personnalisation
18
+ 5. **[Modes de Construction](#-modes-de-construction)** - Options de build
19
+ 6. **[Gestion des Dépendances](#-gestion-des-dépendances)** - Electron et Python
20
+ 7. **[Protection du Code](#-système-de-protection-avancé)** - Sécurité
21
+ 8. **[Packaging Python](#-packaging-dapplications-python)** - Applications Python
22
+ 9. **[Packaging Android](#-packaging-dapplications-android)** - Applications Android APK
23
+ 10. **[Comparaison](#-comparaison-avec-electron-builder)** - vs electron-builder
24
+ 11. **[Roadmap](#-roadmap)** - Futures versions
25
+ 12. **[Support](#-support-et-contribution)** - Aide et contact
25
26
 
26
27
  ---
27
28
 
28
29
  ## 💝 À Propos
29
30
 
30
- Constructeur **professionnel** pour applications Electron et Python exigeant :
31
+ Constructeur **professionnel** pour applications Electron et Python, Android exigeant :
31
32
  - ✅ **Sécurité maximale** - Chiffrement AES-256, bytecode, obfuscation
32
33
  - ✅ **Builds reproductibles** - 100% déterministe et offline
33
34
  - ✅ **Customisation totale** - Contrôle complet du processus
@@ -47,134 +48,32 @@ Votre soutien permet de :
47
48
 
48
49
  ## 🚀 Installation
49
50
 
50
- ### Installation via npm (Recommandée)
51
+ ### Dépendances Minimales
51
52
 
52
53
  **Pour le développement :** Seuls `electron@^39.1.1` et Python 3.11+ sont requis.
53
- [![](https://img.shields.io/badge/info-Commandes%20disponibles-blue)]
54
54
 
55
- ### Afficher toutes les commandes disponibles
56
-
57
- > **Important :** Avant d'utiliser ces commandes, ajoutez les scripts suivants dans la section `scripts` de votre `package.json` :
58
- >
59
- > ```json
60
- > "help": "node node_modules/metadidomi-builder/build_tools/commands-help.js",
61
- > "help:electron": "node node_modules/metadidomi-builder/build_tools/commands-help.js --type=electron",
62
- > "help:python": "node node_modules/metadidomi-builder/build_tools/commands-help.js --type=python",
63
- > "help:all": "node node_modules/metadidomi-builder/build_tools/commands-help.js --all"
64
- > ```
65
-
66
- Pour voir toutes les commandes adaptées à votre projet (Electron ou Python), utilisez la commande d'aide interactive :
67
-
68
- ```powershell
69
- npm run help # Affiche toutes les commandes disponibles
70
- npm run help:electron # Affiche uniquement les commandes Electron
71
- npm run help:python # Affiche uniquement les commandes Python
72
- npm run help:all # Affiche tout (mode universel)
73
- ```
74
-
75
- **Exemple d'affichage** :
76
- ```
77
- > npm run help
78
-
79
- ─────────────────────────────
80
- METADIDOMI BUILDER - COMMANDES DISPONIBLES
81
- ─────────────────────────────
82
-
83
- 1. BUILD
84
- Crée un installateur Windows NSIS professionnel
85
- Commande: npm run build
86
- Alternatives: npx metadidomi-builder
87
- Sortie: ./dist/MonApp-Setup-1.0.0.exe
88
-
89
- 2. BUILD:PYTHON
90
- Build d'application Python en mode console
91
- Commande: npm run build:python
92
- Alternatives: npx metadidomi-builder-python
93
- Sortie: ./dist/MonApp-Setup-1.0.0.exe
94
-
95
- ...etc
96
- ```
97
-
98
- La commande détecte automatiquement le type de projet et affiche les commandes adaptées, avec explications et exemples.
99
-
100
- Pour plus d'exemples, consultez la section "Exemples Pratiques" plus bas.
101
-
102
- #### Option 1 : Installation dans votre projet
103
-
104
- ```powershell
105
- # Installez le builder comme dépendance de développement
106
- npm install --save-dev metadidomi-builder
107
-
108
- # Ajoutez des scripts dans votre package.json
109
- # "scripts": {
110
- # "build": "metadidomi-builder",
111
- # "build:lite": "set LITE_BUILD=true && metadidomi-builder",
112
- # "build:portable": "set CREATE_PORTABLE_EXE=true && metadidomi-builder",
113
- # "build:python": "node node_modules/metadidomi-builder/build_tools_py/builder.py",
114
- # "build:python:gui": "node node_modules/metadidomi-builder/build_tools_py/builder.py --gui"
115
- # }
116
-
117
- # Puis lancez avec :
118
- npm run build # Build Electron standard
119
- # ou
120
- npm run build:lite # Build Electron optimisé
121
- npm run build:portable # Exécutable portable
122
- npm run build:python # Build Python (console)
123
- npm run build:python:gui # Build Python (GUI)
124
- ```
125
-
126
- #### Option 2 : Utilisation directe avec npx
127
-
128
- ```powershell
129
- # Lancez directement sans installation
130
- npx metadidomi-builder
131
- ```
132
-
133
- #### Option 3 : Installation Globale
134
-
135
- ```powershell
136
- # Installez globalement
137
- npm install -g metadidomi-builder
138
-
139
- # Lancez depuis n'importe où
140
- metadidomi-builder
141
- ```
142
-
143
- ### Installation Manuelle (Avancé)
144
-
145
- Si vous préférez installer manuellement :
146
-
147
- 1. **Clonez le repository**
148
- ```powershell
149
- git clone https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder.git
150
- cd metadidomi-builder
151
- ```
152
-
153
- 2. **Installez les dépendances**
154
55
  ```powershell
155
56
  npm install
156
57
  ```
58
+ # � INSTALLATION DES DÉPENDANCES VENDOR
157
59
 
158
- 3. **Téléchargez les modules vendor** (si absent)
159
- - Téléchargez `vendor.zip` depuis :
160
- https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/1.3.171125/vendor.zip
161
- - Extrayez dans `build_tools/vendor/`
60
+ Si lors de l'installation le dossier `build_tools/vendor` n'est pas présent, suivez ces instructions :
162
61
 
163
- 4. **Lancez le builder**
164
- ```powershell
165
- # Depuis le dossier d'installation
166
- node build_tools/builder.js
62
+ . Téléchargez le fichier `vendor.zip` depuis :
63
+ https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/1.3.171125/vendor.zip
167
64
 
168
- # Ou depuis votre app (en spécifiant le chemin)
169
- node "C:\chemin-vers\metadidomi-builder\build_tools\builder.js"
170
- ```
65
+ En suite télécharger le kit Android:
66
+ https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/Android.zip/android.zip
67
+
68
+ 💡 **Suite** :
69
+ Vous pouvez aussi extraire manuellement le contenu de `vendor.zip` dans le dossier `build_tools/vendor`.
171
70
 
172
71
  ### Modules Embarqués - 100% Offline
173
72
 
174
- Toutes les dépendances essentielles sont incluses dans `node_modules/metadidomi-builder/build_tools/vendor/` (installation npm) ou `build_tools/vendor/` (installation manuelle) :
73
+ Toutes les dépendances essentielles sont incluses dans `build_tools/vendor/` :
175
74
 
176
75
  ```
177
- build_tools/vendor/ (ou node_modules/metadidomi-builder/build_tools/vendor/)
76
+ build_tools/vendor/
178
77
  ├── asar/ # Packaging et archivage
179
78
  ├── bytenode/ # Compilation JavaScript → bytecode V8
180
79
  ├── electron-asar/ # ASAR officiel Electron
@@ -202,26 +101,22 @@ Le builder intègre un **système automatique de signature** avec deux modes :
202
101
 
203
102
  #### Mode 1 : Auto-signé (Défaut - Développement)
204
103
  - ✅ Généré automatiquement lors du premier build
205
- - 📁 Stocké dans `node_modules/metadidomi-builder/build_tools/certs/cert-[hash].pfx` (npm) ou `build_tools/certs/cert-[hash].pfx` (manuel)
206
- - 🔑 Mot de passe dans `cert-[hash].key`
104
+ - 📁 Stocké dans `build_tools/certs/cert-[hash].pfx`
105
+ - 🔑 Mot de passe dans `build_tools/certs/cert-[hash].key`
207
106
  - ⚡ Aucune configuration requise
208
107
 
209
108
  #### Mode 2 : Certificat Personnalisé (Production)
210
109
 
211
110
  ```powershell
212
111
  # Option 1 : Fichier dans le dossier par défaut
213
- # Npm: Placer dans node_modules/metadidomi-builder/build_tools/certs/signing.pfx
214
- # Manuel: Placer dans build_tools/certs/signing.pfx
112
+ # Placer: build_tools/certs/signing.pfx
215
113
 
216
114
  # Option 2 : Variables d'environnement
217
115
  $env:PFX_PATH="chemin/vers/certificat.pfx"
218
116
  $env:PFX_PASS="mot-de-passe-certificat"
219
117
 
220
- # Lancer le build avec npm
221
- npm run build
222
-
223
- # Ou avec npx
224
- npx metadidomi-builder
118
+ # Lancer le build
119
+ node build_tools/builder.js
225
120
  ```
226
121
 
227
122
  **Priorité de signature :**
@@ -232,46 +127,16 @@ npx metadidomi-builder
232
127
 
233
128
  ---
234
129
 
235
- [⬆️ Retour en haut](#-multi-builder-premium)
236
-
237
130
  ## ⚡ Démarrage Rapide
238
131
 
239
- ### Pour les Pressés (< 5 min) - Installation npm
240
-
241
- ```powershell
242
- # 1. Installez le builder
243
- npm i metadidomi-builder
244
-
245
- # 2. Lancez le builder
246
- npm run build
247
-
248
- # 3. C'est tout ! ✅
249
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
250
- ```
251
-
252
- **OU directement avec npx :**
253
-
254
- ```powershell
255
- # 1. Allez dans votre dossier d'application
256
- cd D:\mon-app
257
-
258
- # 2. Lancez le builder directement
259
- npx metadidomi-builder
260
-
261
- > **À savoir :**
262
-
263
- # 3. C'est tout ! ✅
264
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
265
- ```
266
-
267
- ### Alternative : Installation Manuelle
132
+ ### Pour les Pressés (< 5 min)
268
133
 
269
134
  ```powershell
270
135
  # 1. Allez dans votre dossier d'application
271
136
  cd D:\mon-app
272
137
 
273
- # 2. Lancez le builder manuellement
274
- node "C:\chemin-vers\metadidomi-builder\build_tools\builder.js"
138
+ # 2. Lancez le builder
139
+ node D:\chemin-vers\metadidomi-builder\build_tools\builder.js
275
140
 
276
141
  # 3. C'est tout ! ✅
277
142
  # Résultat: ./dist/MonApp-Setup-1.0.0.exe
@@ -288,94 +153,6 @@ mon-app/
288
153
 
289
154
  **Si aucun fichier n'existe, le builder génère une application de démo complète et fonctionnelle !** 🎉
290
155
 
291
- ### ⚠️ Éviter les Boucles Infinies de Build
292
-
293
- **IMPORTANT :** Configurez correctement votre `package.json` pour éviter que le builder relance indéfiniment des builds.
294
-
295
- #### ❌ MAUVAIS - Créé une boucle infinie
296
-
297
- ```json
298
- {
299
- "name": "mon-app",
300
- "version": "1.0.0",
301
- "scripts": {
302
- "start": "npm run build",
303
- "build": "metadidomi-builder"
304
- }
305
- }
306
- ```
307
-
308
- **Problème :** `npm run build` → `metadidomi-builder` → (re)crée `package.json` → retrigger scripts → boucle infinie ❌
309
-
310
- #### ✅ BON - Structure Correcte
311
-
312
- ```json
313
- {
314
- "name": "mon-app",
315
- "version": "1.0.0",
316
- "main": "main.js",
317
- "scripts": {
318
- "start": "electron .",
319
- "dev": "electron .",
320
- "build": "metadidomi-builder",
321
- "build:lite": "set LITE_BUILD=true && metadidomi-builder",
322
- "build:portable": "set CREATE_PORTABLE_EXE=true && metadidomi-builder"
323
- },
324
- "dependencies": {
325
- "electron": "^31.0.0"
326
- }
327
- }
328
- ```
329
-
330
- **Points clés :**
331
- - ✅ `"start"` lance **Electron**, pas le builder
332
- - ✅ `"build"` lance **SEULEMENT** le builder
333
- - ✅ Les scripts ne s'appellent pas mutuellement
334
- - ✅ Pas de hook `prestart` ou `postinstall` qui relancerait build
335
- - ✅ Le builder ne modifie PAS le package.json existant
336
-
337
- #### 🛡️ Règles de Sécurité pour npm scripts
338
-
339
- | Script | Doit faire | Doit PAS faire |
340
- |--------|-----------|---|
341
- | `start` | Lancer Electron ou l'app | Lancer le builder |
342
- | `build` | Lancer le builder | Lancer d'autres scripts |
343
- | `dev` | Mode développement Electron | Lancer le builder |
344
- | `test` | Exécuter les tests | Lancer le builder |
345
-
346
- #### 🔒 Protéger votre package.json
347
-
348
- **Ne pas ajouter ces hooks dangereux :**
349
-
350
- ```json
351
- {
352
- "scripts": {
353
- "prestart": "npm run build", // ❌ DANGER: boucle
354
- "postinstall": "npm run build", // ❌ DANGER: boucle
355
- "prepare": "npm run build" // ❌ DANGER: boucle
356
- }
357
- }
358
- ```
359
-
360
- #### ✅ Alternative Sûre : Scripts Séparés
361
-
362
- Si vous voulez build ET lancer, créez deux scripts distincts :
363
-
364
- ```json
365
- {
366
- "scripts": {
367
- "build": "metadidomi-builder",
368
- "start": "electron .",
369
- "build-and-run": "npm run build && npm start"
370
- }
371
- }
372
- ```
373
-
374
- **Utilisation :**
375
- ```powershell
376
- npm run build-and-run # ✅ Build PUIS lance l'app (une fois seulement)
377
- ```
378
-
379
156
  ---
380
157
 
381
158
  ## 📦 Gestion des Dépendances - Installation et Utilisation
@@ -511,11 +288,7 @@ axios.get('https://api.example.com/data')
511
288
 
512
289
  ### 2. Tester Localement Avant de Packager
513
290
  ```powershell
514
- # Python - Installation npm
515
- .\node_modules\metadidomi-builder\build_tools\vendor\python_embeddable\python.exe -m pip install -r requirements.txt
516
- python __main__.py
517
-
518
- # Python - Installation manuelle
291
+ # Python
519
292
  .\build_tools\vendor\python_embeddable\python.exe -m pip install -r requirements.txt
520
293
  python __main__.py
521
294
 
@@ -551,19 +324,6 @@ import numpy as np
551
324
 
552
325
  ### Python
553
326
 
554
- **Installation npm :**
555
- ```powershell
556
- # Voir les dépendances qui peuvent être mises à jour
557
- .\node_modules\metadidomi-builder\build_tools\vendor\python_embeddable\python.exe -m pip list --outdated
558
-
559
- # Mettre à jour une dépendance
560
- .\node_modules\metadidomi-builder\build_tools\vendor\python_embeddable\python.exe -m pip install --upgrade requests
561
-
562
- # Mettre à jour tous les packages
563
- .\node_modules\metadidomi-builder\build_tools\vendor\python_embeddable\python.exe -m pip install --upgrade -r requirements.txt
564
- ```
565
-
566
- **Installation manuelle :**
567
327
  ```powershell
568
328
  # Voir les dépendances qui peuvent être mises à jour
569
329
  .\build_tools\vendor\python_embeddable\python.exe -m pip list --outdated
@@ -596,21 +356,8 @@ npm update
596
356
 
597
357
  #### ⭐ Standard (Défaut) - Installateur NSIS
598
358
 
599
- **Avec npm :**
600
- ```powershell
601
- npm run build
602
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
603
- ```
604
-
605
- **Avec npx :**
606
- ```powershell
607
- npx metadidomi-builder
608
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
609
- ```
610
-
611
- **Manuel :**
612
359
  ```powershell
613
- node node_modules/metadidomi-builder/build_tools/builder.js
360
+ node build_tools/builder.js
614
361
  # Résultat: ./dist/MonApp-Setup-1.0.0.exe
615
362
  ```
616
363
 
@@ -618,15 +365,9 @@ Crée un **installateur professionnel** avec options d'installation, raccourcis,
618
365
 
619
366
  #### 💾 Portable - Exécutable Autonome
620
367
 
621
- **Avec npm :**
622
- ```powershell
623
- $env:CREATE_PORTABLE_EXE="true"; npm run build
624
- # Résultat: ./dist/MonApp.exe (portable, ~130MB)
625
- ```
626
-
627
- **Avec npx :**
628
368
  ```powershell
629
- $env:CREATE_PORTABLE_EXE="true"; npx metadidomi-builder
369
+ $env:CREATE_PORTABLE_EXE="true"
370
+ node build_tools/builder.js
630
371
  # Résultat: ./dist/MonApp.exe (portable, ~130MB)
631
372
  ```
632
373
 
@@ -634,9 +375,9 @@ Exécutable indépendant sans installation requise.
634
375
 
635
376
  #### ⚡ LITE - Mode Optimisé
636
377
 
637
- **Avec npm :**
638
378
  ```powershell
639
- $env:LITE_BUILD="true"; npm run build
379
+ $env:LITE_BUILD="true"
380
+ node build_tools/builder.js
640
381
  # Résultat: ./dist/MonApp-Setup-1.0.0.exe (optimisé)
641
382
  # Rapport: electron-lite-deps-report.txt
642
383
  ```
@@ -645,52 +386,46 @@ Analyse et exclut automatiquement les modules inutiles. Génère un rapport dét
645
386
 
646
387
  #### 🚫 Sans Installateur
647
388
 
648
- **Avec npm :**
649
389
  ```powershell
650
- $env:SKIP_INSTALLER="true"; npm run build
390
+ $env:SKIP_INSTALLER="true"
391
+ node build_tools/builder.js
651
392
  # Résultat: Ressources de base seulement
652
393
  ```
653
394
 
654
395
  #### 🔐 Avec Chiffrement
655
396
 
656
- **Avec npm :**
657
- ```powershell
658
- $env:KEY="votre-clé-secrète"; npm run build
659
- ```
660
-
661
- **Avec npx :**
662
397
  ```powershell
663
- $env:KEY="votre-clé-secrète"; npx metadidomi-builder
398
+ $env:KEY="votre-clé-secrète"
399
+ node build_tools/builder.js
664
400
  ```
665
401
 
666
402
  #### ⚙️ Compression UPX (Optionnelle)
667
403
 
668
- **Mode rapide (recommandé) :**
669
404
  ```powershell
670
- $env:USE_UPX="true"; npm run build
671
- ```
405
+ # Mode rapide (recommandé)
406
+ $env:USE_UPX="true"
407
+ node build_tools/builder.js
672
408
 
673
- **Mode ultra-brute (très lent, gain maximal) :**
674
- ```powershell
675
- $env:USE_UPX="true"; $env:UPX_ULTRA_BRUTE="true"; npm run build
409
+ # Mode ultra-brute (très lent, gain maximal)
410
+ $env:USE_UPX="true"
411
+ $env:UPX_ULTRA_BRUTE="true"
412
+ node build_tools/builder.js
676
413
  ```
677
414
 
678
415
  #### 🔗 Combinaisons Utiles
679
416
 
680
- **Portable + LITE + Chiffrement :**
681
417
  ```powershell
418
+ # Portable + LITE + Chiffrement
682
419
  $env:CREATE_PORTABLE_EXE="true"
683
420
  $env:LITE_BUILD="true"
684
421
  $env:KEY="clé-secrète"
685
- npm run build
686
- ```
422
+ node build_tools/builder.js
687
423
 
688
- **Avec UPX + Signature personnalisée :**
689
- ```powershell
424
+ # Avec UPX + Signature personnalisée
690
425
  $env:USE_UPX="true"
691
426
  $env:PFX_PATH="cert.pfx"
692
427
  $env:PFX_PASS="mot-de-passe"
693
- npm run build
428
+ node build_tools/builder.js
694
429
  ```
695
430
 
696
431
  ### Paramètres Avancés
@@ -781,25 +516,37 @@ mon-app/
781
516
 
782
517
  Le builder intègre un **système complet de protection du code** avec obfuscation intelligente, chiffrement multi-couches, et anti-analyse.
783
518
 
784
- ### Protection pour Electron
519
+ ### Deux Modes de Protection
785
520
 
786
- **Avec npm :**
521
+ **Mode Interactif** - Questions guidées pour chaque protection
787
522
  ```powershell
788
- npm run build -- --light-protection
789
- npm run build -- --medium-protection
790
- npm run build -- --heavy-protection
523
+ cd metadidomi-builder/build_tools_py/pyMetadidomi
524
+ python pyMetadidomi.py
791
525
  ```
792
526
 
793
- **Avec npx :**
527
+ **Mode CLI** - Automatisé avec arguments
794
528
  ```powershell
795
- npx metadidomi-builder --light-protection
796
- npx metadidomi-builder --medium-protection
797
- npx metadidomi-builder --heavy-protection
529
+ # Presets rapides
530
+ python pyMetadidomi.py script.py --light-protection # Léger
531
+ python pyMetadidomi.py script.py --medium-protection # Moyen
532
+ python pyMetadidomi.py script.py --heavy-protection # Maximal
533
+
534
+ # Options individuelles
535
+ python pyMetadidomi.py script.py --carbon # Obfuscation
536
+ python pyMetadidomi.py script.py --junk # Code parasite
537
+ python pyMetadidomi.py script.py --anti-vm # Anti-VM
538
+ python pyMetadidomi.py script.py --multi-encrypt # Chiffrement multi-couches
798
539
  ```
799
540
 
800
- **Remarque :** Pour les projets Python, voir la section [Protection du Code Python](#niveaux-de-protection-du-code-python).
541
+ ### Protection pour Electron
542
+
543
+ ```powershell
544
+ node build_tools/builder.js --light-protection
545
+ node build_tools/builder.js --medium-protection
546
+ node build_tools/builder.js --heavy-protection
547
+ ```
801
548
 
802
- 👉 **[📖 Documentation complète des protections →](node_modules/metadidomi-builder/build_tools_py/PROTECTION_COMMANDS.md)**
549
+ 👉 **[📖 Documentation complète des protections →](build_tools_py/PROTECTION_COMMANDS.md)**
803
550
 
804
551
  ## Construction LITE (optimisation)
805
552
  ```powershell
@@ -811,22 +558,20 @@ Génère un rapport `electron-lite-deps-report.txt` avec les modules analysés.
811
558
  ## Clé de Chiffrement Personnalisée
812
559
  ```powershell
813
560
  $env:KEY="votre-clé-secrète"
814
- npm run build
561
+ node build_tools/builder.js
815
562
  ```
816
563
  Si non défini, une clé est générée automatiquement.
817
564
 
818
565
  ## Compression UPX
819
- **Mode rapide (défaut) :**
820
566
  ```powershell
567
+ # Mode rapide (défaut)
821
568
  $env:USE_UPX="true"
822
- npm run build
823
- ```
569
+ node build_tools/builder.js
824
570
 
825
- **Mode ultra-brute (très lent) :**
826
- ```powershell
571
+ # Mode ultra-brute (très lent)
827
572
  $env:USE_UPX="true"
828
573
  $env:UPX_ULTRA_BRUTE="true"
829
- npm run build
574
+ node build_tools/builder.js
830
575
  ```
831
576
 
832
577
  ---
@@ -871,83 +616,19 @@ Builder (compile, chiffre, empaque, signe)
871
616
 
872
617
  ## 📝 Exemples Pratiques
873
618
 
874
- ### Installation npm + Utilisation - Electron
875
-
876
- **Exemple 1 : Setup complet avec tous les scripts npm**
877
-
878
- ```powershell
879
- # Installez le builder
880
- npm i metadidomi-builder
881
-
882
- # Ajoutez les scripts à votre package.json:
883
- # "scripts": {
884
- # "start": "electron .",
885
- # "dev": "electron .",
886
- # "build": "metadidomi-builder",
887
- # "build:lite": "set LITE_BUILD=true && metadidomi-builder",
888
- # "build:portable": "set CREATE_PORTABLE_EXE=true && metadidomi-builder",
889
- # "build:encrypted": "set KEY=ma-cle-secrete && metadidomi-builder",
890
- # "build-and-run": "npm run build && echo Build complete!"
891
- # }
892
-
893
- # Puis lancez avec :
894
- npm run build # Build standard → ./dist/MonApp-Setup-1.0.0.exe
895
- npm run build:lite # Build optimisé → ./dist/MonApp-Setup-1.0.0.exe
896
- npm run build:portable # Exécutable portable → ./dist/MonApp.exe
897
- npm run build:encrypted # Avec clé → ./dist/MonApp-Setup-1.0.0.exe (chiffré)
898
- npm run build-and-run # Build puis message
899
- ```
900
-
901
- **Exemple 2 : Avec options avancées dans package.json**
902
-
903
- ```json
904
- {
905
- "name": "mon-app-electron",
906
- "version": "1.0.0",
907
- "main": "main.js",
908
- "scripts": {
909
- "start": "electron .",
910
- "dev": "electron .",
911
- "build": "metadidomi-builder",
912
- "build:lite": "set LITE_BUILD=true && metadidomi-builder",
913
- "build:portable": "set CREATE_PORTABLE_EXE=true && metadidomi-builder",
914
- "build:upx": "set USE_UPX=true && metadidomi-builder",
915
- "build:full": "set CREATE_PORTABLE_EXE=true && set LITE_BUILD=true && set USE_UPX=true && metadidomi-builder",
916
- "build:protected": "set LITE_BUILD=true && metadidomi-builder --medium-protection"
917
- },
918
- "dependencies": {
919
- "electron": "^31.0.0"
920
- }
921
- }
922
- ```
923
-
924
- **Exemple 3 : Avec npx (sans installation)**
925
-
926
619
  ```powershell
927
- npx metadidomi-builder # Build standard
928
- npx metadidomi-builder --light-protection # Build avec protection légère
929
- npx metadidomi-builder --medium-protection # Build avec protection moyenne
930
- ```
931
-
932
- npm run build
933
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
934
- ```
620
+ # Mode simple (depuis votre app)
621
+ cd D:\MonApp
622
+ node C:\metadidomi-builder\build_tools\builder.js
935
623
 
936
- **Exemple 2 : Avec npx (sans installation)**
937
- ```powershell
938
- npx metadidomi-builder
939
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
940
- ```
624
+ # Avec source et sortie personnalisées
625
+ node build_tools/builder.js --app-src D:\mon-app --output D:\dist
941
626
 
942
- **Exemple 3 : Avec options personnalisées**
943
- ```powershell
944
- npm run build -- --light-protection
945
- # Ou
946
- $env:KEY="ma-clé-secrète"; npm run build
947
- ```
627
+ # Avec chiffrement
628
+ $env:KEY="ma-clé-secrète"
629
+ node build_tools/builder.js --app-src C:\MonApp
948
630
 
949
- **Exemple 4 : Portable + LITE + UPX**
950
- ```powershell
631
+ # Portable + LITE + UPX
951
632
  $env:CREATE_PORTABLE_EXE="true"
952
633
  $env:LITE_BUILD="true"
953
634
  $env:USE_UPX="true"
@@ -1014,6 +695,11 @@ L'injection ajoute automatiquement :
1014
695
 
1015
696
  ---
1016
697
 
698
+ ## 📊 Comparaison avec electron-builder
699
+ - Options d'obfuscation sûres et compatibles
700
+ - Pas de transformation agressive du code
701
+ - Préserve la stabilité de l'application
702
+
1017
703
  ### 📊 Protection multiniveau
1018
704
  Cette approche assure :
1019
705
  - ✅ **Sécurité maximale** : Protection forte contre l'analyse statique
@@ -1402,105 +1088,43 @@ L'empaquetage récursif est optimisé pour :
1402
1088
  | **Chiffrement ressources** | ✅ AES-256 intégré | ❌ Addon requis |
1403
1089
  | **Bytecode protection** | ✅ bytenode natif | ❌ Non |
1404
1090
  | **Mode LITE** | ✅ Analyse dépendances | ❌ Non |
1405
- | **Build reproducible** | ✅ 100% déterministe | ⚠️ Partiel |
1406
- | **Packaging Python** | ✅ Oui (NSIS + obfuscation) | ❌ Non |
1407
- | **Protection code Python** | ✅ pyMetadidomi (light/medium/heavy) | ❌ Non |
1408
- | **Multi-plateforme** | ⏳ Q1-2026 (macOS/Linux) | ✅ Windows/macOS/Linux |
1409
- | **Communauté** | 🆕 En croissance | ✅ Très large |
1410
- | **Support commercial** | ✅ Direct (ETS METADIDOMI) | ✅ Communauté + sponsors |
1411
-
1412
- ### 🎯 Tableau Récapitulatif
1413
-
1414
- **metadidomi-builder** :
1415
- - ✅ **Sécurité maximale** - AES-256, bytecode, obfuscation pyMetadidomi
1416
- - ✅ **100% offline** - Zéro dépendance externe, tous les outils embarqués
1417
- - ✅ **Builds reproductibles** - Déterministe et versionnable
1418
- - ✅ **Python support** - Applications Python complètes avec installateurs NSIS
1419
- - ⏳ **Multi-plateforme** - Windows maintenant, macOS/Linux 2026
1420
-
1421
- **electron-builder** :
1422
- - ✅ **Multi-plateforme établi** - Windows, macOS, Linux, AppImage, Snap
1423
- - ✅ **Configuration simple** - Template facile à adapter
1424
- - ✅ **Communauté large** - Nombreuses extensions et plugins
1425
- - ⚠️ **Dépendances réseau** - Nécessite téléchargements externe
1426
- - ❌ **Python non supporté** - Electron uniquement
1427
-
1428
- ### 💡 Comment Choisir?
1429
-
1430
- **Utilisez metadidomi-builder si vous avez besoin de :**
1431
- - 🔐 Sécurité critique (finance, santé, militaire)
1432
- - 📦 Packaging Python standalone avec installateur professionnel
1433
- - 🔒 Obfuscation et protection du code (anti-reverse engineering)
1434
- - 🚫 Environnement complètement offline
1435
- - ⚙️ Contrôle total sur le processus de build
1436
-
1437
- **Utilisez electron-builder si vous avez besoin de :**
1438
- - 🖥️ Multi-plateforme stable et mature
1439
- - 🚀 Setup rapide et facile (peu de configuration)
1440
- - 👥 Accès à une large communauté et d'extensions
1441
- - 📱 Support macOS/Linux dès maintenant
1442
- - 🔄 Updates automatiques intégrées
1091
+ | **Build reproducible** | ✅ Oui | ⚠️ Partiel |
1443
1092
 
1444
- ---
1093
+ **metadidomi-builder** : Optimal pour sécurité maximale, 100% offline, protection bytecode
1094
+ **electron-builder** : Optimal pour multi-plateforme, configuration simple, communauté large
1095
+
1096
+ 👉 **Choisir metadidomi-builder si** : sécurité critique, environnement offline, control total
1097
+ 👉 **Choisir electron-builder si** : multi-plateforme, setup simple, app standard
1445
1098
 
1446
- [⬆️ Retour en haut](#-multi-builder-premium)
1099
+ ---
1447
1100
 
1448
1101
  ## � Packaging d'Applications Python
1449
1102
 
1450
1103
  Le builder inclut aussi un **système complet de packaging Python** via `builder.py` pour créer des applications Windows standalone avec installateurs NSIS professionnels.
1451
1104
 
1452
-
1453
1105
  ### 🚀 Démarrage Rapide - Applications Python
1454
1106
 
1455
- **Option 1 : Via npm (Recommandée)**
1107
+ **Le plus simple** - Exécutez le builder Python depuis votre dossier d'application :
1456
1108
 
1457
1109
  ```powershell
1458
- # Installez le builder
1459
- npm i metadidomi-builder
1460
-
1461
- # Ajoutez des scripts dans votre package.json
1462
- # "scripts": {
1463
- # "build:python": "python node_modules\\metadidomi-builder\\build_tools_py\\builder.py --app-src ./src",
1464
- # "build:python:gui": "python node_modules\\metadidomi-builder\\build_tools_py\\builder.py --gui --app-src ./src"
1465
- # }
1466
-
1467
- # Puis lancez avec :
1468
- npm run build:python # Mode console (par défaut)
1469
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
1470
-
1471
- # OU
1472
- npm run build:python:gui # Mode GUI (sans console)
1473
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
1474
- ```
1475
-
1476
- > **Astuce :** Placez toujours vos sources Python dans un dossier `src/` et ajoutez l’option `--app-src ./src` à vos scripts dans le `package.json`. Cela évite les erreurs de scan des dossiers `node_modules` et `vendor` (chemins trop longs ou fichiers manquants).
1477
- > Placez vos fichiers sources Python (`config.py`, `__main__.py`, etc.) dans un dossier séparé (ex : `src/`).
1478
- > Puis lancez le build en précisant le chemin source :
1479
- > ```powershell
1480
- > npm run build:python -- --app-src ./src
1481
- > ```
1482
- > Cela évite que le builder scanne le dossier `node_modules` et les vendors, et prévient les erreurs de chemin trop long ou manquant.
1483
-
1484
- **Option 2 : Avec npx (sans installation)**
1110
+ # Depuis votre répertoire d'application Python
1111
+ cd D:\mon-app-python
1112
+ python D:\chemin-vers\metadidomi-builder\build_tools_py\builder.py
1485
1113
 
1486
- ```powershell
1487
- npx metadidomi-builder-python
1488
1114
  # Résultat: ./dist/MonApp-Setup-1.0.0.exe
1489
1115
  ```
1490
1116
 
1491
- **Option 3 : Installation Manuelle**
1117
+ **Ou avec options personnalisées :**
1492
1118
 
1493
1119
  ```powershell
1494
- # Mode console simple
1495
- node "C:\chemin-vers\metadidomi-builder\build_tools_py\builder.py"
1496
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
1120
+ # Source et sortie personnalisées
1121
+ python builder.py --app-src D:\mon-app --output D:\dist
1497
1122
 
1498
1123
  # Mode GUI (sans fenêtre console)
1499
- node "C:\chemin-vers\metadidomi-builder\build_tools_py\builder.py" --gui
1500
- # Résultat: ./dist/MonApp-Setup-1.0.0.exe
1124
+ python builder.py --gui
1501
1125
 
1502
- # Avec source et sortie personnalisées
1503
- node "C:\chemin-vers\metadidomi-builder\build_tools_py\builder.py" --app-src D:\mon-app --output D:\dist --gui
1126
+ # Combiné
1127
+ python builder.py --app-src D:\mon-app --output D:\dist --gui
1504
1128
  ```
1505
1129
 
1506
1130
  ### 📋 Structure Minimale d'une Application Python
@@ -1720,9 +1344,7 @@ Le builder utilise **Python Embeddable** pour les utilisateurs finaux :
1720
1344
  - ✅ Distribution portable
1721
1345
  - ✅ Inclus dans l'installateur NSIS
1722
1346
 
1723
- **Localisation :**
1724
- - Installation npm : `node_modules/metadidomi-builder/build_tools/vendor/python_embeddable/`
1725
- - Installation manuelle : `build_tools/vendor/python_embeddable/`
1347
+ **Localisation :** `build_tools/vendor/python_embeddable/`
1726
1348
 
1727
1349
  ### 🔐 Protection du Code Python
1728
1350
 
@@ -1745,24 +1367,6 @@ Le builder utilise **Python Embeddable** pour les utilisateurs finaux :
1745
1367
  - Code Python injecté dynamiquement
1746
1368
  - Exécution directe sans interpréteur externe
1747
1369
 
1748
- #### Niveaux de protection du code Python
1749
-
1750
- Vous pouvez protéger votre code Python lors du build avec différents niveaux de protection :
1751
-
1752
- ```powershell
1753
- npm run build:python -- --app-src ./src --light-protection
1754
- npm run build:python:gui -- --app-src ./src --medium-protection
1755
- npm run build:python -- --app-src ./src --heavy-protection
1756
- ```
1757
-
1758
- **Options de protection :**
1759
-
1760
- - `--light-protection` : Obfuscation légère (carbon + junk)
1761
- - `--medium-protection` : Obfuscation moyenne (carbon + junk + bugs + dead-code)
1762
- - `--heavy-protection` : Protection maximale (toutes les options)
1763
-
1764
- **Remarque :** Ces options ne concernent que les projets Python. Pour Electron, voir la section correspondante.
1765
-
1766
1370
  ### 📊 Fichiers Générés
1767
1371
 
1768
1372
  ```
@@ -1781,59 +1385,54 @@ dist/
1781
1385
 
1782
1386
  #### Exemple 1 : Application Console Simple
1783
1387
 
1784
- **Avec npm :**
1785
1388
  ```powershell
1786
1389
  # Structure
1787
1390
  mon-app/
1788
- src/
1789
- config.py
1790
- __main__.py
1391
+ config.py
1392
+ __main__.py
1791
1393
 
1792
1394
  # Build
1793
1395
  cd mon-app
1794
- npm run build:python -- --app-src ./src
1396
+ python ..\builder.py
1795
1397
  # Résultat: ./dist/MonApp-Setup-1.0.0.exe
1796
1398
  ```
1797
1399
 
1798
1400
  #### Exemple 2 : Application Tkinter GUI
1799
1401
 
1800
- **Avec npm :**
1801
1402
  ```powershell
1802
1403
  # Structure
1803
1404
  mon-app-gui/
1804
- src/
1805
- config.py
1806
- __main__.py ← Interface Tkinter
1807
- assets/
1808
- icon.ico
1405
+ config.py
1406
+ __main__.py ← Interface Tkinter
1407
+ assets/
1408
+ icon.ico
1809
1409
 
1810
1410
  # Build (mode GUI pour éviter console)
1811
- npm run build:python:gui -- --app-src ./src
1411
+ cd mon-app-gui
1412
+ python ..\..\builder.py --gui
1812
1413
  # Résultat: ./dist/MonApp-Setup-1.0.0.exe (pas de console)
1813
1414
  ```
1814
1415
 
1815
1416
  #### Exemple 3 : Application Complexe Multi-Fichiers
1816
1417
 
1817
- **Avec npm :**
1818
1418
  ```powershell
1819
1419
  # Structure complexe
1820
1420
  mon-app/
1821
- src/
1822
- config.py
1823
- __main__.py
1824
- utils/
1825
- helpers.py
1826
- validators.py
1827
- lib/
1828
- core.py
1829
- handlers/
1830
- events.py
1831
- assets/
1832
- icon.ico
1833
- data.json
1421
+ config.py
1422
+ __main__.py
1423
+ utils/
1424
+ helpers.py
1425
+ validators.py
1426
+ lib/
1427
+ core.py
1428
+ handlers/
1429
+ events.py
1430
+ assets/
1431
+ icon.ico
1432
+ data.json
1834
1433
 
1835
- # Build
1836
- npm run build:python -- --app-src ./src
1434
+ # Build avec sortie personnalisée
1435
+ python builder.py --app-src D:\mon-app --output D:\dist
1837
1436
  # TOUS les fichiers récursivement inclus ✅
1838
1437
  ```
1839
1438
 
@@ -1841,52 +1440,30 @@ npm run build:python -- --app-src ./src
1841
1440
 
1842
1441
  #### Avec Clé de Chiffrement Personnalisée
1843
1442
 
1844
- **Avec npm :**
1845
- ```powershell
1846
- # Via variable d'environnement
1847
- $env:KEY = "ma-clé-secrète-32-caractères"
1848
- npm run build:python -- --app-src ./src
1849
- ```
1850
-
1851
- **Manuel :**
1852
1443
  ```powershell
1853
1444
  # Option 1: Via argument
1854
- node build_tools_py/builder.py --app-src ./src --key "ma-clé-secrète-32-caractères"
1445
+ python builder.py --key "ma-clé-secrète-32-caractères"
1855
1446
 
1856
1447
  # Option 2: Via variable d'environnement
1857
1448
  $env:KEY = "ma-clé-secrète-32-caractères"
1858
- node build_tools_py/builder.py --app-src ./src
1449
+ python builder.py
1859
1450
  ```
1860
1451
 
1861
1452
  #### Sans Compilation .pyc
1862
1453
 
1863
- **Avec npm :**
1864
-
1865
1454
  ```powershell
1866
- npm run build:python -- --no-pyc --app-src ./src
1867
- ```
1868
-
1869
- **Manuel :**
1870
- ```powershell
1871
- node build_tools_py/builder.py --app-src ./src --no-pyc
1455
+ python builder.py --no-pyc
1872
1456
  # Les .py restent non compilés (plus rapide au build)
1873
1457
  ```
1874
1458
 
1875
1459
  #### Combinaisons
1876
1460
 
1877
- **Avec npm :**
1878
- ```powershell
1879
- # GUI + clé custom
1880
- $env:KEY = "clé-secrète"; npm run build:python:gui -- --app-src ./src
1881
- ```
1882
-
1883
- **Manuel :**
1884
1461
  ```powershell
1885
- # GUI + clé custom
1886
- node build_tools_py/builder.py --app-src ./src --gui --key "clé-secrète"
1462
+ # GUI + sortie personnalisée + clé custom
1463
+ python builder.py --gui --output D:\dist --key "clé-secrète"
1887
1464
 
1888
1465
  # Source custom + GUI + sans .pyc
1889
- node build_tools_py/builder.py --app-src D:\mon-app --gui --no-pyc
1466
+ python builder.py --app-src D:\mon-app --gui --no-pyc
1890
1467
  ```
1891
1468
 
1892
1469
  ### 🔍 Dépistage et Débogage
@@ -1980,18 +1557,786 @@ Python Embeddable distribution not found
1980
1557
  ```
1981
1558
  **✅ SOLUTION:** Vérifiez le dossier `build_tools/vendor/python_embeddable/`
1982
1559
 
1983
- ### 📞 Support
1560
+ ---
1561
+ # Metadidomi Crone - Générateur d'APK Android
1984
1562
 
1985
- Pour les questions sur le packaging Python :
1986
- - 📖 Consultez ce README
1987
- - 🐛 Vérifiez les logs du builder
1988
- - 💬 Contactez ETS METADIDOMI
1563
+ Une solution complète et automatisée pour créer des applications Android (APK) sans besoin de connaissances avancées en Android Studio.
1564
+
1565
+ <a id="top"></a>
1566
+
1567
+ ## 📋 Table des matières
1568
+
1569
+ - [Installation rapide](#installation-rapide)
1570
+ - [Structure d'un projet](#structure-dun-projet)
1571
+ - [Créer une nouvelle application](#créer-une-nouvelle-application)
1572
+ - [Configuration de l'application](#configuration-de-lapplication)
1573
+ - [Générer l'APK](#générer-lapk)
1574
+ - [Exemples](#exemples)
1575
+ - [Dépannage](#dépannage)
1576
+ - [Options avancées](#options-avancées)
1989
1577
 
1990
1578
  ---
1991
1579
 
1992
- [⬆️ Retour en haut](#-multi-builder-premium)
1580
+ ## Installation rapide
1581
+
1582
+ 🔝 [Retour en haut](#top)
1583
+
1584
+ ### Prérequis
1585
+
1586
+ - **Node.js** (v14 ou supérieur) - [Télécharger](https://nodejs.org)
1587
+ - **PowerShell** (Windows) ou **Bash** (Mac/Linux)
1588
+ - **Python 3** (pour la génération d'icônes) - [Télécharger](https://www.python.org)
1589
+ - **Pillow** (PIL) pour Python : `pip install Pillow`
1590
+
1591
+ ### Vérifier l'installation
1592
+
1593
+ ```powershell
1594
+ node --version
1595
+ python --version
1596
+ npm --version
1597
+ ```
1598
+
1599
+ ### Installation via npm (Recommandé)
1600
+
1601
+ Installez metadidomi-builder comme dépendance locale dans votre projet :
1602
+
1603
+ ```powershell
1604
+
1605
+ npm install metadidomi-builder
1606
+ ```
1607
+
1608
+ Créez un `package.json` à la racine de votre projet :
1609
+
1610
+ ```json
1611
+ {
1612
+ "name": "mon-app-android",
1613
+ "version": "1.0.0",
1614
+ "scripts": {
1615
+ "build": "node node_modules/metadidomi-builder/build_tools/build_apk.js .",
1616
+ "build-debug": "node node_modules/metadidomi-builder/build_tools/build_apk.js . --fail-on-missing",
1617
+ "build-restore": "node node_modules/metadidomi-builder/build_tools/build_apk.js . --restore",
1618
+ "build-icons": "node node_modules/metadidomi-builder/build_tools/generate-icons.js ."
1619
+ },
1620
+ "keywords": [
1621
+ "android",
1622
+ "apk",
1623
+ "builder"
1624
+ ],
1625
+ "author": "Metadidomi",
1626
+ "license": "MIT",
1627
+ "dependencies": {
1628
+ "metadidomi-builder": "file:../metadidomi-builder",
1629
+ "sharp": "^0.32.0"
1630
+ }
1631
+ }
1632
+ ```
1633
+
1634
+ Puis installez et lancez le build :
1635
+
1636
+ ```powershell
1637
+ npm install
1638
+ npm run build
1639
+ ```
1640
+
1641
+ ---
1642
+
1643
+ ## Structure d'un projet
1644
+
1645
+ 🔝 [Retour en haut](#top)
1646
+
1647
+ Chaque application Android doit suivre cette structure :
1648
+
1649
+ ```
1650
+ MonApp/
1651
+ ├── app-config.json # Configuration de l'app
1652
+ ├── AndroidManifest.xml # Déclaration Android (généré automatiquement)
1653
+ ├── src/
1654
+ │ └── com/example/monapp/
1655
+ │ └── MainActivity.java # Code Java principal
1656
+ ├── res/
1657
+ │ ├── layout/
1658
+ │ │ └── activity_main.xml # Interface utilisateur
1659
+ │ ├── values/
1660
+ │ │ ├── strings.xml # Textes et traductions
1661
+ │ │ ├── colors.xml # Couleurs
1662
+ │ │ └── styles.xml # Styles et thèmes
1663
+ │ ├── mipmap-hdpi/
1664
+ │ │ └── ic_launcher.png # Icône de l'app (auto-générée)
1665
+ │ └── drawable/ # Images supplémentaires (optionnel)
1666
+ └── build/ # Généré automatiquement (à ignorer)
1667
+ ```
1668
+
1669
+ ---
1670
+
1671
+ ## Créer une nouvelle application
1672
+
1673
+ ### Étape 1 : Créer la structure des dossiers
1674
+
1675
+ 🔝 [Retour en haut](#top)
1676
+
1677
+ ```powershell
1678
+ mkdir MonApp\src\com\example\monapp
1679
+ mkdir MonApp\res\layout
1680
+ mkdir MonApp\res\values
1681
+ mkdir MonApp\res\mipmap-hdpi
1682
+ ```
1683
+
1684
+ ### Étape 2 : Créer `app-config.json`
1685
+
1686
+ Ce fichier contient toutes les informations de votre application.
1687
+
1688
+ ```json
1689
+ {
1690
+ "appName": "MonApp",
1691
+ "appVersion": "1.0.0",
1692
+ "appDescription": "Ma première application Android",
1693
+ "packageName": "com.example.monapp",
1694
+ "minSdkVersion": 21,
1695
+ "targetSdkVersion": 34,
1696
+ "colors": {
1697
+ "primary": "#2196F3",
1698
+ "primaryDark": "#1976D2",
1699
+ "accent": "#FF5722"
1700
+ }
1701
+ }
1702
+ ```
1703
+
1704
+ **Explications des paramètres :**
1705
+ - `appName` : Nom affiché de l'application
1706
+ - `appVersion` : Version sémantique (majeur.mineur.patch)
1707
+ - `packageName` : Identifiant unique (format domaine inversé)
1708
+ - `minSdkVersion` : Version Android minimale (21 = Android 5.0)
1709
+ - `targetSdkVersion` : Version Android ciblée (34 = Android 14)
1710
+ - `colors` : Couleurs principales (format hexadécimal)
1711
+
1712
+ ### Étape 3 : Créer l'interface (`activity_main.xml`)
1713
+
1714
+ Fichier : `res/layout/activity_main.xml`
1715
+
1716
+ ```xml
1717
+ <?xml version="1.0" encoding="utf-8"?>
1718
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
1719
+ android:orientation="vertical"
1720
+ android:layout_width="match_parent"
1721
+ android:layout_height="match_parent"
1722
+ android:gravity="center"
1723
+ android:padding="16dp">
1724
+
1725
+ <TextView
1726
+ android:id="@+id/titleText"
1727
+ android:layout_width="wrap_content"
1728
+ android:layout_height="wrap_content"
1729
+ android:text="Bienvenue dans MonApp"
1730
+ android:textSize="24sp"
1731
+ android:textStyle="bold" />
1732
+
1733
+ <Button
1734
+ android:id="@+id/myButton"
1735
+ android:layout_width="wrap_content"
1736
+ android:layout_height="wrap_content"
1737
+ android:text="Appuyez-moi"
1738
+ android:layout_marginTop="16dp" />
1739
+
1740
+ </LinearLayout>
1741
+ ```
1742
+
1743
+ ### Étape 4 : Créer les textes (`strings.xml`)
1744
+
1745
+ Fichier : `res/values/strings.xml`
1746
+
1747
+ ```xml
1748
+ <resources>
1749
+ <string name="app_name">MonApp</string>
1750
+ <string name="app_version">1.0.0</string>
1751
+ <string name="app_description">Ma première application</string>
1752
+ <string name="hello_world">Bienvenue</string>
1753
+ <string name="action_settings">Paramètres</string>
1754
+ <string name="back">Retour</string>
1755
+ <string name="forward">Suivant</string>
1756
+ <string name="reload">Recharger</string>
1757
+ </resources>
1758
+ ```
1759
+
1760
+ ### Étape 5 : Créer le code Java (`MainActivity.java`)
1761
+
1762
+ Fichier : `src/com/example/monapp/MainActivity.java`
1763
+
1764
+ ```java
1765
+ package com.example.monapp;
1766
+
1767
+ import android.app.Activity;
1768
+ import android.os.Bundle;
1769
+ import android.widget.Button;
1770
+ import android.widget.Toast;
1771
+ import android.view.View;
1772
+ import android.util.Log;
1773
+
1774
+ public class MainActivity extends Activity {
1775
+ private static final String TAG = "MonApp";
1776
+
1777
+ @Override
1778
+ protected void onCreate(Bundle savedInstanceState) {
1779
+ super.onCreate(savedInstanceState);
1780
+ setContentView(R.layout.activity_main);
1781
+ Log.d(TAG, "MainActivity créée");
1782
+
1783
+ Button myButton = (Button) findViewById(R.id.myButton);
1784
+ myButton.setOnClickListener(new View.OnClickListener() {
1785
+ @Override
1786
+ public void onClick(View v) {
1787
+ Toast.makeText(MainActivity.this, "Bouton cliqué!", Toast.LENGTH_SHORT).show();
1788
+ Log.d(TAG, "Bouton cliqué");
1789
+ }
1790
+ });
1791
+ }
1792
+ }
1793
+ ```
1794
+
1795
+ ### Étape 6 : Ajouter une icône
1796
+
1797
+ Placez une image PNG (96x96 pixels) dans `res/mipmap/`.
1798
+
1799
+ **Le système générera automatiquement les variantes pour tous les écrans.**
1800
+
1801
+ ---
1802
+
1803
+ ## Configuration de l'application
1804
+
1805
+ 🔝 [Retour en haut](#top)
1806
+
1807
+ ### `app-config.json` complet
1808
+
1809
+ ```json
1810
+ {
1811
+ "appName": "MonApp",
1812
+ "appVersion": "1.0.0",
1813
+ "appDescription": "Ma première application Android",
1814
+ "packageName": "com.example.monapp",
1815
+ "minSdkVersion": 21,
1816
+ "targetSdkVersion": 34,
1817
+ "colors": {
1818
+ "primary": "#2196F3",
1819
+ "primaryDark": "#1976D2",
1820
+ "accent": "#FF5722"
1821
+ },
1822
+ "minimalRequiredFiles": [
1823
+ "AndroidManifest.xml",
1824
+ "res/values/strings.xml",
1825
+ "res/values/styles.xml",
1826
+ "res/layout/activity_main.xml"
1827
+ ]
1828
+ }
1829
+ ```
1830
+
1831
+ ---
1832
+
1833
+ ## Générer l'APK
1834
+
1835
+ 🔝 [Retour en haut](#top)
1836
+
1837
+ ### Avec npm
1838
+
1839
+ ```powershell
1840
+ # Build standard
1841
+ npm run build
1842
+
1843
+ # Build avec vérification stricte
1844
+ npm run build-debug
1845
+
1846
+ # Générer les icônes
1847
+ npm run build-icons
1848
+ ```
1849
+
1850
+ ### Sans sauvegarde
1851
+
1852
+ ```powershell
1853
+ node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --no-backup
1854
+ ```
1855
+
1856
+ ### Restaurer depuis une sauvegarde
1857
+
1858
+ ```powershell
1859
+ node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --restore
1860
+ ```
1861
+
1862
+ ### Résultat
1863
+
1864
+ Après une génération réussie, vous trouverez :
1865
+
1866
+ ```
1867
+ MonApp/
1868
+ └── MonApp.apk ← Votre application, prête à installer!
1869
+ ```
1870
+
1871
+ Fichier de sortie : `MonApp/MonApp.apk`
1872
+
1873
+ **Taille typique :** 2-5 MB
1874
+
1875
+ ---
1876
+
1877
+ ## Exemples
1878
+
1879
+ 🔝 [Retour en haut](#top)
1880
+
1881
+ ### Exemple 1 : Application Compteur
1882
+
1883
+ Voir le dossier `CounterApp/` pour un exemple complet d'une application de compteur avec :
1884
+ - Boutons d'incrémentation/décrémentation
1885
+ - Affichage d'un compteur
1886
+ - Interface colorée
1887
+
1888
+ ### Exemple 2 : Application Simple
1889
+
1890
+ Consultez `MyApp/` pour une application de base.
1891
+
1892
+ ### Exemple 3 : Application Avancée
1893
+
1894
+ `MyApp_Advanced/` contient des fonctionnalités plus complexes.
1895
+
1896
+ ---
1897
+
1898
+ ## Dépannage
1899
+
1900
+ 🔝 [Retour en haut](#top)
1901
+
1902
+ ### Erreur : "Aucun fichier Java trouvé"
1903
+
1904
+ **Cause** : Le dossier `src/` est vide ou mal structuré.
1905
+
1906
+ **Solution** :
1907
+ 1. Vérifiez que `MainActivity.java` existe dans `src/com/example/monapp/`
1908
+ 2. Vérifiez le nom du package (doit correspondre à `packageName` dans `app-config.json`)
1909
+
1910
+ ```
1911
+ src/
1912
+ └── com/example/monapp/
1913
+ └── MainActivity.java ✓ Correct
1914
+ ```
1915
+
1916
+ ### Erreur : "resource string/... not found"
1917
+
1918
+ **Cause** : Une chaîne de caractères référencée n'existe pas dans `strings.xml`.
1919
+
1920
+ **Solution** :
1921
+ 1. Ouvrez `res/values/strings.xml`
1922
+ 2. Ajoutez la chaîne manquante avec son ID correct :
1923
+ ```xml
1924
+ <string name="fragment1">Fragments</string>
1925
+ <string name="action_click">Cliquez ici</string>
1926
+ ```
1927
+ 3. **Assurez-vous que le nom correspond exactement** à celui utilisé dans votre layout XML
1928
+
1929
+ **Exemple d'erreur rencontrée (CounterApp) :**
1930
+ ```
1931
+ error: resource string/fragment1 not found
1932
+ ```
1933
+ **Correction appliquée :**
1934
+ ```xml
1935
+ <!-- res/values/strings.xml -->
1936
+ <resources>
1937
+ <string name="app_name">CounterApp</string>
1938
+ <string name="fragment1">Compteur</string>
1939
+ <string name="increment">Incrémenter</string>
1940
+ <string name="decrement">Décrémenter</string>
1941
+ <string name="reset">Réinitialiser</string>
1942
+ </resources>
1943
+ ```
1944
+
1945
+ ### Erreur : "cannot find symbol: variable R"
1946
+
1947
+ **Cause** : Les ressources n'ont pas été compilées correctement.
1948
+
1949
+ **Solution** :
1950
+ 1. Supprimez le dossier `build/`
1951
+ 2. Vérifiez que `res/values/strings.xml` est valide (XML bien formé, pas d'accents mal encodés)
1952
+ 3. Relancez la génération complète
1953
+
1954
+ ### Erreur : "D8 compilation failed" avec "NullPointerException"
1955
+
1956
+ **Cause** : Classes anonymes mal générées lors de la compilation DEX.
1957
+
1958
+ **Symptômes** :
1959
+ ```
1960
+ java.lang.NullPointerException: Cannot invoke "String.length()"
1961
+ Exception in thread "main" java.lang.NullPointerException
1962
+ ```
1963
+
1964
+ **Solution - Utilisez `implements View.OnClickListener` au lieu de classes anonymes** :
1965
+
1966
+ ❌ **INCORRECT (cause l'erreur D8)** :
1967
+ ```java
1968
+ button.setOnClickListener(new View.OnClickListener() {
1969
+ @Override
1970
+ public void onClick(View v) {
1971
+ counter++;
1972
+ updateDisplay();
1973
+ }
1974
+ });
1975
+ ```
1976
+
1977
+ ✅ **CORRECT** :
1978
+ ```java
1979
+ public class MainActivity extends Activity implements View.OnClickListener {
1980
+ private Button incrementBtn, decrementBtn;
1981
+
1982
+ @Override
1983
+ public void onClick(View v) {
1984
+ int id = v.getId();
1985
+ if (id == R.id.incrementBtn) counter++;
1986
+ else if (id == R.id.decrementBtn) counter--;
1987
+ }
1988
+ }
1989
+ ```
1990
+
1991
+ **Pourquoi** : D8 (compilateur DEX) a des problèmes avec les classes anonymes imbriquées. Les interfaces nommées sont plus fiables.
1992
+
1993
+ ### Erreur : "cannot find symbol: variable helloText" ou autre ID de ressource
1994
+
1995
+ **Cause** : Le code Java référence un ID qui n'existe pas dans le layout XML.
1996
+
1997
+ **Symptôme** :
1998
+ ```
1999
+ error: cannot find symbol
2000
+ symbol: variable helloText
2001
+ location: class MainActivity
2002
+ ```
2003
+
2004
+ **Solution** :
2005
+ 1. Vérifiez que l'ID existe dans `res/layout/activity_main.xml` :
2006
+ ```xml
2007
+ <TextView
2008
+ android:id="@+id/helloText"
2009
+ ...
2010
+ />
2011
+ ```
2012
+ 2. Vérifiez que vous utilisez le bon nom en Java :
2013
+ ```java
2014
+ TextView helloText = (TextView) findViewById(R.id.helloText);
2015
+ ```
2016
+ 3. Assurez-vous que l'ID correspond EXACTEMENT (majuscules/minuscules)
2017
+
2018
+ **Exemple de correction (CounterApp)** :
2019
+ ```xml
2020
+ <!-- res/layout/activity_main.xml -->
2021
+ <LinearLayout ...>
2022
+ <TextView
2023
+ android:id="@+id/counterDisplay"
2024
+ android:layout_width="match_parent"
2025
+ android:layout_height="wrap_content"
2026
+ android:text="0"
2027
+ android:textSize="72sp" />
2028
+
2029
+ <Button
2030
+ android:id="@+id/incrementBtn"
2031
+ android:text="Incrémenter" />
2032
+ </LinearLayout>
2033
+ ```
2034
+
2035
+ ### Erreur : "AndroidManifest.xml not found"
2036
+
2037
+ **Cause** : Fichier de configuration critique manquant ou mal généré.
2038
+
2039
+ **Solution** :
2040
+ 1. Vérifiez que `app-config.json` existe à la racine du projet
2041
+ 2. Assurez-vous que le JSON est valide (syntaxe correcte, pas de virgules manquantes)
2042
+ 3. Relancez le build avec l'option `--fail-on-missing` pour diagnostiquer :
2043
+ ```powershell
2044
+ node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --fail-on-missing
2045
+ ```
2046
+
2047
+ ### Erreur : "Fichiers minimums manquants"
2048
+
2049
+ **Cause** : Des fichiers essentiels n'existent pas.
2050
+
2051
+ **Files requises minimales** :
2052
+ - `app-config.json` → Configuration de l'app
2053
+ - `AndroidManifest.xml` → Descripteur (généré automatiquement)
2054
+ - `res/values/strings.xml` → Textes
2055
+ - `res/values/styles.xml` → Styles (généré automatiquement)
2056
+ - `res/layout/activity_main.xml` → Interface utilisateur
2057
+ - `src/com/example/monapp/MainActivity.java` → Code principal
2058
+
2059
+ **Solution** :
2060
+ ```powershell
2061
+ # Mode diagnostique - affiche les fichiers manquants sans échouer
2062
+ node "metadidomi-builder\build_tools\build_apk.js" "MonApp"
2063
+
2064
+ # Mode strict - échoue si des fichiers manquent
2065
+ node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --fail-on-missing
2066
+ ```
2067
+
2068
+ ### L'APK n'est pas généré
2069
+
2070
+ **Cause** : Erreur lors de la signature ou de l'assemblage final.
2071
+
2072
+ **Solution** :
2073
+ 1. Supprimez le fichier `.keystore` dans le dossier du projet :
2074
+ ```powershell
2075
+ rm "MonApp\.keystore"
2076
+ ```
2077
+ 2. Relancez la génération (un nouveau keystore sera créé) :
2078
+ ```powershell
2079
+ node "metadidomi-builder\build_tools\build_apk.js" "MonApp"
2080
+ ```
2081
+
2082
+ ### Erreur : "Invalid app-config.json"
2083
+
2084
+ **Cause** : Fichier de configuration mal formé.
2085
+
2086
+ **Vérifiez** :
2087
+ ```json
2088
+ {
2089
+ "appName": "MonApp", // ✓ String valide
2090
+ "appVersion": "1.0.0", // ✓ Format sémantique (majeur.mineur.patch)
2091
+ "packageName": "com.example.monapp", // ✓ Format domaine inversé
2092
+ "minSdkVersion": 21, // ✓ Nombre entier >= 21
2093
+ "targetSdkVersion": 34, // ✓ Nombre entier
2094
+ "colors": {
2095
+ "primary": "#2196F3", // ✓ Couleur hexadécimale valide
2096
+ "primaryDark": "#1976D2",
2097
+ "accent": "#FF5722"
2098
+ }
2099
+ }
2100
+ ```
2101
+
2102
+ ### Erreur : "Layout XML invalide"
2103
+
2104
+ **Cause** : Syntaxe XML incorrecte dans `activity_main.xml`.
2105
+
2106
+ **Vérifiez** :
2107
+ - Les balises ouvrantes et fermantes correspondent (`<LinearLayout>` ... `</LinearLayout>`)
2108
+ - Les attributs android: sont valides
2109
+ - Les IDs sont uniques et bien formatés (`android:id="@+id/monId"`)
2110
+ - Les textes spéciaux sont échappés (`&amp;`, `&lt;`, `&gt;`)
2111
+
2112
+ **Exemple correct** :
2113
+ ```xml
2114
+ <?xml version="1.0" encoding="utf-8"?>
2115
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2116
+ android:orientation="vertical"
2117
+ android:layout_width="match_parent"
2118
+ android:layout_height="match_parent">
2119
+
2120
+ <Button
2121
+ android:id="@+id/myButton"
2122
+ android:layout_width="wrap_content"
2123
+ android:layout_height="wrap_content"
2124
+ android:text="Cliquez-moi" />
2125
+
2126
+ </LinearLayout>
2127
+ ```
2128
+
2129
+ ### Erreur : "Icônes manquantes"
2130
+
2131
+ **Cause** : L'icône n'a pas été générée ou redimensionnée correctement.
2132
+
2133
+ **Solution** :
2134
+ 1. Placez une image PNG (96x96 pixels minimum) dans `res/drawable/` ou `res/mipmap/`
2135
+ 2. Exécutez le générateur d'icônes :
2136
+ ```powershell
2137
+ node "metadidomi-builder\build_tools\generate-icons.js" "MonApp"
2138
+ ```
2139
+ 3. Vérifiez que tous les dossiers mipmap ont été créés :
2140
+ ```
2141
+ res/mipmap-mdpi/ic_launcher.png (48x48)
2142
+ res/mipmap-hdpi/ic_launcher.png (72x72)
2143
+ res/mipmap-xhdpi/ic_launcher.png (96x96)
2144
+ res/mipmap-xxhdpi/ic_launcher.png (144x144)
2145
+ res/mipmap-xxxhdpi/ic_launcher.png (192x192)
2146
+ ```
2147
+
2148
+ ### Erreur : "Package name already exists"
2149
+
2150
+ **Cause** : Un package Android avec le même nom est déjà installé.
2151
+
2152
+ **Solution** :
2153
+ 1. Changez le `packageName` dans `app-config.json` :
2154
+ ```json
2155
+ "packageName": "com.example.monapp.v2"
2156
+ ```
2157
+ 2. Régénérez l'APK
2158
+ 3. Ou : désinstallez l'ancienne app avant d'installer la nouvelle
2159
+
2160
+ ---
2161
+
2162
+ ## Options avancées
2163
+
2164
+ 🔝 [Retour en haut](#top)
2165
+
2166
+ ### Personnaliser les ressources générées automatiquement
2167
+
2168
+ Par défaut, le système génère :
2169
+ - `AndroidManifest.xml` (descripteur de l'app)
2170
+ - `res/values/colors.xml` (couleurs)
2171
+ - `res/values/styles.xml` (thèmes)
2172
+
2173
+ Ces fichiers sont générés à chaque build. Pour les personnaliser, créez-les manuellement et le système les préservera.
2174
+
2175
+ ### Ajouter des ressources personnalisées
2176
+
2177
+ ```
2178
+ res/
2179
+ ├── drawable/ # Images 1x (160 DPI)
2180
+ ├── drawable-hdpi/ # Images 1.5x (240 DPI)
2181
+ ├── drawable-xhdpi/ # Images 2x (320 DPI)
2182
+ ├── drawable-xxhdpi/ # Images 3x (480 DPI)
2183
+ ├── drawable-xxxhdpi/ # Images 4x (640 DPI)
2184
+ ├── font/ # Polices personnalisées
2185
+ ├── menu/ # Menus
2186
+ ├── raw/ # Fichiers non compressés
2187
+ └── anim/ # Animations
2188
+ ```
2189
+
2190
+ ### Générer les icônes automatiquement
2191
+
2192
+ Placez une image source dans `res/drawable/` ou `res/mipmap/` :
2193
+
2194
+ ```powershell
2195
+ node "metadidomi-builder\build_tools\generate-icons.js" "MonApp"
2196
+ ```
2197
+
2198
+ Le système créera automatiquement les variantes pour tous les écrans :
2199
+ - `mipmap-mdpi` (48×48)
2200
+ - `mipmap-hdpi` (72×72)
2201
+ - `mipmap-xhdpi` (96×96)
2202
+ - `mipmap-xxhdpi` (144×144)
2203
+ - `mipmap-xxxhdpi` (192×192)
2204
+
2205
+ ### Utiliser des variables d'environnement
2206
+
2207
+ ```powershell
2208
+ $env:PROJECT_PATH = "C:\MonApp"
2209
+ node "metadidomi-builder\build_tools\build_apk.js"
2210
+ ```
2211
+
2212
+ ---
2213
+
2214
+ ## Architecture du système
2215
+
2216
+ 🔝 [Retour en haut](#top)
2217
+
2218
+ ```
2219
+ metadidomi-builder/
2220
+ ├── build_tools/
2221
+ │ ├── build_apk.js # Orchestration principale
2222
+ │ ├── generate-resources.js # Génération des ressources XML
2223
+ │ ├── generate-icons.js # Redimensionnement des icônes
2224
+ │ ├── backup-manager.js # Gestion des sauvegardes
2225
+ │ └── vendor/ # SDK Android et JDK (inclus)
2226
+ └── build_tools_py/ # Outils Python avancés (optionnel)
2227
+ ```
2228
+
2229
+ ---
2230
+
2231
+ ## Étapes du build expliquées
2232
+
2233
+ 🔝 [Retour en haut](#top)
2234
+
2235
+ 1. **Génération des ressources** : Crée `AndroidManifest.xml`, couleurs, styles
2236
+ 2. **Génération des icônes** : Redimensionne l'icône pour toutes les densités
2237
+ 3. **Vérification des fichiers** : Contrôle la présence des fichiers minimums
2238
+ 4. **Compilation des ressources** : AAPT2 compile XML et images
2239
+ 5. **Liaison des ressources** : Génération de `R.java` avec les IDs de ressources
2240
+ 6. **Compilation Java** : Javac compile le code Java
2241
+ 7. **Création du JAR** : Empaquetage des classes Java
2242
+ 8. **Conversion DEX** : D8 convertit en format Android (DEX)
2243
+ 9. **Assemblage APK** : Création de la structure APK
2244
+ 10. **Alignement** : Zipalign optimise la structure APK
2245
+ 11. **Signature** : Signature numérique de l'APK
2246
+ 12. **Résultat** : APK prête à être installée
2247
+
2248
+ ---
2249
+
2250
+ ## Installation de l'APK sur un téléphone
2251
+
2252
+ 🔝 [Retour en haut](#top)
2253
+
2254
+ ### Via USB
2255
+
2256
+ ```powershell
2257
+ adb install -r "MonApp\MonApp.apk"
2258
+ ```
2259
+
2260
+ ### Via partage de fichier
2261
+
2262
+ 1. Transférez le fichier `.apk` sur votre téléphone
2263
+ 2. Ouvrez l'explorateur de fichiers
2264
+ 3. Appuyez sur le fichier `.apk`
2265
+ 4. Confirmez l'installation
2266
+
2267
+ ---
2268
+
2269
+ ## Conseils et bonnes pratiques
2270
+
2271
+ 🔝 [Retour en haut](#top)
2272
+
2273
+ ✅ **À faire :**
2274
+ - Tester l'app fréquemment
2275
+ - Utiliser des noms de ressources explicites
2276
+ - Commenter le code Java
2277
+ - Utiliser `Log.d()` pour déboguer
2278
+ - Versionner votre code (Git)
2279
+
2280
+ ❌ **À éviter :**
2281
+ - Charger des images trop volumineuses
2282
+ - Utiliser des classes anonymes complexes
2283
+ - Modifier les fichiers générés automatiquement
2284
+ - Laisser des ressources inutilisées
2285
+
2286
+ ---
2287
+
2288
+ ## Foire aux questions
2289
+
2290
+ 🔝 [Retour en haut](#top)
2291
+
2292
+ **Q : Puis-je créer plusieurs activités ?**
2293
+ A : Oui, ajoutez des classes Java dans `src/` et déclarez-les dans `AndroidManifest.xml`.
2294
+
2295
+ **Q : Comment ajouter des dépendances externes ?**
2296
+ A : Actuellement, seules les APIs Android intégrées sont supportées.
2297
+
2298
+ **Q : L'APK fonctionne-t-il sur tous les téléphones ?**
2299
+ A : Oui, tant qu'ils sont Android 5.0 (API 21) ou supérieur.
2300
+
2301
+ **Q : Puis-je mettre à jour l'APK ?**
2302
+ A : Oui, augmentez `appVersion` dans `app-config.json` et régénérez.
2303
+
2304
+ **Q : Les APK sont-elles vraiment signées ?**
2305
+ A : Oui, automatiquement avec une clé de développement auto-générée.
2306
+
2307
+ ---
2308
+
2309
+ ## Support
2310
+
2311
+ 🔝 [Retour en haut](#top)
2312
+
2313
+ Pour des problèmes ou des questions :
2314
+
2315
+ 1. Consultez le dossier `CounterApp/` pour un exemple complet
2316
+ 2. Vérifiez les logs du build pour les erreurs
2317
+ 3. Assurez-vous que tous les fichiers requis existent
2318
+
2319
+ ---
2320
+
2321
+ ## Version
2322
+
2323
+ - **Metadidomi Crone** : v1.0.0
2324
+ - **Android SDK** : 34 (Android 14)
2325
+ - **Build Tools** : 34.0.0
2326
+ - **Dernière mise à jour** : Novembre 2025
2327
+
2328
+ ---
2329
+
2330
+ ### 📞 Support
2331
+
2332
+ Pour les questions sur le packaging Python :
2333
+ - 📖 Consultez ce README
2334
+ - 🐛 Vérifiez les logs du builder
2335
+ - 💬 Contactez ETS METADIDOMI
2336
+
2337
+ ---
1993
2338
 
1994
- ## �🗺️ Roadmap - Vision Multi-Plateforme
2339
+ ## 🗺️ Roadmap - Vision Multi-Plateforme
1995
2340
 
1996
2341
  ### Phase 1 : Windows ✅ (Actuelle)
1997
2342
  - ✅ Build portable (.exe)