metadidomi-builder 1.6.2812251812 → 1.7.3101261533

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
@@ -17,19 +17,19 @@
17
17
  4. **[Configuration](#-configuration)** - Personnalisation
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
- 7. **[Protection du Code](#-système-de-protection-avancé)** - Sécurité
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
20
+ 7. **[Build APK Android](#-build-apk-android)** - Construction d'APK
21
+ 8. **[Protection du Code](#-système-de-protection-avancé)** - Sécurité
22
+ 9. **[Utilisation de jsMetadidomi](#-utilisation-de-jsmetadidomi)** - Protection JavaScript
23
+ 10. **[Packaging Python](#-packaging-dapplications-python)** - Applications Python
24
24
  11. **[Comparaison](#-comparaison-avec-electron-builder)** - vs electron-builder
25
- 12. **[Roadmap](#-roadmap)** - Futures versions
25
+ 12. **[Roadmap](#-roadmap---vision-multi-plateforme)** - Futures versions
26
26
  13. **[Support](#-support-et-contribution)** - Aide et contact
27
27
 
28
28
  ---
29
29
 
30
30
  ## 💝 À Propos
31
31
 
32
- Constructeur **professionnel** pour applications Electron et Python, Android exigeant :
32
+ Constructeur **professionnel** pour applications Electron et Python :
33
33
  - ✅ **Sécurité maximale** - Chiffrement AES-256, bytecode, obfuscation
34
34
  - ✅ **Builds reproductibles** - 100% déterministe et offline
35
35
  - ✅ **Customisation totale** - Contrôle complet du processus
@@ -513,6 +513,68 @@ mon-app/
513
513
  - ✅ **Empaquetage ASAR récursif** - Tous les fichiers inclus à tous les niveaux
514
514
  - ✅ **Gestion Python** - Support applications Python standalone
515
515
 
516
+ # 📱 Build APK Android
517
+
518
+ Construisez facilement des applications Android APK avec le builder.
519
+
520
+ ### Démarrage Rapide
521
+ ```powershell
522
+ # Depuis votre dossier d'application Android
523
+ cd D:\mon-app-android
524
+ node D:\chemin-vers\metadidomi-builder\build_tools\build_apk.js release
525
+
526
+ # Résultat: ./app/build/outputs/apk/release/app-release.apk
527
+ ```
528
+
529
+ ### Commandes Disponibles (Direct)
530
+ ```powershell
531
+ # Build debug (chemin complet)
532
+ node D:\chemin-vers\metadidomi-builder\build_tools\build_apk.js debug
533
+
534
+ # Build release (chemin complet)
535
+ node D:\chemin-vers\metadidomi-builder\build_tools\build_apk.js release
536
+
537
+ # Mode offline
538
+ node D:\chemin-vers\metadidomi-builder\build_tools\build_apk.js release --offline
539
+
540
+ # Nettoyer
541
+ node D:\chemin-vers\metadidomi-builder\build_tools\build_apk.js clean
542
+ ```
543
+
544
+ ### Configuration npm (package.json)
545
+
546
+ Créez ou modifiez votre `package.json` avec les scripts appropriés :
547
+
548
+ ```json
549
+ {
550
+ "name": "mon-app-android",
551
+ "version": "1.0.0",
552
+ "description": "Application Android",
553
+ "scripts": {
554
+ "build:debug": "node node_modules/metadidomi-builder/build_tools/build_apk.js debug",
555
+ "build:release": "node node_modules/metadidomi-builder/build_tools/build_apk.js release",
556
+ "build:offline": "node node_modules/metadidomi-builder/build_tools/build_apk.js debug --offline",
557
+ "build:release:offline": "node node_modules/metadidomi-builder/build_tools/build_apk.js release --offline",
558
+ "clean": "node node_modules/metadidomi-builder/build_tools/build_apk.js clean"
559
+ }
560
+ }
561
+ ```
562
+
563
+ Puis exécutez :
564
+ ```powershell
565
+ npm run build:release
566
+ ```
567
+
568
+ ### Fonctionnalités
569
+ - ✅ Support Gradle automatique
570
+ - ✅ Signature APK (debug et release)
571
+ - ✅ ZipAlign optimisation
572
+ - ✅ Génération AAB bundle
573
+ - ✅ Mode offline complète
574
+ - ✅ JDK et Android SDK vendorisés
575
+
576
+ ---
577
+
516
578
  # 🛡️ Système de Protection Avancé
517
579
 
518
580
  Le builder intègre un **système complet de protection du code** avec obfuscation intelligente, chiffrement multi-couches, et anti-analyse.
@@ -1672,774 +1734,6 @@ Python Embeddable distribution not found
1672
1734
  ```
1673
1735
  **✅ SOLUTION:** Vérifiez le dossier `build_tools/vendor/python_embeddable/`
1674
1736
 
1675
- ---
1676
- # Metadidomi Crone - Générateur d'APK Android
1677
-
1678
- Une solution complète et automatisée pour créer des applications Android (APK) sans besoin de connaissances avancées en Android Studio.
1679
-
1680
- <a id="top"></a>
1681
-
1682
- ## 📋 Table des matières
1683
-
1684
- - [Installation rapide](#installation-rapide)
1685
- - [Structure d'un projet](#structure-dun-projet)
1686
- - [Créer une nouvelle application](#créer-une-nouvelle-application)
1687
- - [Configuration de l'application](#configuration-de-lapplication)
1688
- - [Générer l'APK](#générer-lapk)
1689
- - [Exemples](#exemples)
1690
- - [Dépannage](#dépannage)
1691
- - [Options avancées](#options-avancées)
1692
-
1693
- ---
1694
-
1695
- ## Installation rapide
1696
-
1697
- 🔝 [Retour en haut](#top)
1698
-
1699
- ### Prérequis
1700
-
1701
- - **Node.js** (v14 ou supérieur) - [Télécharger](https://nodejs.org)
1702
- - **PowerShell** (Windows) ou **Bash** (Mac/Linux)
1703
- - **Python 3** (pour la génération d'icônes) - [Télécharger](https://www.python.org)
1704
- - **Pillow** (PIL) pour Python : `pip install Pillow`
1705
-
1706
- ### Vérifier l'installation
1707
-
1708
- ```powershell
1709
- node --version
1710
- python --version
1711
- npm --version
1712
- ```
1713
-
1714
- ### Installation via npm (Recommandé)
1715
-
1716
- Installez metadidomi-builder comme dépendance locale dans votre projet :
1717
-
1718
- ```powershell
1719
-
1720
- npm install metadidomi-builder
1721
- ```
1722
-
1723
- Créez un `package.json` à la racine de votre projet :
1724
-
1725
- ```json
1726
- {
1727
- "name": "mon-app-android",
1728
- "version": "1.0.0",
1729
- "scripts": {
1730
- "build": "node node_modules/metadidomi-builder/build_tools/build_apk.js .",
1731
- "build-debug": "node node_modules/metadidomi-builder/build_tools/build_apk.js . --fail-on-missing",
1732
- "build-restore": "node node_modules/metadidomi-builder/build_tools/build_apk.js . --restore",
1733
- "build-icons": "node node_modules/metadidomi-builder/build_tools/generate-icons.js ."
1734
- },
1735
- "keywords": [
1736
- "android",
1737
- "apk",
1738
- "builder"
1739
- ],
1740
- "author": "Metadidomi",
1741
- "license": "MIT",
1742
- "dependencies": {
1743
- "metadidomi-builder": "file:../metadidomi-builder",
1744
- "sharp": "^0.32.0"
1745
- }
1746
- }
1747
- ```
1748
-
1749
- Puis installez et lancez le build :
1750
-
1751
- ```powershell
1752
- npm install
1753
- npm run build
1754
- ```
1755
-
1756
- ---
1757
-
1758
- ## Structure d'un projet
1759
-
1760
- 🔝 [Retour en haut](#top)
1761
-
1762
- Chaque application Android doit suivre cette structure :
1763
-
1764
- ```
1765
- MonApp/
1766
- ├── app-config.json # Configuration de l'app
1767
- ├── AndroidManifest.xml # Déclaration Android (généré automatiquement)
1768
- ├── src/
1769
- │ └── com/example/monapp/
1770
- │ └── MainActivity.java # Code Java principal
1771
- ├── res/
1772
- │ ├── layout/
1773
- │ │ └── activity_main.xml # Interface utilisateur
1774
- │ ├── values/
1775
- │ │ ├── strings.xml # Textes et traductions
1776
- │ │ ├── colors.xml # Couleurs
1777
- │ │ └── styles.xml # Styles et thèmes
1778
- │ ├── mipmap-hdpi/
1779
- │ │ └── ic_launcher.png # Icône de l'app (auto-générée)
1780
- │ └── drawable/ # Images supplémentaires (optionnel)
1781
- └── build/ # Généré automatiquement (à ignorer)
1782
- ```
1783
-
1784
- ---
1785
-
1786
- ## Créer une nouvelle application
1787
-
1788
- ### Étape 1 : Créer la structure des dossiers
1789
-
1790
- 🔝 [Retour en haut](#top)
1791
-
1792
- ```powershell
1793
- mkdir MonApp\src\com\example\monapp
1794
- mkdir MonApp\res\layout
1795
- mkdir MonApp\res\values
1796
- mkdir MonApp\res\mipmap-hdpi
1797
- ```
1798
-
1799
- ### Étape 2 : Créer `app-config.json`
1800
-
1801
- Ce fichier contient toutes les informations de votre application.
1802
-
1803
- ```json
1804
- {
1805
- "appName": "MonApp",
1806
- "appVersion": "1.0.0",
1807
- "appDescription": "Ma première application Android",
1808
- "packageName": "com.example.monapp",
1809
- "minSdkVersion": 21,
1810
- "targetSdkVersion": 34,
1811
- "colors": {
1812
- "primary": "#2196F3",
1813
- "primaryDark": "#1976D2",
1814
- "accent": "#FF5722"
1815
- }
1816
- }
1817
- ```
1818
-
1819
- **Explications des paramètres :**
1820
- - `appName` : Nom affiché de l'application
1821
- - `appVersion` : Version sémantique (majeur.mineur.patch)
1822
- - `packageName` : Identifiant unique (format domaine inversé)
1823
- - `minSdkVersion` : Version Android minimale (21 = Android 5.0)
1824
- - `targetSdkVersion` : Version Android ciblée (34 = Android 14)
1825
- - `colors` : Couleurs principales (format hexadécimal)
1826
-
1827
- ### Étape 3 : Créer l'interface (`activity_main.xml`)
1828
-
1829
- Fichier : `res/layout/activity_main.xml`
1830
-
1831
- ```xml
1832
- <?xml version="1.0" encoding="utf-8"?>
1833
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
1834
- android:orientation="vertical"
1835
- android:layout_width="match_parent"
1836
- android:layout_height="match_parent"
1837
- android:gravity="center"
1838
- android:padding="16dp">
1839
-
1840
- <TextView
1841
- android:id="@+id/titleText"
1842
- android:layout_width="wrap_content"
1843
- android:layout_height="wrap_content"
1844
- android:text="Bienvenue dans MonApp"
1845
- android:textSize="24sp"
1846
- android:textStyle="bold" />
1847
-
1848
- <Button
1849
- android:id="@+id/myButton"
1850
- android:layout_width="wrap_content"
1851
- android:layout_height="wrap_content"
1852
- android:text="Appuyez-moi"
1853
- android:layout_marginTop="16dp" />
1854
-
1855
- </LinearLayout>
1856
- ```
1857
-
1858
- ### Étape 4 : Créer les textes (`strings.xml`)
1859
-
1860
- Fichier : `res/values/strings.xml`
1861
-
1862
- ```xml
1863
- <resources>
1864
- <string name="app_name">MonApp</string>
1865
- <string name="app_version">1.0.0</string>
1866
- <string name="app_description">Ma première application</string>
1867
- <string name="hello_world">Bienvenue</string>
1868
- <string name="action_settings">Paramètres</string>
1869
- <string name="back">Retour</string>
1870
- <string name="forward">Suivant</string>
1871
- <string name="reload">Recharger</string>
1872
- </resources>
1873
- ```
1874
-
1875
- ### Étape 5 : Créer le code Java (`MainActivity.java`)
1876
-
1877
- Fichier : `src/com/example/monapp/MainActivity.java`
1878
-
1879
- ```java
1880
- package com.example.monapp;
1881
-
1882
- import android.app.Activity;
1883
- import android.os.Bundle;
1884
- import android.widget.Button;
1885
- import android.widget.Toast;
1886
- import android.view.View;
1887
- import android.util.Log;
1888
-
1889
- public class MainActivity extends Activity {
1890
- private static final String TAG = "MonApp";
1891
-
1892
- @Override
1893
- protected void onCreate(Bundle savedInstanceState) {
1894
- super.onCreate(savedInstanceState);
1895
- setContentView(R.layout.activity_main);
1896
- Log.d(TAG, "MainActivity créée");
1897
-
1898
- Button myButton = (Button) findViewById(R.id.myButton);
1899
- myButton.setOnClickListener(new View.OnClickListener() {
1900
- @Override
1901
- public void onClick(View v) {
1902
- Toast.makeText(MainActivity.this, "Bouton cliqué!", Toast.LENGTH_SHORT).show();
1903
- Log.d(TAG, "Bouton cliqué");
1904
- }
1905
- });
1906
- }
1907
- }
1908
- ```
1909
-
1910
- ### Étape 6 : Ajouter une icône
1911
-
1912
- Placez une image PNG (96x96 pixels) dans `res/mipmap/`.
1913
-
1914
- **Le système générera automatiquement les variantes pour tous les écrans.**
1915
-
1916
- ---
1917
-
1918
- ## Configuration de l'application
1919
-
1920
- 🔝 [Retour en haut](#top)
1921
-
1922
- ### `app-config.json` complet
1923
-
1924
- ```json
1925
- {
1926
- "appName": "MonApp",
1927
- "appVersion": "1.0.0",
1928
- "appDescription": "Ma première application Android",
1929
- "packageName": "com.example.monapp",
1930
- "minSdkVersion": 21,
1931
- "targetSdkVersion": 34,
1932
- "colors": {
1933
- "primary": "#2196F3",
1934
- "primaryDark": "#1976D2",
1935
- "accent": "#FF5722"
1936
- },
1937
- "minimalRequiredFiles": [
1938
- "AndroidManifest.xml",
1939
- "res/values/strings.xml",
1940
- "res/values/styles.xml",
1941
- "res/layout/activity_main.xml"
1942
- ]
1943
- }
1944
- ```
1945
-
1946
- ---
1947
-
1948
- ## Générer l'APK
1949
-
1950
- 🔝 [Retour en haut](#top)
1951
-
1952
- ### Avec npm
1953
-
1954
- ```powershell
1955
- # Build standard
1956
- npm run build
1957
-
1958
- # Build avec vérification stricte
1959
- npm run build-debug
1960
-
1961
- # Générer les icônes
1962
- npm run build-icons
1963
- ```
1964
-
1965
- ### Sans sauvegarde
1966
-
1967
- ```powershell
1968
- node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --no-backup
1969
- ```
1970
-
1971
- ### Restaurer depuis une sauvegarde
1972
-
1973
- ```powershell
1974
- node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --restore
1975
- ```
1976
-
1977
- ### Résultat
1978
-
1979
- Après une génération réussie, vous trouverez :
1980
-
1981
- ```
1982
- MonApp/
1983
- └── MonApp.apk ← Votre application, prête à installer!
1984
- ```
1985
-
1986
- Fichier de sortie : `MonApp/MonApp.apk`
1987
-
1988
- **Taille typique :** 2-5 MB
1989
-
1990
- ---
1991
-
1992
- ## Exemples
1993
-
1994
- 🔝 [Retour en haut](#top)
1995
-
1996
- ### Exemple 1 : Application Compteur
1997
-
1998
- Voir le dossier `CounterApp/` pour un exemple complet d'une application de compteur avec :
1999
- - Boutons d'incrémentation/décrémentation
2000
- - Affichage d'un compteur
2001
- - Interface colorée
2002
-
2003
- ### Exemple 2 : Application Simple
2004
-
2005
- Consultez `MyApp/` pour une application de base.
2006
-
2007
- ### Exemple 3 : Application Avancée
2008
-
2009
- `MyApp_Advanced/` contient des fonctionnalités plus complexes.
2010
-
2011
- ---
2012
-
2013
- ## Dépannage
2014
-
2015
- 🔝 [Retour en haut](#top)
2016
-
2017
- ### Erreur : "Aucun fichier Java trouvé"
2018
-
2019
- **Cause** : Le dossier `src/` est vide ou mal structuré.
2020
-
2021
- **Solution** :
2022
- 1. Vérifiez que `MainActivity.java` existe dans `src/com/example/monapp/`
2023
- 2. Vérifiez le nom du package (doit correspondre à `packageName` dans `app-config.json`)
2024
-
2025
- ```
2026
- src/
2027
- └── com/example/monapp/
2028
- └── MainActivity.java ✓ Correct
2029
- ```
2030
-
2031
- ### Erreur : "resource string/... not found"
2032
-
2033
- **Cause** : Une chaîne de caractères référencée n'existe pas dans `strings.xml`.
2034
-
2035
- **Solution** :
2036
- 1. Ouvrez `res/values/strings.xml`
2037
- 2. Ajoutez la chaîne manquante avec son ID correct :
2038
- ```xml
2039
- <string name="fragment1">Fragments</string>
2040
- <string name="action_click">Cliquez ici</string>
2041
- ```
2042
- 3. **Assurez-vous que le nom correspond exactement** à celui utilisé dans votre layout XML
2043
-
2044
- **Exemple d'erreur rencontrée (CounterApp) :**
2045
- ```
2046
- error: resource string/fragment1 not found
2047
- ```
2048
- **Correction appliquée :**
2049
- ```xml
2050
- <!-- res/values/strings.xml -->
2051
- <resources>
2052
- <string name="app_name">CounterApp</string>
2053
- <string name="fragment1">Compteur</string>
2054
- <string name="increment">Incrémenter</string>
2055
- <string name="decrement">Décrémenter</string>
2056
- <string name="reset">Réinitialiser</string>
2057
- </resources>
2058
- ```
2059
-
2060
- ### Erreur : "cannot find symbol: variable R"
2061
-
2062
- **Cause** : Les ressources n'ont pas été compilées correctement.
2063
-
2064
- **Solution** :
2065
- 1. Supprimez le dossier `build/`
2066
- 2. Vérifiez que `res/values/strings.xml` est valide (XML bien formé, pas d'accents mal encodés)
2067
- 3. Relancez la génération complète
2068
-
2069
- ### Erreur : "D8 compilation failed" avec "NullPointerException"
2070
-
2071
- **Cause** : Classes anonymes mal générées lors de la compilation DEX.
2072
-
2073
- **Symptômes** :
2074
- ```
2075
- java.lang.NullPointerException: Cannot invoke "String.length()"
2076
- Exception in thread "main" java.lang.NullPointerException
2077
- ```
2078
-
2079
- **Solution - Utilisez `implements View.OnClickListener` au lieu de classes anonymes** :
2080
-
2081
- ❌ **INCORRECT (cause l'erreur D8)** :
2082
- ```java
2083
- button.setOnClickListener(new View.OnClickListener() {
2084
- @Override
2085
- public void onClick(View v) {
2086
- counter++;
2087
- updateDisplay();
2088
- }
2089
- });
2090
- ```
2091
-
2092
- ✅ **CORRECT** :
2093
- ```java
2094
- public class MainActivity extends Activity implements View.OnClickListener {
2095
- private Button incrementBtn, decrementBtn;
2096
-
2097
- @Override
2098
- public void onClick(View v) {
2099
- int id = v.getId();
2100
- if (id == R.id.incrementBtn) counter++;
2101
- else if (id == R.id.decrementBtn) counter--;
2102
- }
2103
- }
2104
- ```
2105
-
2106
- **Pourquoi** : D8 (compilateur DEX) a des problèmes avec les classes anonymes imbriquées. Les interfaces nommées sont plus fiables.
2107
-
2108
- ### Erreur : "cannot find symbol: variable helloText" ou autre ID de ressource
2109
-
2110
- **Cause** : Le code Java référence un ID qui n'existe pas dans le layout XML.
2111
-
2112
- **Symptôme** :
2113
- ```
2114
- error: cannot find symbol
2115
- symbol: variable helloText
2116
- location: class MainActivity
2117
- ```
2118
-
2119
- **Solution** :
2120
- 1. Vérifiez que l'ID existe dans `res/layout/activity_main.xml` :
2121
- ```xml
2122
- <TextView
2123
- android:id="@+id/helloText"
2124
- ...
2125
- />
2126
- ```
2127
- 2. Vérifiez que vous utilisez le bon nom en Java :
2128
- ```java
2129
- TextView helloText = (TextView) findViewById(R.id.helloText);
2130
- ```
2131
- 3. Assurez-vous que l'ID correspond EXACTEMENT (majuscules/minuscules)
2132
-
2133
- **Exemple de correction (CounterApp)** :
2134
- ```xml
2135
- <!-- res/layout/activity_main.xml -->
2136
- <LinearLayout ...>
2137
- <TextView
2138
- android:id="@+id/counterDisplay"
2139
- android:layout_width="match_parent"
2140
- android:layout_height="wrap_content"
2141
- android:text="0"
2142
- android:textSize="72sp" />
2143
-
2144
- <Button
2145
- android:id="@+id/incrementBtn"
2146
- android:text="Incrémenter" />
2147
- </LinearLayout>
2148
- ```
2149
-
2150
- ### Erreur : "AndroidManifest.xml not found"
2151
-
2152
- **Cause** : Fichier de configuration critique manquant ou mal généré.
2153
-
2154
- **Solution** :
2155
- 1. Vérifiez que `app-config.json` existe à la racine du projet
2156
- 2. Assurez-vous que le JSON est valide (syntaxe correcte, pas de virgules manquantes)
2157
- 3. Relancez le build avec l'option `--fail-on-missing` pour diagnostiquer :
2158
- ```powershell
2159
- node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --fail-on-missing
2160
- ```
2161
-
2162
- ### Erreur : "Fichiers minimums manquants"
2163
-
2164
- **Cause** : Des fichiers essentiels n'existent pas.
2165
-
2166
- **Files requises minimales** :
2167
- - `app-config.json` → Configuration de l'app
2168
- - `AndroidManifest.xml` → Descripteur (généré automatiquement)
2169
- - `res/values/strings.xml` → Textes
2170
- - `res/values/styles.xml` → Styles (généré automatiquement)
2171
- - `res/layout/activity_main.xml` → Interface utilisateur
2172
- - `src/com/example/monapp/MainActivity.java` → Code principal
2173
-
2174
- **Solution** :
2175
- ```powershell
2176
- # Mode diagnostique - affiche les fichiers manquants sans échouer
2177
- node "metadidomi-builder\build_tools\build_apk.js" "MonApp"
2178
-
2179
- # Mode strict - échoue si des fichiers manquent
2180
- node "metadidomi-builder\build_tools\build_apk.js" "MonApp" --fail-on-missing
2181
- ```
2182
-
2183
- ### L'APK n'est pas généré
2184
-
2185
- **Cause** : Erreur lors de la signature ou de l'assemblage final.
2186
-
2187
- **Solution** :
2188
- 1. Supprimez le fichier `.keystore` dans le dossier du projet :
2189
- ```powershell
2190
- rm "MonApp\.keystore"
2191
- ```
2192
- 2. Relancez la génération (un nouveau keystore sera créé) :
2193
- ```powershell
2194
- node "metadidomi-builder\build_tools\build_apk.js" "MonApp"
2195
- ```
2196
-
2197
- ### Erreur : "Invalid app-config.json"
2198
-
2199
- **Cause** : Fichier de configuration mal formé.
2200
-
2201
- **Vérifiez** :
2202
- ```json
2203
- {
2204
- "appName": "MonApp", // ✓ String valide
2205
- "appVersion": "1.0.0", // ✓ Format sémantique (majeur.mineur.patch)
2206
- "packageName": "com.example.monapp", // ✓ Format domaine inversé
2207
- "minSdkVersion": 21, // ✓ Nombre entier >= 21
2208
- "targetSdkVersion": 34, // ✓ Nombre entier
2209
- "colors": {
2210
- "primary": "#2196F3", // ✓ Couleur hexadécimale valide
2211
- "primaryDark": "#1976D2",
2212
- "accent": "#FF5722"
2213
- }
2214
- }
2215
- ```
2216
-
2217
- ### Erreur : "Layout XML invalide"
2218
-
2219
- **Cause** : Syntaxe XML incorrecte dans `activity_main.xml`.
2220
-
2221
- **Vérifiez** :
2222
- - Les balises ouvrantes et fermantes correspondent (`<LinearLayout>` ... `</LinearLayout>`)
2223
- - Les attributs android: sont valides
2224
- - Les IDs sont uniques et bien formatés (`android:id="@+id/monId"`)
2225
- - Les textes spéciaux sont échappés (`&amp;`, `&lt;`, `&gt;`)
2226
-
2227
- **Exemple correct** :
2228
- ```xml
2229
- <?xml version="1.0" encoding="utf-8"?>
2230
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2231
- android:orientation="vertical"
2232
- android:layout_width="match_parent"
2233
- android:layout_height="match_parent">
2234
-
2235
- <Button
2236
- android:id="@+id/myButton"
2237
- android:layout_width="wrap_content"
2238
- android:layout_height="wrap_content"
2239
- android:text="Cliquez-moi" />
2240
-
2241
- </LinearLayout>
2242
- ```
2243
-
2244
- ### Erreur : "Icônes manquantes"
2245
-
2246
- **Cause** : L'icône n'a pas été générée ou redimensionnée correctement.
2247
-
2248
- **Solution** :
2249
- 1. Placez une image PNG (96x96 pixels minimum) dans `res/drawable/` ou `res/mipmap/`
2250
- 2. Exécutez le générateur d'icônes :
2251
- ```powershell
2252
- node "metadidomi-builder\build_tools\generate-icons.js" "MonApp"
2253
- ```
2254
- 3. Vérifiez que tous les dossiers mipmap ont été créés :
2255
- ```
2256
- res/mipmap-mdpi/ic_launcher.png (48x48)
2257
- res/mipmap-hdpi/ic_launcher.png (72x72)
2258
- res/mipmap-xhdpi/ic_launcher.png (96x96)
2259
- res/mipmap-xxhdpi/ic_launcher.png (144x144)
2260
- res/mipmap-xxxhdpi/ic_launcher.png (192x192)
2261
- ```
2262
-
2263
- ### Erreur : "Package name already exists"
2264
-
2265
- **Cause** : Un package Android avec le même nom est déjà installé.
2266
-
2267
- **Solution** :
2268
- 1. Changez le `packageName` dans `app-config.json` :
2269
- ```json
2270
- "packageName": "com.example.monapp.v2"
2271
- ```
2272
- 2. Régénérez l'APK
2273
- 3. Ou : désinstallez l'ancienne app avant d'installer la nouvelle
2274
-
2275
- ---
2276
-
2277
- ## Options avancées
2278
-
2279
- 🔝 [Retour en haut](#top)
2280
-
2281
- ### Personnaliser les ressources générées automatiquement
2282
-
2283
- Par défaut, le système génère :
2284
- - `AndroidManifest.xml` (descripteur de l'app)
2285
- - `res/values/colors.xml` (couleurs)
2286
- - `res/values/styles.xml` (thèmes)
2287
-
2288
- Ces fichiers sont générés à chaque build. Pour les personnaliser, créez-les manuellement et le système les préservera.
2289
-
2290
- ### Ajouter des ressources personnalisées
2291
-
2292
- ```
2293
- res/
2294
- ├── drawable/ # Images 1x (160 DPI)
2295
- ├── drawable-hdpi/ # Images 1.5x (240 DPI)
2296
- ├── drawable-xhdpi/ # Images 2x (320 DPI)
2297
- ├── drawable-xxhdpi/ # Images 3x (480 DPI)
2298
- ├── drawable-xxxhdpi/ # Images 4x (640 DPI)
2299
- ├── font/ # Polices personnalisées
2300
- ├── menu/ # Menus
2301
- ├── raw/ # Fichiers non compressés
2302
- └── anim/ # Animations
2303
- ```
2304
-
2305
- ### Générer les icônes automatiquement
2306
-
2307
- Placez une image source dans `res/drawable/` ou `res/mipmap/` :
2308
-
2309
- ```powershell
2310
- node "metadidomi-builder\build_tools\generate-icons.js" "MonApp"
2311
- ```
2312
-
2313
- Le système créera automatiquement les variantes pour tous les écrans :
2314
- - `mipmap-mdpi` (48×48)
2315
- - `mipmap-hdpi` (72×72)
2316
- - `mipmap-xhdpi` (96×96)
2317
- - `mipmap-xxhdpi` (144×144)
2318
- - `mipmap-xxxhdpi` (192×192)
2319
-
2320
- ### Utiliser des variables d'environnement
2321
-
2322
- ```powershell
2323
- $env:PROJECT_PATH = "C:\MonApp"
2324
- node "metadidomi-builder\build_tools\build_apk.js"
2325
- ```
2326
-
2327
- ---
2328
-
2329
- ## Architecture du système
2330
-
2331
- 🔝 [Retour en haut](#top)
2332
-
2333
- ```
2334
- metadidomi-builder/
2335
- ├── build_tools/
2336
- │ ├── build_apk.js # Orchestration principale
2337
- │ ├── generate-resources.js # Génération des ressources XML
2338
- │ ├── generate-icons.js # Redimensionnement des icônes
2339
- │ ├── backup-manager.js # Gestion des sauvegardes
2340
- │ └── vendor/ # SDK Android et JDK (inclus)
2341
- └── build_tools_py/ # Outils Python avancés (optionnel)
2342
- ```
2343
-
2344
- ---
2345
-
2346
- ## Étapes du build expliquées
2347
-
2348
- 🔝 [Retour en haut](#top)
2349
-
2350
- 1. **Génération des ressources** : Crée `AndroidManifest.xml`, couleurs, styles
2351
- 2. **Génération des icônes** : Redimensionne l'icône pour toutes les densités
2352
- 3. **Vérification des fichiers** : Contrôle la présence des fichiers minimums
2353
- 4. **Compilation des ressources** : AAPT2 compile XML et images
2354
- 5. **Liaison des ressources** : Génération de `R.java` avec les IDs de ressources
2355
- 6. **Compilation Java** : Javac compile le code Java
2356
- 7. **Création du JAR** : Empaquetage des classes Java
2357
- 8. **Conversion DEX** : D8 convertit en format Android (DEX)
2358
- 9. **Assemblage APK** : Création de la structure APK
2359
- 10. **Alignement** : Zipalign optimise la structure APK
2360
- 11. **Signature** : Signature numérique de l'APK
2361
- 12. **Résultat** : APK prête à être installée
2362
-
2363
- ---
2364
-
2365
- ## Installation de l'APK sur un téléphone
2366
-
2367
- 🔝 [Retour en haut](#top)
2368
-
2369
- ### Via USB
2370
-
2371
- ```powershell
2372
- adb install -r "MonApp\MonApp.apk"
2373
- ```
2374
-
2375
- ### Via partage de fichier
2376
-
2377
- 1. Transférez le fichier `.apk` sur votre téléphone
2378
- 2. Ouvrez l'explorateur de fichiers
2379
- 3. Appuyez sur le fichier `.apk`
2380
- 4. Confirmez l'installation
2381
-
2382
- ---
2383
-
2384
- ## Conseils et bonnes pratiques
2385
-
2386
- 🔝 [Retour en haut](#top)
2387
-
2388
- ✅ **À faire :**
2389
- - Tester l'app fréquemment
2390
- - Utiliser des noms de ressources explicites
2391
- - Commenter le code Java
2392
- - Utiliser `Log.d()` pour déboguer
2393
- - Versionner votre code (Git)
2394
-
2395
- ❌ **À éviter :**
2396
- - Charger des images trop volumineuses
2397
- - Utiliser des classes anonymes complexes
2398
- - Modifier les fichiers générés automatiquement
2399
- - Laisser des ressources inutilisées
2400
-
2401
- ---
2402
-
2403
- ## Foire aux questions
2404
-
2405
- 🔝 [Retour en haut](#top)
2406
-
2407
- **Q : Puis-je créer plusieurs activités ?**
2408
- A : Oui, ajoutez des classes Java dans `src/` et déclarez-les dans `AndroidManifest.xml`.
2409
-
2410
- **Q : Comment ajouter des dépendances externes ?**
2411
- A : Actuellement, seules les APIs Android intégrées sont supportées.
2412
-
2413
- **Q : L'APK fonctionne-t-il sur tous les téléphones ?**
2414
- A : Oui, tant qu'ils sont Android 5.0 (API 21) ou supérieur.
2415
-
2416
- **Q : Puis-je mettre à jour l'APK ?**
2417
- A : Oui, augmentez `appVersion` dans `app-config.json` et régénérez.
2418
-
2419
- **Q : Les APK sont-elles vraiment signées ?**
2420
- A : Oui, automatiquement avec une clé de développement auto-générée.
2421
-
2422
- ---
2423
-
2424
- ## Support
2425
-
2426
- 🔝 [Retour en haut](#top)
2427
-
2428
- Pour des problèmes ou des questions :
2429
-
2430
- 1. Consultez le dossier `CounterApp/` pour un exemple complet
2431
- 2. Vérifiez les logs du build pour les erreurs
2432
- 3. Assurez-vous que tous les fichiers requis existent
2433
-
2434
- ---
2435
-
2436
- ## Version
2437
-
2438
- - **Metadidomi Crone** : v1.0.0
2439
- - **Android SDK** : 34 (Android 14)
2440
- - **Build Tools** : 34.0.0
2441
- - **Dernière mise à jour** : Novembre 2025
2442
-
2443
1737
  ---
2444
1738
 
2445
1739
  ### 📞 Support