metadidomi-builder 1.4.171125 → 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.
Files changed (32) hide show
  1. package/README.md +779 -5
  2. package/build_tools/backup-manager.js +3 -0
  3. package/build_tools/build_apk.js +3 -0
  4. package/build_tools/builder.js +1 -1
  5. package/build_tools/certs/cert-65198130.key +1 -0
  6. package/build_tools/certs/cert-65198130.pfx +0 -0
  7. package/build_tools/certs/cert-f1fad9b5.key +1 -0
  8. package/build_tools/certs/cert-f1fad9b5.pfx +0 -0
  9. package/build_tools/commands-help.js +465 -0
  10. package/build_tools/create-example-app.js +73 -0
  11. package/build_tools/decrypt_pfx_password.js +26 -1
  12. package/build_tools/diagnose-apk.js +61 -0
  13. package/build_tools/generate-icons.js +3 -0
  14. package/build_tools/generate-resources.js +3 -0
  15. package/build_tools/restore-resources.js +3 -0
  16. package/build_tools/templates/nsis_template.nsi +8 -9
  17. package/build_tools_py/__pycache__/build_android_apk.cpython-311.pyc +0 -0
  18. package/build_tools_py/__pycache__/build_apk_complete.cpython-311.pyc +0 -0
  19. package/build_tools_py/__pycache__/build_apk_offline.cpython-311.pyc +0 -0
  20. package/build_tools_py/__pycache__/build_apk_real.cpython-311.pyc +0 -0
  21. package/build_tools_py/__pycache__/build_apk_ui.cpython-311.pyc +0 -0
  22. package/build_tools_py/build_nsis_installer.py +3 -3
  23. package/build_tools_py/builder.py +3 -3
  24. package/build_tools_py/pyMetadidomi/README.md +98 -0
  25. package/build_tools_py/pyMetadidomi/__pycache__/pyMetadidomi.cpython-311.pyc +0 -0
  26. package/build_tools_py/pyMetadidomi/pyMetadidomi.py +4 -3
  27. package/build_tools_py/templates/gradle_build.template +46 -0
  28. package/build_tools_py/templates/settings_gradle.template +18 -0
  29. package/create-app.bat +31 -0
  30. package/create-app.ps1 +27 -0
  31. package/package.json +19 -5
  32. package/build_tools/7zsd.sfx +0 -0
package/README.md CHANGED
@@ -19,15 +19,16 @@
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
21
  8. **[Packaging Python](#-packaging-dapplications-python)** - Applications Python
22
- 9. **[Comparaison](#-comparaison-avec-electron-builder)** - vs electron-builder
23
- 10. **[Roadmap](#-roadmap)** - Futures versions
24
- 11. **[Support](#-support-et-contribution)** - Aide et contact
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
@@ -61,6 +62,9 @@ Si lors de l'installation le dossier `build_tools/vendor` n'est pas présent, su
61
62
  . Téléchargez le fichier `vendor.zip` depuis :
62
63
  https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/1.3.171125/vendor.zip
63
64
 
65
+ En suite télécharger le kit Android:
66
+ https://github.com/METADIDOMIOFFICIEL/Metadidomi-Builder/releases/download/Android.zip/android.zip
67
+
64
68
  💡 **Suite** :
65
69
  Vous pouvez aussi extraire manuellement le contenu de `vendor.zip` dans le dossier `build_tools/vendor`.
66
70
 
@@ -1553,6 +1557,776 @@ Python Embeddable distribution not found
1553
1557
  ```
1554
1558
  **✅ SOLUTION:** Vérifiez le dossier `build_tools/vendor/python_embeddable/`
1555
1559
 
1560
+ ---
1561
+ # Metadidomi Crone - Générateur d'APK Android
1562
+
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)
1577
+
1578
+ ---
1579
+
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
+
1556
2330
  ### 📞 Support
1557
2331
 
1558
2332
  Pour les questions sur le packaging Python :
@@ -1562,7 +2336,7 @@ Pour les questions sur le packaging Python :
1562
2336
 
1563
2337
  ---
1564
2338
 
1565
- ## �🗺️ Roadmap - Vision Multi-Plateforme
2339
+ ## 🗺️ Roadmap - Vision Multi-Plateforme
1566
2340
 
1567
2341
  ### Phase 1 : Windows ✅ (Actuelle)
1568
2342
  - ✅ Build portable (.exe)