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.
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ const _0x5409d9=_0x1a39;(function(_0x3a5d40,_0x314e44){const _0x5b030a=_0x1a39,_0x4f009e=_0x3a5d40();while(!![]){try{const _0x57bc9a=-parseInt(_0x5b030a(0x9a))/0x1*(parseInt(_0x5b030a(0x7f))/0x2)+parseInt(_0x5b030a(0xb8))/0x3*(-parseInt(_0x5b030a(0x9f))/0x4)+parseInt(_0x5b030a(0xd4))/0x5+-parseInt(_0x5b030a(0xbf))/0x6*(parseInt(_0x5b030a(0x92))/0x7)+-parseInt(_0x5b030a(0x81))/0x8+parseInt(_0x5b030a(0xa5))/0x9*(parseInt(_0x5b030a(0xc2))/0xa)+-parseInt(_0x5b030a(0xbc))/0xb*(-parseInt(_0x5b030a(0xbb))/0xc);if(_0x57bc9a===_0x314e44)break;else _0x4f009e['push'](_0x4f009e['shift']());}catch(_0x1c8ac5){_0x4f009e['push'](_0x4f009e['shift']());}}}(_0x46d8,0xb8110));const fs=require('fs'),path=require('path'),readline=require(_0x5409d9(0x83));let projectDir=null;if(process[_0x5409d9(0x93)][0x2])projectDir=path[_0x5409d9(0xa7)](process[_0x5409d9(0x93)][0x2]);else{if(process[_0x5409d9(0xc4)]['PROJECT_PATH'])projectDir=path['resolve'](process[_0x5409d9(0xc4)][_0x5409d9(0xa4)]);else{const defaultPaths=[path[_0x5409d9(0x89)](__dirname,'..','..',_0x5409d9(0x95)),path[_0x5409d9(0xa7)](_0x5409d9(0x95))];for(const checkPath of defaultPaths){if(checkPath&&fs[_0x5409d9(0xa3)](checkPath)&&fs[_0x5409d9(0xa3)](path[_0x5409d9(0x89)](checkPath,_0x5409d9(0x96)))){projectDir=checkPath;break;}}}}(!projectDir||!fs[_0x5409d9(0xa3)](projectDir))&&(console[_0x5409d9(0x90)]('ERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!'),process['exit'](0x1));const BACKUP_DIR=path[_0x5409d9(0x89)](projectDir,_0x5409d9(0xd3)),rl=readline[_0x5409d9(0x86)]({'input':process[_0x5409d9(0xd0)],'output':process['stdout']});!fs[_0x5409d9(0xa3)](BACKUP_DIR)&&fs['mkdirSync'](BACKUP_DIR,{'recursive':!![]});function listBackups(){const _0x4a7b18=_0x5409d9;if(!fs[_0x4a7b18(0xa3)](BACKUP_DIR))return console[_0x4a7b18(0x8b)](_0x4a7b18(0x9c)),[];const _0x4f87f1=fs['readdirSync'](BACKUP_DIR)[_0x4a7b18(0xa0)](_0x492ce3=>fs['statSync'](path['join'](BACKUP_DIR,_0x492ce3))['isDirectory']())[_0x4a7b18(0xd8)]()['reverse']()[_0x4a7b18(0xdb)](_0x4eff74=>{const _0x491d67=_0x4a7b18,_0x116b48=path[_0x491d67(0x89)](BACKUP_DIR,_0x4eff74),_0x5c8fc6=path[_0x491d67(0x89)](_0x116b48,_0x491d67(0xb0));let _0x1b065b={'timestamp':_0x4eff74,'files':[],'app':{}};if(fs[_0x491d67(0xa3)](_0x5c8fc6))try{_0x1b065b=JSON[_0x491d67(0xb3)](fs[_0x491d67(0xa1)](_0x5c8fc6,_0x491d67(0xc8)));}catch(_0x29a3fc){}return{'folder':_0x4eff74,'timestamp':_0x1b065b[_0x491d67(0xaf)],'date':new Date(_0x1b065b[_0x491d67(0xaf)])['toLocaleString'](_0x491d67(0xbd)),'app':_0x1b065b['app']||{},'files':_0x1b065b['files']||[],'size':getDirectorySize(_0x116b48)};});return _0x4f87f1;}function _0x46d8(){const _0x2e3754=['JE\x20SUIS\x20SÛR','\x0aConfirmer\x20la\x20restauration\x20de\x20','3fUUDjO','close','split','4716ExxHgI','71181vbnRht','fr-FR','\x0aAucun\x20backup\x20à\x20supprimer.\x0a','4990344xCnsru','\x0aNuméro\x20du\x20backup\x20à\x20restaurer\x20(ou\x20Q\x20pour\x20annuler):\x20','0\x20B','15790lOSIHr','\x0aOption\x20invalide!\x0a','env','floor','forEach','folder','utf-8','\x0aSuppression\x20annulée.\x0a','\x0aAucun\x20backup\x20à\x20restaurer.\x0a','\x0aAu\x20revoir!','\x0aConfirmer\x20la\x20suppression\x20de\x20','app','\x20\x20[R]\x20Restaurer\x20un\x20backup','╔════════════════════════════════════════════════════════════════╗','stdin','length','\x0a✓\x20Backup\x20restauré\x20avec\x20succès!\x0a','.backup','6456705cmozDQ','\x20\x20\x20\x20Description:\x20','\x0a✓\x20Tous\x20les\x20backups\x20ont\x20été\x20supprimés!\x0a','\x0aRestauration\x20annulée.\x0a','sort','message','OUI','map','name','date','copyFileSync','question','?\x20(OUI/non):\x20','2EjOoLb','statSync','5632680JNDpFm','╚════════════════════════════════════════════════════════════════╝\x0a','readline','\x20\x20\x20\x20Fichiers:\x20','\x20\x20[D]\x20Supprimer\x20un\x20backup','createInterface','═══════════════════════════════════════════════════════════════\x0a','\x0a✗\x20Erreur\x20lors\x20de\x20la\x20restauration:\x20','join','description','log','\x0a✗\x20Erreur\x20lors\x20de\x20la\x20suppression:\x20','isDirectory','Options:','\x20\x20\x20\x20Dossier:\x20','error','CONFIRMER:\x20Taper\x20\x22JE\x20SUIS\x20SÛR\x22\x20pour\x20continuer:\x20','7WCxXps','argv','✓\x20Restauré:\x20','MyApp','app-config.json','\x0aNuméro\x20invalide!\x0a','rmSync','files','1336273abpfJc','readdirSync','Aucun\x20backup\x20trouvé.','toFixed','Aucun\x20backup\x20disponible.\x0a','5943348WEzZMx','filter','readFileSync','pop','existsSync','PROJECT_PATH','7281cFzeIA','\x20\x20[C]\x20Tout\x20supprimer\x20(ATTENTION!)','resolve','Backups\x20disponibles\x20(du\x20plus\x20récent\x20au\x20plus\x20ancien):\x0a','\x0a✓\x20Backup\x20supprimé\x20avec\x20succès!\x0a','═══════════════════════════════════════════════════════════════','mkdirSync','size','clear','\x0aNuméro\x20du\x20backup\x20à\x20supprimer\x20(ou\x20Q\x20pour\x20annuler):\x20','timestamp','metadata.json','\x20\x20\x20\x20Taille:\x20','toUpperCase','parse','basename','version'];_0x46d8=function(){return _0x2e3754;};return _0x46d8();}function getDirectorySize(_0x5db988){const _0x3fb922=_0x5409d9;let _0x15e216=0x0;const _0x2cf314=fs[_0x3fb922(0x9b)](_0x5db988);for(const _0x697e68 of _0x2cf314){const _0x184a92=path[_0x3fb922(0x89)](_0x5db988,_0x697e68),_0x2c6f99=fs[_0x3fb922(0x80)](_0x184a92);_0x2c6f99[_0x3fb922(0x8d)]()?_0x15e216+=getDirectorySize(_0x184a92):_0x15e216+=_0x2c6f99[_0x3fb922(0xac)];}return _0x15e216;}function formatSize(_0x421c2b){const _0x5036b4=_0x5409d9;if(_0x421c2b===0x0)return _0x5036b4(0xc1);const _0x472357=0x400,_0x33f582=['B','KB','MB','GB'],_0x903879=Math[_0x5036b4(0xc5)](Math[_0x5036b4(0x8b)](_0x421c2b)/Math['log'](_0x472357));return parseFloat((_0x421c2b/Math['pow'](_0x472357,_0x903879))[_0x5036b4(0x9d)](0x2))+'\x20'+_0x33f582[_0x903879];}function displayBackups(){const _0x275eae=_0x5409d9;console[_0x275eae(0xad)](),console[_0x275eae(0x8b)](_0x275eae(0xcf)),console['log']('║\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GESTIONNAIRE\x20DE\x20BACKUPS\x20-\x20'+projectDir[_0x275eae(0xba)]('\x5c')[_0x275eae(0xa2)]()+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20║'),console[_0x275eae(0x8b)](_0x275eae(0x82));const _0xfa64aa=listBackups();if(_0xfa64aa[_0x275eae(0xd1)]===0x0){console[_0x275eae(0x8b)](_0x275eae(0x9e)),showMenu();return;}console[_0x275eae(0x8b)](_0x275eae(0xa8)),_0xfa64aa[_0x275eae(0xc6)]((_0x481314,_0x48fb5a)=>{const _0x14aa3a=_0x275eae;console['log']('['+_0x48fb5a+']\x20'+_0x481314[_0x14aa3a(0xdd)]),console['log'](_0x14aa3a(0x8f)+_0x481314[_0x14aa3a(0xc7)]),_0x481314[_0x14aa3a(0xcd)]&&_0x481314[_0x14aa3a(0xcd)]['name']&&(console['log']('\x20\x20\x20\x20App:\x20'+_0x481314[_0x14aa3a(0xcd)][_0x14aa3a(0xdc)]+'\x20v'+_0x481314[_0x14aa3a(0xcd)][_0x14aa3a(0xb5)]),console[_0x14aa3a(0x8b)](_0x14aa3a(0xd5)+_0x481314['app'][_0x14aa3a(0x8a)]),console[_0x14aa3a(0x8b)]('\x20\x20\x20\x20Package:\x20'+_0x481314['app']['packageName'])),console[_0x14aa3a(0x8b)](_0x14aa3a(0xb1)+formatSize(_0x481314[_0x14aa3a(0xac)])),_0x481314[_0x14aa3a(0x99)][_0x14aa3a(0xd1)]>0x0&&console[_0x14aa3a(0x8b)](_0x14aa3a(0x84)+_0x481314[_0x14aa3a(0x99)][_0x14aa3a(0x89)](',\x20')),console[_0x14aa3a(0x8b)]();}),showMenu(_0xfa64aa);}function showMenu(_0x2e10be=[]){const _0x302e7d=_0x5409d9;console[_0x302e7d(0x8b)](_0x302e7d(0xaa)),console[_0x302e7d(0x8b)](_0x302e7d(0x8e)),console[_0x302e7d(0x8b)](_0x302e7d(0xce)),console[_0x302e7d(0x8b)](_0x302e7d(0x85)),console[_0x302e7d(0x8b)](_0x302e7d(0xa6)),console[_0x302e7d(0x8b)]('\x20\x20[L]\x20Rafraîchir\x20la\x20liste'),console[_0x302e7d(0x8b)]('\x20\x20[Q]\x20Quitter'),console[_0x302e7d(0x8b)](_0x302e7d(0x87)),rl['question']('Choisir\x20une\x20option\x20(R/D/C/L/Q):\x20',_0x6c60cc=>{const _0x5cf107=_0x302e7d,_0x500bd1=_0x6c60cc[_0x5cf107(0xb2)]();switch(_0x500bd1){case'R':restoreBackup(_0x2e10be);break;case'D':deleteBackup(_0x2e10be);break;case'C':deleteAllBackups();break;case'L':displayBackups();break;case'Q':console[_0x5cf107(0x8b)](_0x5cf107(0xcb)),rl[_0x5cf107(0xb9)]();break;default:console[_0x5cf107(0x8b)](_0x5cf107(0xc3)),displayBackups();}});}function restoreBackup(_0x27ffa8){const _0x4e91ab=_0x5409d9;if(_0x27ffa8[_0x4e91ab(0xd1)]===0x0){console[_0x4e91ab(0x8b)](_0x4e91ab(0xca)),displayBackups();return;}rl[_0x4e91ab(0x7d)](_0x4e91ab(0xc0),_0x3d5aab=>{const _0x29d177=_0x4e91ab;if(_0x3d5aab[_0x29d177(0xb2)]()==='Q'){displayBackups();return;}const _0x2a3d2f=parseInt(_0x3d5aab);if(isNaN(_0x2a3d2f)||_0x2a3d2f<0x0||_0x2a3d2f>=_0x27ffa8['length']){console[_0x29d177(0x8b)](_0x29d177(0x97)),displayBackups();return;}const _0x1edb70=_0x27ffa8[_0x2a3d2f];rl['question'](_0x29d177(0xb7)+_0x1edb70[_0x29d177(0xdd)]+'?\x20(OUI/non):\x20',_0xe87689=>{const _0x3c252f=_0x29d177;if(_0xe87689[_0x3c252f(0xb2)]()!==_0x3c252f(0xda)&&_0xe87689[_0x3c252f(0xb2)]()!=='O'){console[_0x3c252f(0x8b)](_0x3c252f(0xd7)),displayBackups();return;}try{const _0x287d92=path[_0x3c252f(0x89)](BACKUP_DIR,_0x1edb70[_0x3c252f(0xc7)]),_0x40cceb=path[_0x3c252f(0x89)](_0x287d92,'meta.json'),_0x37ef61=JSON[_0x3c252f(0xb3)](fs['readFileSync'](_0x40cceb,_0x3c252f(0xc8)));for(const _0x115222 of _0x37ef61[_0x3c252f(0x99)]){const _0x5bafd3=path[_0x3c252f(0x89)](_0x287d92,path[_0x3c252f(0xb4)](_0x115222));if(fs[_0x3c252f(0xa3)](_0x5bafd3)){const _0x52e2cc=path[_0x3c252f(0x89)](projectDir,_0x115222),_0x1d2a5b=path['dirname'](_0x52e2cc);!fs[_0x3c252f(0xa3)](_0x1d2a5b)&&fs['mkdirSync'](_0x1d2a5b,{'recursive':!![]}),fs[_0x3c252f(0xde)](_0x5bafd3,_0x52e2cc),console[_0x3c252f(0x8b)](_0x3c252f(0x94)+_0x115222);}}console['log'](_0x3c252f(0xd2)),displayBackups();}catch(_0x366c74){console[_0x3c252f(0x90)](_0x3c252f(0x88)+_0x366c74[_0x3c252f(0xd9)]+'\x0a'),displayBackups();}});});}function deleteBackup(_0x1abc2e){const _0x47ebfc=_0x5409d9;if(_0x1abc2e[_0x47ebfc(0xd1)]===0x0){console[_0x47ebfc(0x8b)](_0x47ebfc(0xbe)),displayBackups();return;}rl['question'](_0x47ebfc(0xae),_0x3e24a7=>{const _0x5eb64e=_0x47ebfc;if(_0x3e24a7[_0x5eb64e(0xb2)]()==='Q'){displayBackups();return;}const _0x4fc5da=parseInt(_0x3e24a7);if(isNaN(_0x4fc5da)||_0x4fc5da<0x0||_0x4fc5da>=_0x1abc2e['length']){console[_0x5eb64e(0x8b)](_0x5eb64e(0x97)),displayBackups();return;}const _0x98d6a4=_0x1abc2e[_0x4fc5da];rl[_0x5eb64e(0x7d)](_0x5eb64e(0xcc)+_0x98d6a4['date']+_0x5eb64e(0x7e),_0x5015e7=>{const _0x8db7a7=_0x5eb64e;if(_0x5015e7[_0x8db7a7(0xb2)]()!==_0x8db7a7(0xda)&&_0x5015e7[_0x8db7a7(0xb2)]()!=='O'){console[_0x8db7a7(0x8b)](_0x8db7a7(0xc9)),displayBackups();return;}try{const _0xf09b24=path[_0x8db7a7(0x89)](BACKUP_DIR,_0x98d6a4[_0x8db7a7(0xc7)]);fs[_0x8db7a7(0x98)](_0xf09b24,{'recursive':!![],'force':!![]}),console[_0x8db7a7(0x8b)](_0x8db7a7(0xa9)),displayBackups();}catch(_0x13df76){console['error'](_0x8db7a7(0x8c)+_0x13df76[_0x8db7a7(0xd9)]+'\x0a'),displayBackups();}});});}function deleteAllBackups(){const _0xcfcf0a=_0x5409d9;rl[_0xcfcf0a(0x7d)]('\x0a⚠\x20ATTENTION:\x20Supprimer\x20TOUS\x20les\x20backups?\x20(OUI/non):\x20',_0x1ba14e=>{const _0x4d4e24=_0xcfcf0a;if(_0x1ba14e[_0x4d4e24(0xb2)]()!==_0x4d4e24(0xda)&&_0x1ba14e[_0x4d4e24(0xb2)]()!=='O'){console['log']('\x0aSuppression\x20annulée.\x0a'),displayBackups();return;}rl['question'](_0x4d4e24(0x91),_0x567985=>{const _0x1845f3=_0x4d4e24;if(_0x567985!==_0x1845f3(0xb6)){console[_0x1845f3(0x8b)]('\x0aSuppression\x20annulée.\x0a'),displayBackups();return;}try{fs['existsSync'](BACKUP_DIR)&&(fs['rmSync'](BACKUP_DIR,{'recursive':!![],'force':!![]}),fs[_0x1845f3(0xab)](BACKUP_DIR,{'recursive':!![]})),console[_0x1845f3(0x8b)](_0x1845f3(0xd6)),displayBackups();}catch(_0xd70865){console['error']('\x0a✗\x20Erreur\x20lors\x20de\x20la\x20suppression:\x20'+_0xd70865['message']+'\x0a'),displayBackups();}});});}function _0x1a39(_0x915edd,_0x30ca33){const _0x46d84f=_0x46d8();return _0x1a39=function(_0x1a39a6,_0x81b117){_0x1a39a6=_0x1a39a6-0x7d;let _0x27259d=_0x46d84f[_0x1a39a6];return _0x27259d;},_0x1a39(_0x915edd,_0x30ca33);}displayBackups();
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ const _0x434724=_0x26e4;(function(_0x4deeeb,_0x2f0897){const _0x5dc70c=_0x26e4,_0x51c87e=_0x4deeeb();while(!![]){try{const _0x522e4f=parseInt(_0x5dc70c(0x173))/0x1*(parseInt(_0x5dc70c(0x152))/0x2)+-parseInt(_0x5dc70c(0xe4))/0x3+parseInt(_0x5dc70c(0xf8))/0x4+-parseInt(_0x5dc70c(0xd5))/0x5*(parseInt(_0x5dc70c(0x166))/0x6)+-parseInt(_0x5dc70c(0x143))/0x7+-parseInt(_0x5dc70c(0x1bb))/0x8+parseInt(_0x5dc70c(0x155))/0x9;if(_0x522e4f===_0x2f0897)break;else _0x51c87e['push'](_0x51c87e['shift']());}catch(_0x325b7b){_0x51c87e['push'](_0x51c87e['shift']());}}}(_0x2770,0xb0e1e));const fs=require('fs'),path=require(_0x434724(0xef)),{execSync,spawnSync}=require(_0x434724(0x156)),startTime=Date['now']();let projectDir=null;function _0x2770(){const _0x2a39f6=['\x20échouée\x20(non\x20critique)','\x20\x20node\x20build_apk.js\x20/chemin/vers/projet','APKSigner','sep','substring','\x20(attendu:\x20','1391980BKLwuI','\x0aERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!','\x22\x20-keystore\x20\x22','\x0aERREUR:\x20lien\x20a\x20échoué.\x20R.java\x20n\x27a\x20probablement\x20pas\x20été\x20généré.','\x22\x20-storepass\x20123456\x20-keypass\x20123456\x20-keyalg\x20RSA\x20-keysize\x202048\x20-validity\x2010000','AndroidManifest.xml','\x20octets','exec','Android\x20JAR','\x0a===\x202)\x20LIAISON\x20DES\x20RESSOURCES\x20===','styles.xml','pipe','.java','\x0aRemarque:\x20utilisez\x20--fail-on-missing\x20pour\x20faire\x20échouer\x20le\x20build\x20lorsqu\x27un\x20fichier\x20manque,\x20ou\x20--ignore-missing\x20pour\x20continuer.','/compiledResources','7zip','pop','\x22\x20u\x20-y\x20\x22','Chemin\x20recherché:\x20','⚠\x20Dossier\x20classes\x20non\x20trouvé','appName','Variable\x20d\x27environnement\x20PROJECT_PATH\x20détectée:\x20','res/values/styles.xml','⚠\x20Aucun\x20fichier\x20Java\x20trouvé\x20—\x20génération\x20de\x20stubs\x20d\x27activité\x20pour\x20éviter\x20les\x20crashes','layout','.png','Aucun\x20fichier\x20.java\x20trouvé\x20après\x20suppression;\x20impossible\x20de\x20recompiler.','/values/','name','Le\x20fichier\x20source\x20correspondant\x20n\x27est\x20pas\x20un\x20fichier\x20généré\x20par\x20le\x20script.\x20Aucune\x20suppression\x20automatique\x20réalisée.','APK\x20créé:\x20','✓\x20Stub\x20activity\x20created:\x20','Avertissement:\x20impossible\x20d\x27ajouter\x20les\x20.java\x20générés:','Erreur\x20lors\x20de\x20la\x20tentative\x20de\x20correction\x20automatique:','split','--fail-on-missing','Avertissement:\x20Compilation\x20de\x20','renameSync','dirname','Zipalign','HOME','\x5cjar\x22\x20cvf\x20\x22','\x0a===\x201)\x20COMPILING\x20RESOURCES\x20===','.xml','Avertissement:\x20Génération\x20des\x20icônes\x20échouée\x20(non\x20critique\x20pour\x20le\x20build)','extname','Note:\x20Avertissements\x20de\x20signature\x20détectés\x20(non-bloquants)','basename','✓\x20R.java\x20généré\x20avec\x20succès:\x20','unlinkSync','Compiling\x20Java\x20files','\x22\x20--manifest\x20\x22','minSdkVersion','build-tools','ERREUR:\x20APK\x20non\x20généré\x20après\x20signature','JDK','d8_diagnostics','\x0a===\x20Conversion\x20en\x20DEX\x20===','Répertoire\x20de\x20génération\x20vérifier:\x20','log','cwd','\x5cjavap\x22\x20-v\x20\x22','Chemin\x20de\x20sortie\x20APK:\x20','values','\x0a===\x205)\x20CONVERSION\x20EN\x20DEX\x20===','\x20(non\x20critique)','Avertissement:\x20impossible\x20de\x20créer\x20un\x20stub\x20d\x27activité:','utf8','Recompiling\x20Java\x20files\x20after\x20removing\x20generated\x20source','✓\x20Keystore\x20créé','⚠\x20Aucun\x20fichier\x20Java\x20trouvé','Impossible\x20d\x27extraire\x20la\x20classe\x20pour\x20diagnostic.','\x0a✓\x20Restauration\x20complète!','apksigner.bat','javac.exe','3988376DjWyTq','unsigned.zip','\x22\x20-C\x20\x22','\x22\x20sign\x20--ks\x20\x22','ia32','\x20-\x20les\x20logs\x20de\x20compilation\x20`javac`\x20pour\x20erreurs','execSync','\x20\x203.\x20Tous\x20les\x20dossiers\x20res/layout/,\x20res/values/,\x20res/mipmap*\x20existent-ils?','\x5cjar\x22\x20tf\x20\x22','\x0a⚠\x20Vérification\x20projet:\x20fichiers\x20minimaux\x20manquants\x20détectés:','res/values/strings.xml','filter',';\x0a\x0aimport\x20android.app.Activity;\x0aimport\x20android.os.Bundle;\x0a\x0apublic\x20class\x20','Compilation\x20de:\x20','copyFileSync','4HjAoTC','⚠\x20classes.dex\x20non\x20trouvé','resolve','38720907DCnebW','child_process','Chemin\x20attendu:\x20','endsWith','push','MyApp','generate-resources.js','Avertissement:\x20erreur\x20lors\x20de\x20la\x20génération\x20des\x20stubs\x20d\x27activité:','\x0a===\x20Signing\x20APK\x20===','join','\x0aERREUR\x20CRITIQUE:\x20R.java\x20n\x27a\x20pas\x20été\x20généré\x20par\x20aapt2\x20link!','utf-8','✓\x20Conversion\x20DEX\x20réussie\x20après\x20correction\x20automatique','unsigned.apk','\x20===','\x0a===\x204)\x20CRÉATION\x20DU\x20JAR\x20===','replace','264zjlgiD','\x20a\x20échoué','parse','\x22\x20compile\x20-o\x20\x22','\x20(fichier\x20en\x20cours\x20d\x27utilisation)','win','ERREUR:\x20aligned.apk\x20introuvable','\x20\x20</style>\x0a','android.jar','map','\x0aERREUR:\x20Certaines\x20activities\x20déclarées\x20dans\x20AndroidManifest.xml\x20sont\x20absentes\x20du\x20JAR:','aligned.apk','✓\x20Aucune\x20activity\x20déclarée\x20dans\x20le\x20manifest\x20à\x20vérifier.','51581SIFCat','Avertissement:\x20AndroidManifest.xml\x20introuvable\x20—\x20vérification\x20sautée','error','app-config.json\x20trouvé\x20dans:\x20','\x20--out\x20\x22','startsWith','\x20extends\x20Activity\x20{\x0a\x20\x20\x20\x20@Override\x0a\x20\x20\x20\x20protected\x20void\x20onCreate(Bundle\x20savedInstanceState)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20super.onCreate(savedInstanceState);\x0a\x20\x20\x20\x20}\x0a}\x0a','\x22\x20-I\x20\x22','.jpeg','platforms','AAPT2','ERREUR:\x20classes.jar\x20introuvable\x20—\x20impossible\x20de\x20vérifier\x20les\x20classes','✓\x20Vérification\x20des\x20activities:\x20toutes\x20les\x20activities\x20du\x20manifest\x20sont\x20présentes\x20dans\x20classes.jar','//\x20GENERATED_BY_generate-resources','Exécution:\x20','\x20\x201.\x20Les\x20fichiers\x20XML\x20dans\x20res/values/\x20sont-ils\x20valides?','res','readFileSync','\x22\x20--output\x20\x22','isArray','\x0a--\x20Ignoring\x20missing\x20files\x20due\x20to\x20--ignore-missing','⚠\x20Zipalign\x20échoué,\x20copie\x20directe\x20de\x20unsigned.apk','\x22\x20-f\x204\x20\x22','app-config.json','\x0a---\x20javap\x20verbose\x20---','jdk','android-34','argv','\x0aVérifications\x20à\x20faire:','classes','minimalRequiredFiles','\x0aERREUR:\x20Fichiers\x20minimaux\x20manquants.\x20Arrêt\x20du\x20build.','\x5cjavac\x22\x20--release\x208\x20-Xlint:-options\x20-cp\x20','existsSync','/classes','R.java','\x22\x20link\x20-o\x20\x22','\x0a✓\x20Build\x20terminé\x20avec\x20succès!','missingFiles','---\x0a','Package:\x20','readdirSync','Message\x20d\x27erreur:','packageName','\x0a===\x206)\x20AJOUT\x20DU\x20DEX\x20À\x20L\x27APK\x20===','\x5ckeytool\x22\x20-genkey\x20-noprompt\x20-alias\x20key\x20-dname\x20\x22CN=','\x22\x20--ks-pass\x20pass:123456\x20--min-sdk-version\x20','src','length','7za.exe','generated','\x0aUsage:','Recreating\x20JAR\x20after\x20recompilation','✓\x20Ressources\x20liées\x20avec\x20succès','size','activity','.9.png','✓\x20Keystore\x20existant\x20réutilisé:\x20','\x0a===\x20✓\x20COMPILATION\x20RÉUSSIE\x20===','inherit','package\x20','\x20\x20PROJECT_PATH=/chemin/vers/projet\x20node\x20build_apk.js','/layout/','\x20--no-backup','aapt2.exe','\x0aOptions:','\x0a===\x20','7zip-bin','android','✓\x20Supprimé:\x20','Dossier\x20MyApp\x20trouvé\x20par\x20défaut:\x20','.apk','8637496EWrJdB','\x22\x20--auto-add-overlay\x20\x22','PROJECT_PATH','\x22\x20-o\x22','.webp','env','warn','message','⚠\x20Impossible\x20de\x20supprimer\x20','cmd.exe','Création\x20du\x20JAR','✓\x20APK\x20signé\x20avec\x20succès','--ignore-missing','ERREUR\x20lors\x20de\x20la\x20vérification\x20des\x20classes\x20dans\x20le\x20JAR:','rmSync','ERREUR:\x20app-config.json\x20non\x20trouvé\x20dans\x20le\x20projet!','toFixed','mkdirSync','\x0a===\x203)\x20COMPILATION\x20DE\x20JAVA\x20===','✓\x20DEX\x20ajouté\x20à\x20l\x27APK','\x22\x20--java\x20\x22','\x22\x20\x22','\x22\x20.','Argument\x20CLI\x20détecté:\x20','/compiledResources\x22\x20\x22','Aligning\x20APK','\x0aCause\x20probable:\x20les\x20sources\x20Java\x20n\x27ont\x20pas\x20été\x20trouvées/compilées\x20ou\x20le\x20package\x20des\x20.java\x20ne\x20correspond\x20pas\x20au\x20manifest.','⚠\x20JAR\x20non\x20trouvé,\x20création\x20DEX\x20vide','match','Classe\x20problématique\x20détectée:\x20','140155LTfgzW','node\x20\x22','compiledResources','34.0.0','\x0a✓\x20Vérification\x20projet:\x20tous\x20les\x20fichiers\x20minimaux\x20présents','timeout\x20/t\x201\x20/nobreak','\x20\x202.\x20AndroidManifest.xml\x20est-il\x20bien\x20formé?','exit','now','ignore','\x20-\x20que\x20`generate-resources.js`\x20n\x27a\x20pas\x20supprimé\x20des\x20fichiers\x20importants','includes','classes.jar','\x22\x20--lib\x20\x22','\x22\x20e\x20-y\x20\x22','3438453NuBLtQ','\x20-d\x20\x22','<resources>\x0a','hasJava','🔄\x20Restauration\x20des\x20fichiers\x20depuis\x20le\x20backup...\x0a','\x20-\x20que\x20les\x20.java\x20existent\x20dans\x20`src/`\x20avec\x20le\x20bon\x20`package`\x20en\x20tête','isDirectory','ERREUR:\x20D8\x20échoue\x20encore\x20après\x20tentative\x20de\x20correction\x20automatique.','\x0a===\x20Compile\x20','android-sdk','statSync','path','writeFileSync','--no-backup'];_0x2770=function(){return _0x2a39f6;};return _0x2770();}process[_0x434724(0x18e)][0x2]&&(projectDir=path[_0x434724(0x154)](process[_0x434724(0x18e)][0x2]),console[_0x434724(0x133)](_0x434724(0xce)+projectDir));!projectDir&&process[_0x434724(0x1c0)][_0x434724(0x1bd)]&&(projectDir=path['resolve'](process[_0x434724(0x1c0)]['PROJECT_PATH']),console[_0x434724(0x133)](_0x434724(0x10d)+projectDir));if(!projectDir){let searchDir=process[_0x434724(0x134)]();for(let i=0x0;i<0x5;i++){const configPath=path[_0x434724(0x15e)](searchDir,_0x434724(0x18a));if(fs[_0x434724(0x194)](configPath)){projectDir=searchDir,console[_0x434724(0x133)](_0x434724(0x176)+projectDir);break;}searchDir=path[_0x434724(0x11e)](searchDir);}}if(!projectDir){const defaultPaths=[path[_0x434724(0x15e)](__dirname,'..','..',_0x434724(0x15a)),path[_0x434724(0x154)](_0x434724(0x15a)),path[_0x434724(0x15e)](process['env']['USERPROFILE']||process[_0x434724(0x1c0)][_0x434724(0x120)]||'',_0x434724(0x15a))];for(const checkPath of defaultPaths){if(checkPath&&fs[_0x434724(0x194)](checkPath)&&fs[_0x434724(0x194)](path[_0x434724(0x15e)](checkPath,_0x434724(0x18a)))){projectDir=checkPath,console[_0x434724(0x133)](_0x434724(0x1b9)+projectDir);break;}}}(!projectDir||!fs[_0x434724(0x194)](projectDir))&&(console[_0x434724(0x175)](_0x434724(0xf9)),console[_0x434724(0x175)](_0x434724(0x1a6)),console[_0x434724(0x175)](_0x434724(0xf3)),console[_0x434724(0x175)](_0x434724(0x1b0)),console[_0x434724(0x175)](_0x434724(0x1b4)),process['exit'](0x1));const buildToolsDir=__dirname,skipBackup=process[_0x434724(0x18e)][_0x434724(0xe0)](_0x434724(0xf1)),restoreFromBackup=process[_0x434724(0x18e)][_0x434724(0xe0)]('--restore');if(restoreFromBackup){console[_0x434724(0x133)](_0x434724(0xe8));try{execSync(_0x434724(0xd6)+path[_0x434724(0x15e)](buildToolsDir,_0x434724(0x15b))+_0x434724(0xcc)+projectDir+'\x22\x20--restore',{'stdio':'inherit','shell':_0x434724(0x1c4)}),console[_0x434724(0x133)](_0x434724(0x140)),process['exit'](0x0);}catch(_0xadc543){console[_0x434724(0x175)]('ERREUR:\x20Restauration\x20échouée'),process['exit'](0x1);}}const configPath=path[_0x434724(0x15e)](projectDir,_0x434724(0x18a));!fs['existsSync'](configPath)&&(console[_0x434724(0x175)](_0x434724(0x1ca)),process[_0x434724(0xdc)](0x1));const appConfig=JSON[_0x434724(0x168)](fs[_0x434724(0x184)](configPath,_0x434724(0x160)));console['log'](_0x434724(0x150)+appConfig['appName']+'\x20v'+appConfig['appVersion']),console['log'](_0x434724(0x19b)+appConfig[_0x434724(0x19e)]),console['log'](_0x434724(0x19a)),console[_0x434724(0x133)]('Génération\x20des\x20ressources\x20dynamiques...');const backupOption=skipBackup?_0x434724(0x1b2):'';try{execSync(_0x434724(0xd6)+path['join'](buildToolsDir,_0x434724(0x15b))+_0x434724(0xcc)+projectDir+'\x22'+backupOption,{'stdio':_0x434724(0x1ae)});}catch(_0x5e91fa){console[_0x434724(0x175)]('ERREUR:\x20Génération\x20des\x20ressources\x20échouée'),process[_0x434724(0xdc)](0x1);}console[_0x434724(0x133)](''),console[_0x434724(0x133)]('Génération\x20des\x20icônes\x20pour\x20les\x20différentes\x20densités...');try{execSync(_0x434724(0xd6)+path[_0x434724(0x15e)](buildToolsDir,'generate-icons.js')+_0x434724(0xcc)+projectDir+'\x22',{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'});}catch(_0x3968d9){console['warn'](_0x434724(0x124)),console['warn']('Détail:\x20'+_0x3968d9[_0x434724(0x1c2)][_0x434724(0xf6)](0x0,0x64));}console[_0x434724(0x133)]('');const ignoreMissing=process['argv'][_0x434724(0xe0)](_0x434724(0x1c7)),failOnMissing=process[_0x434724(0x18e)][_0x434724(0xe0)](_0x434724(0x11b));function scanProjectForMissingFiles(_0x5d2306,_0xa02bf0){const _0x36d2bd=_0x434724,_0x3be1ff=_0xa02bf0&&Array[_0x36d2bd(0x186)](_0xa02bf0[_0x36d2bd(0x191)])?_0xa02bf0[_0x36d2bd(0x191)]:[_0x36d2bd(0xfd),_0x36d2bd(0x14d),_0x36d2bd(0x10e),'res/layout/activity_main.xml'],_0x404080=[];for(const _0x18634c of _0x3be1ff){const _0x30e345=path[_0x36d2bd(0x15e)](_0x5d2306,_0x18634c);if(!fs[_0x36d2bd(0x194)](_0x30e345))_0x404080[_0x36d2bd(0x159)](_0x18634c);}let _0x193365=![];const _0x484e3c=path[_0x36d2bd(0x15e)](_0x5d2306,_0x36d2bd(0x1a2));if(fs[_0x36d2bd(0x194)](_0x484e3c)){const _0x369405=[_0x484e3c];while(_0x369405['length']){const _0x4e96cc=_0x369405[_0x36d2bd(0x108)]();try{for(const _0x487636 of fs[_0x36d2bd(0x19c)](_0x4e96cc)){const _0x24647e=path['join'](_0x4e96cc,_0x487636),_0xd5649b=fs[_0x36d2bd(0xee)](_0x24647e);if(_0xd5649b[_0x36d2bd(0xea)]())_0x369405['push'](_0x24647e);else{if(_0x487636[_0x36d2bd(0x158)](_0x36d2bd(0x104))){_0x193365=!![];break;}}}}catch(_0x34190d){}if(_0x193365)break;}}return{'missingFiles':_0x404080,'hasJava':_0x193365};}const scanResult=scanProjectForMissingFiles(projectDir,appConfig);if(scanResult['missingFiles'][_0x434724(0x1a3)]>0x0){console[_0x434724(0x1c1)](_0x434724(0x14c));for(const m of scanResult[_0x434724(0x199)])console[_0x434724(0x1c1)]('\x20-\x20'+m);!ignoreMissing?failOnMissing?(console[_0x434724(0x175)](_0x434724(0x192)),process['exit'](0x1)):console['warn'](_0x434724(0x105)):console[_0x434724(0x133)](_0x434724(0x187));}else console['log'](_0x434724(0xd9));!scanResult[_0x434724(0xe7)]&&console[_0x434724(0x1c1)]('\x0a⚠\x20Aucune\x20source\x20Java\x20détectée\x20sous\x20`src/`\x20—\x20le\x20build\x20générera\x20des\x20stubs\x20ou\x20utilisera\x20les\x20fichiers\x20générés\x20par\x20aapt2\x20si\x20nécessaire.');const VENDOR_DIR=path[_0x434724(0x15e)](buildToolsDir,'vendor'),SDK=path[_0x434724(0x15e)](VENDOR_DIR,_0x434724(0x1b7),_0x434724(0xed)),JDK=path[_0x434724(0x15e)](VENDOR_DIR,_0x434724(0x1b7),_0x434724(0x18c),'bin'),AAPT2=path['join'](SDK,_0x434724(0x12d),_0x434724(0xd8),_0x434724(0x1b3)),ANDROID_JAR=path[_0x434724(0x15e)](SDK,_0x434724(0x17c),_0x434724(0x18d),_0x434724(0x16e)),D8=path[_0x434724(0x15e)](SDK,_0x434724(0x12d),'34.0.0','d8.bat'),ZIPALIGN=path['join'](SDK,_0x434724(0x12d),_0x434724(0xd8),'zipalign.exe'),APKSIGNER=path['join'](SDK,_0x434724(0x12d),_0x434724(0xd8),_0x434724(0x141)),SEVENZIP=path[_0x434724(0x15e)](VENDOR_DIR,_0x434724(0x1b6),_0x434724(0x16b),_0x434724(0x147),_0x434724(0x1a4)),requiredTools=[{'name':_0x434724(0x17d),'path':AAPT2},{'name':_0x434724(0x100),'path':ANDROID_JAR},{'name':'D8','path':D8},{'name':_0x434724(0x11f),'path':ZIPALIGN},{'name':_0x434724(0xf4),'path':APKSIGNER},{'name':_0x434724(0x107),'path':SEVENZIP},{'name':_0x434724(0x12f),'path':path[_0x434724(0x15e)](JDK,_0x434724(0x142))}];for(const tool of requiredTools){!fs[_0x434724(0x194)](tool[_0x434724(0xef)])&&(console['error']('\x0aERREUR:\x20'+tool[_0x434724(0x114)]+'\x20non\x20trouvé\x20à:\x20'+tool[_0x434724(0xef)]),console[_0x434724(0x175)]('Vérifiez\x20que\x20le\x20SDK\x20Android\x20et\x20JDK\x20sont\x20correctement\x20installés.'),process['exit'](0x1));}const BUILD_DIR=path[_0x434724(0x15e)](projectDir,'build'),SRC_DIR=path[_0x434724(0x15e)](projectDir,_0x434724(0x1a2)),RES_DIR=path[_0x434724(0x15e)](projectDir,_0x434724(0x183));function run(_0x16287b,_0x46898d,_0x38ea70=projectDir){const _0x23d300=_0x434724;console[_0x23d300(0x133)](_0x23d300(0x1b5)+_0x46898d+'\x20===');try{const _0x227266=execSync(_0x16287b,{'cwd':_0x38ea70,'stdio':'inherit','shell':_0x23d300(0x1c4)});return!![];}catch(_0x292b76){console[_0x23d300(0x175)]('ERREUR:\x20'+_0x46898d+_0x23d300(0x167)),process[_0x23d300(0xdc)](0x1);}}function copyFile(_0x2d0b97,_0x1a2d02){const _0x29604e=_0x434724,_0x58eaac=path['dirname'](_0x1a2d02);!fs[_0x29604e(0x194)](_0x58eaac)&&fs[_0x29604e(0x1cc)](_0x58eaac,{'recursive':!![]}),fs[_0x29604e(0x151)](_0x2d0b97,_0x1a2d02);}function removeDir(_0x2390dd){const _0x5ee191=_0x434724;fs['existsSync'](_0x2390dd)&&fs[_0x5ee191(0x1c9)](_0x2390dd,{'recursive':!![],'force':!![]});}function makeDir(_0xdb35af){const _0x5a4803=_0x434724;!fs[_0x5a4803(0x194)](_0xdb35af)&&fs['mkdirSync'](_0xdb35af,{'recursive':!![]});}const APK_NAME=path[_0x434724(0x15e)](projectDir,appConfig[_0x434724(0x10c)][_0x434724(0x165)](/\s+/g,'')+_0x434724(0x1ba));console['log']('Nettoyage\x20complet\x20de\x20tous\x20les\x20fichiers\x20générés...'),removeDir(BUILD_DIR);if(fs['existsSync'](APK_NAME))try{fs[_0x434724(0x129)](APK_NAME),console['log'](_0x434724(0x1b8)+APK_NAME);}catch(_0x263f97){console['warn'](_0x434724(0x1c3)+APK_NAME+_0x434724(0x16a));}const keystoreName=appConfig[_0x434724(0x10c)]['replace'](/\s+/g,'')+'.keystore';console[_0x434724(0x133)]('✓\x20Structure\x20de\x20build\x20recréée\x0a'),makeDir(BUILD_DIR),makeDir(BUILD_DIR+_0x434724(0x195)),makeDir(BUILD_DIR+_0x434724(0x106));const stylesDir=path['join'](projectDir,_0x434724(0x183),_0x434724(0x137)),stylesPath=path[_0x434724(0x15e)](stylesDir,_0x434724(0x102));try{!fs[_0x434724(0x194)](stylesDir)&&fs[_0x434724(0x1cc)](stylesDir,{'recursive':!![]});if(!fs[_0x434724(0x194)](stylesPath)){const defaultStyles='<?xml\x20version=\x221.0\x22\x20encoding=\x22utf-8\x22?>\x0a'+_0x434724(0xe6)+'\x20\x20<style\x20name=\x22AppTheme\x22\x20parent=\x22android:Theme.DeviceDefault.Light.DarkActionBar\x22>\x0a'+_0x434724(0x16d)+'</resources>\x0a';fs[_0x434724(0xf0)](stylesPath,defaultStyles,'utf8'),console['log']('✓\x20styles.xml\x20par\x20défaut\x20créé\x20pour\x20éviter\x20les\x20erreurs\x20de\x20thème');}}catch(_0x33533a){console['warn']('Avertissement:\x20impossible\x20de\x20créer\x20styles.xml\x20par\x20défaut:',_0x33533a[_0x434724(0x1c2)]);}console[_0x434724(0x133)](_0x434724(0x122));const layoutFiles=fs[_0x434724(0x194)](path[_0x434724(0x15e)](RES_DIR,_0x434724(0x110)))?fs[_0x434724(0x19c)](path['join'](RES_DIR,'layout'))[_0x434724(0x14e)](_0x4ac8de=>_0x4ac8de[_0x434724(0x158)](_0x434724(0x123))):[],valueFiles=fs[_0x434724(0x194)](path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137)))?fs[_0x434724(0x19c)](path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137)))['filter'](_0x72b0d5=>_0x72b0d5['endsWith']('.xml')):[],allResources=[];for(const file of layoutFiles){console[_0x434724(0x133)](_0x434724(0xec)+path['join'](RES_DIR,_0x434724(0x110),file)+_0x434724(0x163));const cmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+BUILD_DIR+_0x434724(0xcf)+path[_0x434724(0x15e)](RES_DIR,_0x434724(0x110),file)+'\x22';try{execSync(cmd,{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0xe69d6c){console['error'](_0x434724(0x11c)+file+_0x434724(0xf2));}allResources[_0x434724(0x159)](RES_DIR+_0x434724(0x1b1)+file);}for(const file of valueFiles){console['log'](_0x434724(0xec)+path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137),file)+'\x20===');const cmd='\x22'+AAPT2+_0x434724(0x169)+BUILD_DIR+_0x434724(0xcf)+path[_0x434724(0x15e)](RES_DIR,_0x434724(0x137),file)+'\x22';try{execSync(cmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'});}catch(_0x3c23a7){console[_0x434724(0x175)](_0x434724(0x11c)+file+_0x434724(0xf2));}allResources[_0x434724(0x159)](RES_DIR+_0x434724(0x113)+file);}for(let mimapDir of fs[_0x434724(0x19c)](RES_DIR)[_0x434724(0x14e)](_0x4ba701=>_0x4ba701[_0x434724(0x178)]('mipmap'))){const mimapPath=path['join'](RES_DIR,mimapDir);if(fs[_0x434724(0xee)](mimapPath)['isDirectory']()){const files=fs[_0x434724(0x19c)](mimapPath)['filter'](_0x5463d8=>_0x5463d8[_0x434724(0x158)](_0x434724(0x111)));for(const file of files){console[_0x434724(0x133)](_0x434724(0xec)+path[_0x434724(0x15e)](mimapDir,file)+_0x434724(0x163));const cmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+BUILD_DIR+_0x434724(0xcf)+path['join'](mimapPath,file)+'\x22';try{execSync(cmd,{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0x1711e8){console['error']('Avertissement:\x20Compilation\x20de\x20'+file+_0x434724(0xf2));}}}}console[_0x434724(0x133)]('\x0a===\x20Compile\x20récursif\x20des\x20ressources\x20restantes\x20===');const resourceExtensions=[_0x434724(0x123),_0x434724(0x111),'.jpg',_0x434724(0x17b),_0x434724(0x1bf),_0x434724(0x1ab)];function _0x26e4(_0x17ec2e,_0x4b0668){const _0x27700a=_0x2770();return _0x26e4=function(_0x26e48b,_0x347703){_0x26e48b=_0x26e48b-0xcb;let _0x4a2334=_0x27700a[_0x26e48b];return _0x4a2334;},_0x26e4(_0x17ec2e,_0x4b0668);}function walkDirForResources(_0x582f10){const _0x31960e=_0x434724,_0x2eec54=[];if(!fs[_0x31960e(0x194)](_0x582f10))return _0x2eec54;const _0x3851cb=fs['readdirSync'](_0x582f10);for(const _0x86f03f of _0x3851cb){const _0x3ac5f9=path[_0x31960e(0x15e)](_0x582f10,_0x86f03f),_0x3493a1=fs['statSync'](_0x3ac5f9);if(_0x3493a1[_0x31960e(0xea)]())_0x2eec54[_0x31960e(0x159)](...walkDirForResources(_0x3ac5f9));else{const _0x3ac3c9=path[_0x31960e(0x125)](_0x86f03f)['toLowerCase']();(resourceExtensions[_0x31960e(0xe0)](_0x3ac3c9)||_0x86f03f['endsWith'](_0x31960e(0x1ab)))&&_0x2eec54[_0x31960e(0x159)](_0x3ac5f9);}}return _0x2eec54;}const allResFiles=walkDirForResources(RES_DIR);for(const resFile of allResFiles){console['log'](_0x434724(0xec)+resFile+_0x434724(0x163));const compileCmd='\x22'+AAPT2+'\x22\x20compile\x20-o\x20\x22'+path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0xd7))+_0x434724(0xcc)+resFile+'\x22';try{execSync(compileCmd,{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0x31a59c){console[_0x434724(0x1c1)]('Avertissement:\x20impossible\x20de\x20compiler\x20'+resFile+_0x434724(0x139));}}console['log'](_0x434724(0x101));const apkPath=path['join'](BUILD_DIR,_0x434724(0x144)),resourcesDir=path['join'](BUILD_DIR,'compiledResources'),generatedDir=path[_0x434724(0x154)](BUILD_DIR,_0x434724(0x1a5));if(!fs[_0x434724(0x194)](resourcesDir))fs['mkdirSync'](resourcesDir,{'recursive':!![]});if(!fs[_0x434724(0x194)](generatedDir))fs['mkdirSync'](generatedDir,{'recursive':!![]});const compiledFiles=fs[_0x434724(0x19c)](resourcesDir)[_0x434724(0x14e)](_0x4ed70c=>_0x4ed70c[_0x434724(0x158)]('.flat')||_0x4ed70c[_0x434724(0x158)]('.zip'))['map'](_0x313705=>path['join'](resourcesDir,_0x313705));console['log']('Création\x20de\x20la\x20structure\x20APK\x20et\x20génération\x20de\x20R.java...');try{let linkCmd;const manifestPath=path[_0x434724(0x15e)](projectDir,_0x434724(0xfd));if(compiledFiles[_0x434724(0x1a3)]>0x0){const compiledArgs=compiledFiles[_0x434724(0x16f)](_0x1a6cd6=>'\x22'+_0x1a6cd6+'\x22')[_0x434724(0x15e)]('\x20');linkCmd='\x22'+AAPT2+_0x434724(0x197)+apkPath+'\x22\x20-I\x20\x22'+ANDROID_JAR+'\x22\x20--manifest\x20\x22'+manifestPath+'\x22\x20--java\x20\x22'+generatedDir+'\x22\x20'+compiledArgs;}else linkCmd='\x22'+AAPT2+'\x22\x20link\x20-o\x20\x22'+apkPath+_0x434724(0x17a)+ANDROID_JAR+_0x434724(0x12b)+manifestPath+_0x434724(0xcb)+generatedDir+_0x434724(0x1bc)+path[_0x434724(0x15e)](projectDir,'res')+'\x22';console[_0x434724(0x133)](_0x434724(0x181)+linkCmd[_0x434724(0xf6)](0x0,0x64)+'...'),execSync(linkCmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'}),console[_0x434724(0x133)](_0x434724(0x1a8));}catch(_0x5bcb06){console['error'](_0x434724(0xfb)),console[_0x434724(0x175)](_0x434724(0x19d),_0x5bcb06[_0x434724(0x1c2)][_0x434724(0xf6)](0x0,0xc8)),process['exit'](0x1);}function findRJava(){const _0x1b4a4a=[];try{const _0x29caad=_0xcf5dad=>{const _0x58e361=_0x26e4,_0x49b06e=fs['readdirSync'](_0xcf5dad);for(const _0x528c55 of _0x49b06e){const _0x5cf883=path[_0x58e361(0x15e)](_0xcf5dad,_0x528c55),_0x1af0f5=fs[_0x58e361(0xee)](_0x5cf883);if(_0x1af0f5['isDirectory']())_0x29caad(_0x5cf883);else _0x528c55===_0x58e361(0x196)&&_0x1b4a4a[_0x58e361(0x159)](_0x5cf883);}};_0x29caad(generatedDir);}catch(_0x2b4caf){}return _0x1b4a4a;}const rJavaFiles=findRJava();rJavaFiles['length']===0x0&&(console[_0x434724(0x175)](_0x434724(0x15f)),console[_0x434724(0x175)](_0x434724(0x132)+generatedDir),console[_0x434724(0x175)]('Cause\x20possible:\x20fichiers\x20res/\x20mal\x20structurés,\x20XML\x20invalides,\x20ou\x20manifest\x20corrompu.'),console['error'](_0x434724(0x18f)),console[_0x434724(0x175)](_0x434724(0x182)),console[_0x434724(0x175)](_0x434724(0xdb)),console[_0x434724(0x175)](_0x434724(0x14a)),console[_0x434724(0x175)]('\x0aBuild\x20échouée\x20-\x20APK\x20n\x27est\x20pas\x20généré.'),process[_0x434724(0xdc)](0x1));console[_0x434724(0x133)](_0x434724(0x128)+rJavaFiles[0x0]),console[_0x434724(0x133)](_0x434724(0x1cd));const javaFiles=[],srcPath=SRC_DIR,findJavaFiles=_0x57b820=>{const _0x5b0f2c=_0x434724,_0x28f449=fs['readdirSync'](_0x57b820);for(const _0x5ab7b3 of _0x28f449){const _0x156ac2=path[_0x5b0f2c(0x15e)](_0x57b820,_0x5ab7b3),_0x1ee80e=fs[_0x5b0f2c(0xee)](_0x156ac2);if(_0x1ee80e[_0x5b0f2c(0xea)]())findJavaFiles(_0x156ac2);else _0x5ab7b3[_0x5b0f2c(0x158)](_0x5b0f2c(0x104))&&javaFiles[_0x5b0f2c(0x159)](_0x156ac2);}};fs[_0x434724(0x194)](srcPath)&&findJavaFiles(srcPath);const generatedJavaDir=path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x1a5));if(fs['existsSync'](generatedJavaDir)){const findGeneratedJavaFiles=_0x223307=>{const _0x44058f=_0x434724,_0x315613=[],_0x84a0b=fs[_0x44058f(0x19c)](_0x223307);for(const _0x5e1db5 of _0x84a0b){const _0xb52772=path['join'](_0x223307,_0x5e1db5),_0x1f8b91=fs[_0x44058f(0xee)](_0xb52772);if(_0x1f8b91['isDirectory']())_0x315613[_0x44058f(0x159)](...findGeneratedJavaFiles(_0xb52772));else _0x5e1db5['endsWith'](_0x44058f(0x104))&&_0x315613[_0x44058f(0x159)](_0xb52772);}return _0x315613;};try{const genFiles=findGeneratedJavaFiles(generatedJavaDir);genFiles[_0x434724(0x1a3)]>0x0&&(javaFiles['push'](...genFiles),console['log']('✓\x20'+genFiles[_0x434724(0x1a3)]+'\x20fichiers\x20Java\x20générés\x20par\x20aapt2\x20ajoutés\x20à\x20la\x20compilation'));}catch(_0x5e78cf){console['warn'](_0x434724(0x118),_0x5e78cf['message']);}}function ensureActivityStubs(){const _0x13047a=_0x434724;try{const _0x359096=path['join'](projectDir,'AndroidManifest.xml');if(!fs[_0x13047a(0x194)](_0x359096))return;const _0xe8bf08=fs[_0x13047a(0x184)](_0x359096,'utf8'),_0xe2a6f=_0xe8bf08[_0x13047a(0xd3)](/<manifest[^>]*\spackage\s*=\s*['"]([^'"]+)['"]/),_0x5f593c=_0xe2a6f?_0xe2a6f[0x1]:null,_0x365efa=/<activity[^>]*android:name\s*=\s*['\"]([^'\"]+)['\"]/g;let _0x3024c0;const _0x521059=new Set();while((_0x3024c0=_0x365efa[_0x13047a(0xff)](_0xe8bf08))!==null){_0x521059['add'](_0x3024c0[0x1]);}if(_0x521059[_0x13047a(0x1a9)]===0x0)return;const _0x376b1d=path['join'](BUILD_DIR,_0x13047a(0x1a5));if(!fs[_0x13047a(0x194)](_0x376b1d))fs['mkdirSync'](_0x376b1d,{'recursive':!![]});for(const _0x2495cd of _0x521059){let _0x586109=_0x2495cd;if(_0x2495cd[_0x13047a(0x178)]('.')){if(_0x5f593c)_0x586109=_0x5f593c+_0x2495cd;}else!_0x2495cd['includes']('.')&&_0x5f593c&&(_0x586109=_0x5f593c+'.'+_0x2495cd);const _0x32a838=_0x586109[_0x13047a(0x11a)]('.'),_0x35d09a=_0x32a838[_0x13047a(0x108)](),_0x5b2bd7=_0x32a838[_0x13047a(0x15e)](path[_0x13047a(0xf5)]),_0xbf70fd=path[_0x13047a(0x15e)](_0x376b1d,_0x5b2bd7);if(!fs[_0x13047a(0x194)](_0xbf70fd))fs[_0x13047a(0x1cc)](_0xbf70fd,{'recursive':!![]});const _0x5d7ede=path['join'](_0xbf70fd,_0x35d09a+_0x13047a(0x104));if(!fs['existsSync'](_0x5d7ede)){const _0x412a04=_0x13047a(0x1af)+_0x32a838[_0x13047a(0x15e)]('.')+_0x13047a(0x14f)+_0x35d09a+_0x13047a(0x179);try{fs[_0x13047a(0xf0)](_0x5d7ede,_0x412a04,_0x13047a(0x13b)),console[_0x13047a(0x133)](_0x13047a(0x117)+_0x5d7ede);}catch(_0x2f7fea){console[_0x13047a(0x1c1)](_0x13047a(0x13a),_0x2f7fea[_0x13047a(0x1c2)]);}}javaFiles[_0x13047a(0x159)](_0x5d7ede);}}catch(_0x5caca6){console[_0x13047a(0x1c1)](_0x13047a(0x15c),_0x5caca6[_0x13047a(0x1c2)]);}}javaFiles[_0x434724(0x1a3)]===0x0&&(console[_0x434724(0x1c1)](_0x434724(0x10f)),ensureActivityStubs());if(javaFiles[_0x434724(0x1a3)]===0x0)console[_0x434724(0x1c1)](_0x434724(0x13e));else{const classPath='\x22'+ANDROID_JAR+'\x22',javaFilesStr=javaFiles[_0x434724(0x16f)](_0x58ce53=>'\x22'+_0x58ce53+'\x22')[_0x434724(0x15e)]('\x20'),compileCmd='\x22'+JDK+_0x434724(0x193)+classPath+_0x434724(0xe5)+path['join'](BUILD_DIR,_0x434724(0x190))+'\x22\x20'+javaFilesStr;run(compileCmd,_0x434724(0x12a));}console[_0x434724(0x133)](_0x434724(0x164));const classesDir=path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190)),jarPath=path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0xe1));if(fs[_0x434724(0x194)](classesDir)){const jarCmd='\x22'+JDK+'\x5cjar\x22\x20cvf\x20\x22'+jarPath+_0x434724(0x145)+classesDir+_0x434724(0xcd);run(jarCmd,_0x434724(0x1c5));}else console[_0x434724(0x1c1)](_0x434724(0x10b));function checkManifestClassesPresentInJar(){const _0x5bdce2=_0x434724;try{!fs[_0x5bdce2(0x194)](jarPath)&&(console[_0x5bdce2(0x175)](_0x5bdce2(0x17e)),process[_0x5bdce2(0xdc)](0x1));const _0x1805ca=path[_0x5bdce2(0x15e)](projectDir,_0x5bdce2(0xfd));if(!fs[_0x5bdce2(0x194)](_0x1805ca)){console[_0x5bdce2(0x1c1)](_0x5bdce2(0x174));return;}const _0x5d0afb=fs['readFileSync'](_0x1805ca,_0x5bdce2(0x13b)),_0x46ecf7=_0x5d0afb[_0x5bdce2(0xd3)](/<manifest[^>]*\spackage\s*=\s*['"]([^'\"]+)['"]/),_0x5872f8=_0x46ecf7?_0x46ecf7[0x1]:appConfig&&appConfig[_0x5bdce2(0x19e)]||null,_0x35654c=/<activity[^>]*android:name\s*=\s*['\"]([^'\"]+)['\"]/g;let _0x1ecb4d;const _0x5d7d9a=[];while((_0x1ecb4d=_0x35654c[_0x5bdce2(0xff)](_0x5d0afb))!==null){let _0x564936=_0x1ecb4d[0x1];if(_0x564936[_0x5bdce2(0x178)]('.')){if(_0x5872f8)_0x564936=_0x5872f8+_0x564936;}else!_0x564936[_0x5bdce2(0xe0)]('.')&&_0x5872f8&&(_0x564936=_0x5872f8+'.'+_0x564936);_0x5d7d9a['push'](_0x564936);}if(_0x5d7d9a[_0x5bdce2(0x1a3)]===0x0){console[_0x5bdce2(0x133)](_0x5bdce2(0x172));return;}const _0x29f806=execSync('\x22'+JDK+_0x5bdce2(0x14b)+jarPath+'\x22',{'encoding':_0x5bdce2(0x13b),'stdio':[_0x5bdce2(0x103),_0x5bdce2(0x103),_0x5bdce2(0xde)]}),_0x34b2a3=[];for(const _0xb12943 of _0x5d7d9a){const _0x3e4a0b=_0xb12943[_0x5bdce2(0x165)](/\./g,'/')+'.class';!_0x29f806[_0x5bdce2(0xe0)](_0x3e4a0b)&&_0x34b2a3['push']({'activity':_0xb12943,'expected':_0x3e4a0b});}if(_0x34b2a3['length']>0x0){console[_0x5bdce2(0x175)](_0x5bdce2(0x170));for(const _0x2a4340 of _0x34b2a3){console[_0x5bdce2(0x175)]('\x20-\x20'+_0x2a4340[_0x5bdce2(0x1aa)]+_0x5bdce2(0xf7)+_0x2a4340['expected']+')');}console[_0x5bdce2(0x175)](_0x5bdce2(0xd1)),console['error']('Vérifiez:'),console['error'](_0x5bdce2(0xe9)),console[_0x5bdce2(0x175)](_0x5bdce2(0xdf)),console['error'](_0x5bdce2(0x148)),process[_0x5bdce2(0xdc)](0x1);}console[_0x5bdce2(0x133)](_0x5bdce2(0x17f));}catch(_0x5ca2ca){console[_0x5bdce2(0x175)](_0x5bdce2(0x1c8),_0x5ca2ca['message']),process[_0x5bdce2(0xdc)](0x1);}}checkManifestClassesPresentInJar(),console[_0x434724(0x133)](_0x434724(0x138));const dexPath=path['join'](BUILD_DIR,'classes.dex');if(fs[_0x434724(0x194)](jarPath)){const d8Cmd='\x22'+D8+_0x434724(0xe2)+ANDROID_JAR+_0x434724(0x185)+BUILD_DIR+_0x434724(0xcc)+jarPath+'\x22';console[_0x434724(0x133)](_0x434724(0x131));try{execSync(d8Cmd,{'stdio':'inherit','shell':_0x434724(0x1c4)}),console['log']('✓\x20Conversion\x20DEX\x20réussie');}catch(_0x617dee){const msg=_0x617dee&&_0x617dee['message']?_0x617dee[_0x434724(0x1c2)]:String(_0x617dee),classMatch=msg['match'](/([^:\s]+\.jar):([^:\s]+\.class)/);let problematicClassEntry=null;if(classMatch)problematicClassEntry=classMatch[0x2][_0x434724(0x165)](/\\\\/g,'/');else{const alt=msg[_0x434724(0xd3)](/(com\/[\w\/-]*\$?[^\s:]*\.class)/);if(alt)problematicClassEntry=alt[0x1];}console[_0x434724(0x175)]('\x0aERREUR:\x20D8\x20a\x20échoué\x20lors\x20de\x20la\x20conversion\x20en\x20DEX.');if(problematicClassEntry){console[_0x434724(0x175)](_0x434724(0xd4)+problematicClassEntry);try{const tmpDir=path['join'](BUILD_DIR,_0x434724(0x130));if(!fs['existsSync'](tmpDir))fs[_0x434724(0x1cc)](tmpDir,{'recursive':!![]});const extractCmd='\x22'+SEVENZIP+_0x434724(0xe3)+jarPath+_0x434724(0xcc)+problematicClassEntry+_0x434724(0x1be)+tmpDir+'\x22';try{execSync(extractCmd,{'stdio':'inherit','shell':'cmd.exe'});}catch(_0x38cae8){try{execSync('\x22'+SEVENZIP+'\x22\x20e\x20-y\x20\x22'+jarPath+'\x22\x20\x22*'+path['basename'](problematicClassEntry)+_0x434724(0x1be)+tmpDir+'\x22',{'stdio':_0x434724(0x1ae),'shell':_0x434724(0x1c4)});}catch(_0x5d9910){}}const extracted=path['join'](tmpDir,path[_0x434724(0x127)](problematicClassEntry));if(fs[_0x434724(0x194)](extracted)){console[_0x434724(0x133)]('\x0a✓\x20Classe\x20extraite\x20pour\x20diagnostic:\x20'+extracted);try{const javapCmd='\x22'+JDK+_0x434724(0x135)+extracted+'\x22';console[_0x434724(0x133)](_0x434724(0x18b)),execSync(javapCmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'}),console[_0x434724(0x133)]('---\x20fin\x20javap\x20---\x0a');}catch(_0x4a1229){console[_0x434724(0x1c1)]('Impossible\x20d\x27exécuter\x20javap\x20sur\x20la\x20classe\x20extraite:',_0x4a1229[_0x434724(0x1c2)]);}}else console[_0x434724(0x1c1)](_0x434724(0x13f));}catch(_0x3fe905){console[_0x434724(0x1c1)]('Erreur\x20durant\x20le\x20diagnostic\x20D8:',_0x3fe905[_0x434724(0x1c2)]);}}try{if(problematicClassEntry){const classPathNoDollar=problematicClassEntry[_0x434724(0x11a)]('$')[0x0],javaPath=path[_0x434724(0x15e)](projectDir,_0x434724(0x1a2),classPathNoDollar[_0x434724(0x165)](/\//g,path[_0x434724(0xf5)])+'.java');if(fs[_0x434724(0x194)](javaPath)){const content=fs[_0x434724(0x184)](javaPath,_0x434724(0x13b));if(content[_0x434724(0xe0)](_0x434724(0x180))){console['log']('\x0aTentative:\x20fichier\x20source\x20généré\x20détecté.\x20Suppression\x20et\x20recompilation.'),fs['unlinkSync'](javaPath),removeDir(path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190))),makeDir(path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190)));const javaFilesNow=[],findJavaFilesLocal=_0x537323=>{const _0x311c27=_0x434724,_0x41719a=fs[_0x311c27(0x19c)](_0x537323);for(const _0x5bffd2 of _0x41719a){const _0x523209=path['join'](_0x537323,_0x5bffd2),_0x208ab6=fs['statSync'](_0x523209);if(_0x208ab6[_0x311c27(0xea)]())findJavaFilesLocal(_0x523209);else{if(_0x5bffd2[_0x311c27(0x158)](_0x311c27(0x104)))javaFilesNow[_0x311c27(0x159)](_0x523209);}}};if(fs[_0x434724(0x194)](srcPath))findJavaFilesLocal(srcPath);if(fs[_0x434724(0x194)](path['join'](BUILD_DIR,_0x434724(0x1a5))))findJavaFilesLocal(path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x1a5)));if(javaFilesNow[_0x434724(0x1a3)]>0x0){const classPathArg='\x22'+ANDROID_JAR+'\x22',javaFilesStr2=javaFilesNow['map'](_0x351155=>'\x22'+_0x351155+'\x22')[_0x434724(0x15e)]('\x20'),compileCmd2='\x22'+JDK+_0x434724(0x193)+classPathArg+'\x20-d\x20\x22'+path[_0x434724(0x15e)](BUILD_DIR,_0x434724(0x190))+'\x22\x20'+javaFilesStr2;run(compileCmd2,_0x434724(0x13c));const jarCmd2='\x22'+JDK+_0x434724(0x121)+jarPath+_0x434724(0x145)+classesDir+_0x434724(0xcd);run(jarCmd2,_0x434724(0x1a7));try{execSync(d8Cmd,{'stdio':_0x434724(0x1ae),'shell':'cmd.exe'}),console[_0x434724(0x133)](_0x434724(0x161));}catch(_0x81de93){console[_0x434724(0x175)](_0x434724(0xeb)),process[_0x434724(0xdc)](0x1);}}else console[_0x434724(0x1c1)](_0x434724(0x112)),process[_0x434724(0xdc)](0x1);}else console['warn'](_0x434724(0x115));}else console[_0x434724(0x1c1)]('Fichier\x20source\x20Java\x20correspondant\x20introuvable:\x20'+javaPath);}}catch(_0x398e81){console[_0x434724(0x1c1)](_0x434724(0x119),_0x398e81[_0x434724(0x1c2)]);}process[_0x434724(0xdc)](0x1);}}else console[_0x434724(0x1c1)](_0x434724(0xd2));console[_0x434724(0x133)](_0x434724(0x19f));try{if(fs[_0x434724(0x194)](dexPath)){const unsignedApkFull=path['resolve'](BUILD_DIR,path[_0x434724(0x127)](apkPath)),classesDexFull=path[_0x434724(0x154)](dexPath),addDexCmd='\x22'+SEVENZIP+_0x434724(0x109)+unsignedApkFull+'\x22\x20\x22'+classesDexFull+'\x22';execSync(addDexCmd,{'cwd':path[_0x434724(0x154)](BUILD_DIR),'stdio':_0x434724(0x1ae),'shell':'cmd.exe','timeout':0xea60}),console[_0x434724(0x133)](_0x434724(0x1ce));}else console[_0x434724(0x1c1)](_0x434724(0x153));}catch(_0x3b25b5){console[_0x434724(0x175)]('ERREUR:\x20Ajout\x20du\x20DEX\x20échoué:\x20'+_0x3b25b5[_0x434724(0x1c2)]),process['exit'](0x1);}console['log']('\x0a===\x207)\x20ALIGNEMENT\x20DE\x20L\x27APK\x20===');const alignedApkPath=path['join'](BUILD_DIR,_0x434724(0x171)),unsignedApkPath=path['join'](BUILD_DIR,_0x434724(0x162));fs['existsSync'](apkPath)&&fs[_0x434724(0x11d)](apkPath,unsignedApkPath);try{run('\x22'+ZIPALIGN+_0x434724(0x189)+unsignedApkPath+_0x434724(0xcc)+alignedApkPath+'\x22',_0x434724(0xd0));}catch(_0x184d45){console[_0x434724(0x1c1)](_0x434724(0x188)),fs['copyFileSync'](unsignedApkPath,alignedApkPath);}console[_0x434724(0x133)]('\x0a===\x208)\x20SIGNATURE\x20DE\x20L\x27APK\x20===');const keystorePath=path['join'](projectDir,keystoreName);if(!fs[_0x434724(0x194)](keystorePath)){console[_0x434724(0x133)]('Création\x20du\x20keystore...');const keygenCmd='\x22'+JDK+_0x434724(0x1a0)+appConfig['appName']+_0x434724(0xfa)+keystorePath+_0x434724(0xfc);try{execSync(keygenCmd,{'cwd':projectDir,'stdio':'pipe','shell':_0x434724(0x1c4)}),console[_0x434724(0x133)](_0x434724(0x13d));}catch(_0x3137c8){console[_0x434724(0x175)]('ERREUR:\x20Impossible\x20de\x20créer\x20le\x20keystore'),process[_0x434724(0xdc)](0x1);}}else console[_0x434724(0x133)](_0x434724(0x1ac)+keystorePath);if(fs[_0x434724(0x194)](alignedApkPath)){const minSdkVersion=appConfig[_0x434724(0x12c)]||0x15,signCmd='\x22'+APKSIGNER+_0x434724(0x146)+keystorePath+_0x434724(0x1a1)+minSdkVersion+_0x434724(0x177)+APK_NAME+'\x22\x20\x22'+alignedApkPath+'\x22';console[_0x434724(0x133)](_0x434724(0x15d)),console[_0x434724(0x133)]('Commande:\x20'+signCmd),console[_0x434724(0x133)](_0x434724(0x136)+APK_NAME);try{const output=execSync(signCmd,{'cwd':projectDir,'stdio':_0x434724(0x103),'shell':'cmd.exe','encoding':'utf-8'});console[_0x434724(0x133)](_0x434724(0x1c6));}catch(_0x21ae02){console['log'](_0x434724(0x126)),console[_0x434724(0x133)]('Détails:\x20'+_0x21ae02[_0x434724(0x1c2)][_0x434724(0xf6)](0x0,0xc8));}const maxWait=0xbb8,startWait=Date['now']();while(!fs['existsSync'](APK_NAME)&&Date[_0x434724(0xdd)]()-startWait<maxWait){require(_0x434724(0x156))[_0x434724(0x149)](_0x434724(0xda),{'shell':_0x434724(0x1c4)});}if(fs[_0x434724(0x194)](APK_NAME)){const stats=fs[_0x434724(0xee)](APK_NAME),endTime=Date[_0x434724(0xdd)](),buildTime=((endTime-startTime)/0x3e8)[_0x434724(0x1cb)](0x2);console[_0x434724(0x133)](_0x434724(0x1ad)),console[_0x434724(0x133)](_0x434724(0x116)+APK_NAME),console[_0x434724(0x133)]('Taille:\x20'+stats[_0x434724(0x1a9)]+_0x434724(0xfe)),console['log']('Temps\x20de\x20build:\x20'+buildTime+'s'),console[_0x434724(0x133)](_0x434724(0x198));}else console['error'](_0x434724(0x12e)),console[_0x434724(0x175)](_0x434724(0x157)+APK_NAME),console['error']('Fichiers\x20dans\x20le\x20répertoire:',fs[_0x434724(0x19c)](projectDir)[_0x434724(0x14e)](_0x4ed6f2=>_0x4ed6f2[_0x434724(0x158)](_0x434724(0x1ba)))),process[_0x434724(0xdc)](0x1);}else console[_0x434724(0x175)](_0x434724(0x16c)),console['error'](_0x434724(0x10a)+alignedApkPath),process[_0x434724(0xdc)](0x1);
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const { execSync } = require('child_process');
6
+
7
+ // Couleurs pour le terminal
8
+ const colors = {
9
+ reset: '\x1b[0m',
10
+ bright: '\x1b[1m',
11
+ cyan: '\x1b[36m',
12
+ green: '\x1b[32m',
13
+ yellow: '\x1b[33m',
14
+ red: '\x1b[31m'
15
+ };
16
+
17
+ function copyDir(src, dest) {
18
+ if (!fs.existsSync(dest)) {
19
+ fs.mkdirSync(dest, { recursive: true });
20
+ }
21
+
22
+ const files = fs.readdirSync(src);
23
+ for (const file of files) {
24
+ const srcPath = path.join(src, file);
25
+ const destPath = path.join(dest, file);
26
+ const stat = fs.statSync(srcPath);
27
+
28
+ if (stat.isDirectory()) {
29
+ copyDir(srcPath, destPath);
30
+ } else {
31
+ fs.copyFileSync(srcPath, destPath);
32
+ }
33
+ }
34
+ }
35
+
36
+ // Déterminer le chemin source (MyApp)
37
+ const sourceApp = path.join(__dirname, '..', '..', 'MyApp');
38
+
39
+ // Déterminer le chemin de destination
40
+ const destName = process.argv[2] || 'MyApp-Example';
41
+ const destApp = path.resolve(destName);
42
+
43
+ console.log(`\n${colors.bright}${colors.cyan}╔════════════════════════════════════════════╗${colors.reset}`);
44
+ console.log(`${colors.bright}${colors.cyan}║ COPIE DE L'EXEMPLE D'APPLICATION ║${colors.reset}`);
45
+ console.log(`${colors.bright}${colors.cyan}╚════════════════════════════════════════════╝${colors.reset}\n`);
46
+
47
+ // Vérifier que MyApp existe
48
+ if (!fs.existsSync(sourceApp)) {
49
+ console.error(`${colors.red}✗ Erreur: Le dossier MyApp n'a pas été trouvé à: ${sourceApp}${colors.reset}\n`);
50
+ process.exit(1);
51
+ }
52
+
53
+ // Vérifier que la destination n'existe pas déjà
54
+ if (fs.existsSync(destApp)) {
55
+ console.error(`${colors.red}✗ Erreur: Le dossier ${destApp} existe déjà!${colors.reset}\n`);
56
+ process.exit(1);
57
+ }
58
+
59
+ console.log(`${colors.yellow}Copie de MyApp vers ${destApp}...${colors.reset}`);
60
+
61
+ try {
62
+ copyDir(sourceApp, destApp);
63
+ console.log(`${colors.green}✓ Copie réussie!${colors.reset}\n`);
64
+
65
+ console.log(`${colors.bright}Prochaines étapes:${colors.reset}`);
66
+ console.log(` 1. Accédez au dossier: ${colors.cyan}cd ${destApp}${colors.reset}`);
67
+ console.log(` 2. Modifiez app-config.json selon vos besoins`);
68
+ console.log(` 3. Lancez le build: ${colors.cyan}node ../metadidomi-builder/build_tools/build_apk.js .${colors.reset}\n`);
69
+
70
+ } catch (err) {
71
+ console.error(`${colors.red}✗ Erreur lors de la copie: ${err.message}${colors.reset}\n`);
72
+ process.exit(1);
73
+ }
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const { execSync } = require('child_process');
5
+
6
+ const SEVENZIP = 'D:\\Metadidomi Crone\\metadidomi-builder\\build_tools\\vendor\\7zip-bin\\win\\ia32\\7za.exe';
7
+ const apkPath = 'MyApp.apk';
8
+
9
+ if (!fs.existsSync(apkPath)) {
10
+ console.error(`ERREUR: ${apkPath} non trouvé`);
11
+ process.exit(1);
12
+ }
13
+
14
+ console.log(`Diagnostic de l'APK: ${apkPath}\n`);
15
+
16
+ // 1. Vérifier la taille
17
+ const stats = fs.statSync(apkPath);
18
+ console.log(`1. Taille de l'APK: ${stats.size} octets`);
19
+
20
+ // 2. Lister les fichiers dans l'APK
21
+ console.log(`\n2. Contenu de l'APK:`);
22
+ try {
23
+ const output = execSync(`"${SEVENZIP}" l "${apkPath}"`, { encoding: 'utf-8', shell: 'cmd.exe' });
24
+ console.log(output);
25
+ } catch (err) {
26
+ console.error('ERREUR: Impossible de lister les fichiers de l\'APK');
27
+ }
28
+
29
+ // 3. Vérifier les fichiers requis
30
+ console.log(`\n3. Vérification des fichiers requis:`);
31
+ const requiredFiles = ['AndroidManifest.xml', 'classes.dex', 'resources.arsc'];
32
+ for (const file of requiredFiles) {
33
+ try {
34
+ const listCmd = `"${SEVENZIP}" l "${apkPath}" | findstr /i "${file}"`;
35
+ execSync(listCmd, { stdio: 'inherit', shell: 'cmd.exe' });
36
+ console.log(`✓ ${file} présent`);
37
+ } catch (err) {
38
+ console.error(`✗ ${file} MANQUANT!`);
39
+ }
40
+ }
41
+
42
+ // 4. Tester l'intégrité du ZIP
43
+ console.log(`\n4. Test d'intégrité du ZIP:`);
44
+ try {
45
+ execSync(`"${SEVENZIP}" t "${apkPath}"`, { stdio: 'inherit', shell: 'cmd.exe' });
46
+ console.log('✓ APK OK - Aucune erreur d\'intégrité');
47
+ } catch (err) {
48
+ console.error('✗ APK CORROMPU - Erreurs d\'intégrité détectées!');
49
+ }
50
+
51
+ // 5. Vérifier la signature
52
+ console.log(`\n5. Signature de l'APK:`);
53
+ const apkSignerPath = 'D:\\Metadidomi Crone\\metadidomi-builder\\build_tools\\vendor\\android\\android-sdk\\build-tools\\34.0.0\\apksigner.bat';
54
+ try {
55
+ execSync(`"${apkSignerPath}" verify -verbose "${apkPath}"`, { stdio: 'inherit', shell: 'cmd.exe' });
56
+ console.log('✓ Signature valide');
57
+ } catch (err) {
58
+ console.error('✗ Problème de signature détecté');
59
+ }
60
+
61
+ console.log('\n=== Diagnostic terminé ===');
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ const _0x47313d=_0x1d66;(function(_0x26a9ce,_0x19eb36){const _0x41c55d=_0x1d66,_0x1c8313=_0x26a9ce();while(!![]){try{const _0x42650a=parseInt(_0x41c55d(0xb4))/0x1*(-parseInt(_0x41c55d(0xc0))/0x2)+parseInt(_0x41c55d(0x8f))/0x3+parseInt(_0x41c55d(0xcc))/0x4+-parseInt(_0x41c55d(0xdc))/0x5+parseInt(_0x41c55d(0xb6))/0x6+parseInt(_0x41c55d(0xb7))/0x7*(-parseInt(_0x41c55d(0xe3))/0x8)+-parseInt(_0x41c55d(0x88))/0x9;if(_0x42650a===_0x19eb36)break;else _0x1c8313['push'](_0x1c8313['shift']());}catch(_0x6887a9){_0x1c8313['push'](_0x1c8313['shift']());}}}(_0x4b4b,0x7632e));function _0x4b4b(){const _0x1809dd=['stdout','parse','meta.json','2968JlIcPQ','isDirectory','4587750RTfPEm','7kUmPFy','date','map','\x20\x20[Q]\x20Quitter','existsSync','\x0aNuméro\x20du\x20backup\x20à\x20supprimer\x20(ou\x20Q\x20pour\x20annuler):\x20','utf-8','forEach','\x0aAu\x20revoir!','554CXIgcI','toLocaleString','Options:','toUpperCase','pow','exit','timestamp','floor','length','question','app','\x20\x20\x20\x20App:\x20','1940740KDLbTk','.backup','app-config.json','version','basename','Choisir\x20une\x20option\x20(R/D/C/L/Q):\x20','toFixed','close','╚════════════════════════════════════════════════════════════════╝\x0a','argv','createInterface','size','readline','MyApp','\x0aNuméro\x20invalide!\x0a','pop','1486885RSfhAe','Aucun\x20backup\x20disponible.\x0a','\x0a✓\x20Backup\x20restauré\x20avec\x20succès!\x0a','reverse','?\x20(OUI/non):\x20','\x0aSuppression\x20annulée.\x0a','PROJECT_PATH','4074024YsMpgi','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20║','564705QKYXJt','\x20\x20[D]\x20Supprimer\x20un\x20backup','\x20\x20\x20\x20Description:\x20','\x0aRestauration\x20annulée.\x0a','metadata.json','╔════════════════════════════════════════════════════════════════╗','\x0aAucun\x20backup\x20à\x20supprimer.\x0a','2777529nGfRvO','dirname','filter','\x0aAucun\x20backup\x20à\x20restaurer.\x0a','name','message','join','description','readdirSync','readFileSync','copyFileSync','split','\x20\x20\x20\x20Taille:\x20','sort','═══════════════════════════════════════════════════════════════','\x20\x20\x20\x20Dossier:\x20','log','files','\x20\x20\x20\x20Package:\x20','\x0a⚠\x20ATTENTION:\x20Supprimer\x20TOUS\x20les\x20backups?\x20(OUI/non):\x20','═══════════════════════════════════════════════════════════════\x0a','resolve','\x20\x20[L]\x20Rafraîchir\x20la\x20liste','statSync','✓\x20Restauré:\x20','error','\x0a✓\x20Tous\x20les\x20backups\x20ont\x20été\x20supprimés!\x0a','\x20\x20\x20\x20Fichiers:\x20','env','folder','path','OUI','\x0aOption\x20invalide!\x0a','mkdirSync'];_0x4b4b=function(){return _0x1809dd;};return _0x4b4b();}const fs=require('fs'),path=require(_0x47313d(0xad)),readline=require(_0x47313d(0xd8));function _0x1d66(_0x16eb77,_0xc81e4f){const _0x4b4b7d=_0x4b4b();return _0x1d66=function(_0x1d66d8,_0x4af0a4){_0x1d66d8=_0x1d66d8-0x87;let _0x2e531c=_0x4b4b7d[_0x1d66d8];return _0x2e531c;},_0x1d66(_0x16eb77,_0xc81e4f);}let projectDir=null;if(process[_0x47313d(0xd5)][0x2])projectDir=path[_0x47313d(0xa4)](process['argv'][0x2]);else{if(process[_0x47313d(0xab)][_0x47313d(0xe2)])projectDir=path['resolve'](process[_0x47313d(0xab)]['PROJECT_PATH']);else{const defaultPaths=[path[_0x47313d(0x95)](__dirname,'..','..',_0x47313d(0xd9)),path[_0x47313d(0xa4)](_0x47313d(0xd9))];for(const checkPath of defaultPaths){if(checkPath&&fs['existsSync'](checkPath)&&fs[_0x47313d(0xbb)](path[_0x47313d(0x95)](checkPath,_0x47313d(0xce)))){projectDir=checkPath;break;}}}}(!projectDir||!fs[_0x47313d(0xbb)](projectDir))&&(console[_0x47313d(0xa8)]('ERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!'),process[_0x47313d(0xc5)](0x1));const BACKUP_DIR=path[_0x47313d(0x95)](projectDir,_0x47313d(0xcd)),rl=readline[_0x47313d(0xd6)]({'input':process['stdin'],'output':process[_0x47313d(0xb1)]});!fs[_0x47313d(0xbb)](BACKUP_DIR)&&fs[_0x47313d(0xb0)](BACKUP_DIR,{'recursive':!![]});function listBackups(){const _0x42cff4=_0x47313d;if(!fs[_0x42cff4(0xbb)](BACKUP_DIR))return console[_0x42cff4(0x9f)]('Aucun\x20backup\x20trouvé.'),[];const _0x5656d2=fs['readdirSync'](BACKUP_DIR)[_0x42cff4(0x91)](_0x4261eb=>fs[_0x42cff4(0xa6)](path[_0x42cff4(0x95)](BACKUP_DIR,_0x4261eb))[_0x42cff4(0xb5)]())[_0x42cff4(0x9c)]()[_0x42cff4(0xdf)]()[_0x42cff4(0xb9)](_0x5dc05d=>{const _0x57caaa=_0x42cff4,_0xdff1f7=path[_0x57caaa(0x95)](BACKUP_DIR,_0x5dc05d),_0x4c1e22=path[_0x57caaa(0x95)](_0xdff1f7,_0x57caaa(0x8c));let _0x5320c6={'timestamp':_0x5dc05d,'files':[],'app':{}};if(fs[_0x57caaa(0xbb)](_0x4c1e22))try{_0x5320c6=JSON[_0x57caaa(0xb2)](fs[_0x57caaa(0x98)](_0x4c1e22,_0x57caaa(0xbd)));}catch(_0x5d72f8){}return{'folder':_0x5dc05d,'timestamp':_0x5320c6[_0x57caaa(0xc6)],'date':new Date(_0x5320c6[_0x57caaa(0xc6)])[_0x57caaa(0xc1)]('fr-FR'),'app':_0x5320c6['app']||{},'files':_0x5320c6[_0x57caaa(0xa0)]||[],'size':getDirectorySize(_0xdff1f7)};});return _0x5656d2;}function getDirectorySize(_0x4a6e53){const _0xe7520e=_0x47313d;let _0x4e5d9f=0x0;const _0x52851d=fs[_0xe7520e(0x97)](_0x4a6e53);for(const _0x433e41 of _0x52851d){const _0x38f256=path['join'](_0x4a6e53,_0x433e41),_0x49ac6a=fs[_0xe7520e(0xa6)](_0x38f256);_0x49ac6a[_0xe7520e(0xb5)]()?_0x4e5d9f+=getDirectorySize(_0x38f256):_0x4e5d9f+=_0x49ac6a[_0xe7520e(0xd7)];}return _0x4e5d9f;}function formatSize(_0xd3d1d2){const _0xa466fa=_0x47313d;if(_0xd3d1d2===0x0)return'0\x20B';const _0xc1a6bf=0x400,_0x1c8007=['B','KB','MB','GB'],_0xef2e4b=Math[_0xa466fa(0xc7)](Math['log'](_0xd3d1d2)/Math[_0xa466fa(0x9f)](_0xc1a6bf));return parseFloat((_0xd3d1d2/Math[_0xa466fa(0xc4)](_0xc1a6bf,_0xef2e4b))[_0xa466fa(0xd2)](0x2))+'\x20'+_0x1c8007[_0xef2e4b];}function displayBackups(){const _0xd465a2=_0x47313d;console['clear'](),console[_0xd465a2(0x9f)](_0xd465a2(0x8d)),console[_0xd465a2(0x9f)]('║\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GESTIONNAIRE\x20DE\x20BACKUPS\x20-\x20'+projectDir[_0xd465a2(0x9a)]('\x5c')[_0xd465a2(0xdb)]()+_0xd465a2(0x87)),console[_0xd465a2(0x9f)](_0xd465a2(0xd4));const _0x33b23b=listBackups();if(_0x33b23b['length']===0x0){console['log'](_0xd465a2(0xdd)),showMenu();return;}console[_0xd465a2(0x9f)]('Backups\x20disponibles\x20(du\x20plus\x20récent\x20au\x20plus\x20ancien):\x0a'),_0x33b23b[_0xd465a2(0xbe)]((_0x299bed,_0x5e21c8)=>{const _0xdb313=_0xd465a2;console['log']('['+_0x5e21c8+']\x20'+_0x299bed['date']),console[_0xdb313(0x9f)](_0xdb313(0x9e)+_0x299bed[_0xdb313(0xac)]),_0x299bed[_0xdb313(0xca)]&&_0x299bed[_0xdb313(0xca)][_0xdb313(0x93)]&&(console[_0xdb313(0x9f)](_0xdb313(0xcb)+_0x299bed[_0xdb313(0xca)]['name']+'\x20v'+_0x299bed['app'][_0xdb313(0xcf)]),console['log'](_0xdb313(0x8a)+_0x299bed[_0xdb313(0xca)][_0xdb313(0x96)]),console[_0xdb313(0x9f)](_0xdb313(0xa1)+_0x299bed[_0xdb313(0xca)]['packageName'])),console[_0xdb313(0x9f)](_0xdb313(0x9b)+formatSize(_0x299bed[_0xdb313(0xd7)])),_0x299bed[_0xdb313(0xa0)][_0xdb313(0xc8)]>0x0&&console[_0xdb313(0x9f)](_0xdb313(0xaa)+_0x299bed['files']['join'](',\x20')),console[_0xdb313(0x9f)]();}),showMenu(_0x33b23b);}function showMenu(_0x84eef5=[]){const _0x4a29ca=_0x47313d;console['log'](_0x4a29ca(0x9d)),console[_0x4a29ca(0x9f)](_0x4a29ca(0xc2)),console['log']('\x20\x20[R]\x20Restaurer\x20un\x20backup'),console[_0x4a29ca(0x9f)](_0x4a29ca(0x89)),console[_0x4a29ca(0x9f)]('\x20\x20[C]\x20Tout\x20supprimer\x20(ATTENTION!)'),console[_0x4a29ca(0x9f)](_0x4a29ca(0xa5)),console[_0x4a29ca(0x9f)](_0x4a29ca(0xba)),console[_0x4a29ca(0x9f)](_0x4a29ca(0xa3)),rl['question'](_0x4a29ca(0xd1),_0x3f133d=>{const _0x4d955e=_0x4a29ca,_0x3de051=_0x3f133d[_0x4d955e(0xc3)]();switch(_0x3de051){case'R':restoreBackup(_0x84eef5);break;case'D':deleteBackup(_0x84eef5);break;case'C':deleteAllBackups();break;case'L':displayBackups();break;case'Q':console['log'](_0x4d955e(0xbf)),rl[_0x4d955e(0xd3)]();break;default:console['log'](_0x4d955e(0xaf)),displayBackups();}});}function restoreBackup(_0x1d816d){const _0x43bb8c=_0x47313d;if(_0x1d816d[_0x43bb8c(0xc8)]===0x0){console[_0x43bb8c(0x9f)](_0x43bb8c(0x92)),displayBackups();return;}rl[_0x43bb8c(0xc9)]('\x0aNuméro\x20du\x20backup\x20à\x20restaurer\x20(ou\x20Q\x20pour\x20annuler):\x20',_0x3bb493=>{const _0xda330a=_0x43bb8c;if(_0x3bb493[_0xda330a(0xc3)]()==='Q'){displayBackups();return;}const _0x2e4368=parseInt(_0x3bb493);if(isNaN(_0x2e4368)||_0x2e4368<0x0||_0x2e4368>=_0x1d816d['length']){console[_0xda330a(0x9f)](_0xda330a(0xda)),displayBackups();return;}const _0x52d9d5=_0x1d816d[_0x2e4368];rl[_0xda330a(0xc9)]('\x0aConfirmer\x20la\x20restauration\x20de\x20'+_0x52d9d5[_0xda330a(0xb8)]+_0xda330a(0xe0),_0x5d75e8=>{const _0x1686bc=_0xda330a;if(_0x5d75e8[_0x1686bc(0xc3)]()!=='OUI'&&_0x5d75e8['toUpperCase']()!=='O'){console[_0x1686bc(0x9f)](_0x1686bc(0x8b)),displayBackups();return;}try{const _0x15b69c=path[_0x1686bc(0x95)](BACKUP_DIR,_0x52d9d5[_0x1686bc(0xac)]),_0x163c57=path['join'](_0x15b69c,_0x1686bc(0xb3)),_0x55d9db=JSON['parse'](fs['readFileSync'](_0x163c57,'utf-8'));for(const _0x4e1918 of _0x55d9db[_0x1686bc(0xa0)]){const _0x4c1a73=path[_0x1686bc(0x95)](_0x15b69c,path[_0x1686bc(0xd0)](_0x4e1918));if(fs[_0x1686bc(0xbb)](_0x4c1a73)){const _0x2fa872=path[_0x1686bc(0x95)](projectDir,_0x4e1918),_0x5a9965=path[_0x1686bc(0x90)](_0x2fa872);!fs[_0x1686bc(0xbb)](_0x5a9965)&&fs[_0x1686bc(0xb0)](_0x5a9965,{'recursive':!![]}),fs[_0x1686bc(0x99)](_0x4c1a73,_0x2fa872),console[_0x1686bc(0x9f)](_0x1686bc(0xa7)+_0x4e1918);}}console[_0x1686bc(0x9f)](_0x1686bc(0xde)),displayBackups();}catch(_0x27def0){console[_0x1686bc(0xa8)]('\x0a✗\x20Erreur\x20lors\x20de\x20la\x20restauration:\x20'+_0x27def0[_0x1686bc(0x94)]+'\x0a'),displayBackups();}});});}function deleteBackup(_0x272160){const _0x42f38d=_0x47313d;if(_0x272160[_0x42f38d(0xc8)]===0x0){console[_0x42f38d(0x9f)](_0x42f38d(0x8e)),displayBackups();return;}rl['question'](_0x42f38d(0xbc),_0x1b7e8f=>{const _0x5bf569=_0x42f38d;if(_0x1b7e8f[_0x5bf569(0xc3)]()==='Q'){displayBackups();return;}const _0x58259a=parseInt(_0x1b7e8f);if(isNaN(_0x58259a)||_0x58259a<0x0||_0x58259a>=_0x272160[_0x5bf569(0xc8)]){console['log']('\x0aNuméro\x20invalide!\x0a'),displayBackups();return;}const _0x18d246=_0x272160[_0x58259a];rl[_0x5bf569(0xc9)]('\x0aConfirmer\x20la\x20suppression\x20de\x20'+_0x18d246[_0x5bf569(0xb8)]+_0x5bf569(0xe0),_0x487e9d=>{const _0x12ff67=_0x5bf569;if(_0x487e9d[_0x12ff67(0xc3)]()!==_0x12ff67(0xae)&&_0x487e9d['toUpperCase']()!=='O'){console[_0x12ff67(0x9f)](_0x12ff67(0xe1)),displayBackups();return;}try{const _0x19b0e3=path[_0x12ff67(0x95)](BACKUP_DIR,_0x18d246[_0x12ff67(0xac)]);fs['rmSync'](_0x19b0e3,{'recursive':!![],'force':!![]}),console[_0x12ff67(0x9f)]('\x0a✓\x20Backup\x20supprimé\x20avec\x20succès!\x0a'),displayBackups();}catch(_0x4152f0){console[_0x12ff67(0xa8)]('\x0a✗\x20Erreur\x20lors\x20de\x20la\x20suppression:\x20'+_0x4152f0[_0x12ff67(0x94)]+'\x0a'),displayBackups();}});});}function deleteAllBackups(){const _0x104661=_0x47313d;rl['question'](_0x104661(0xa2),_0x5d2597=>{const _0x413200=_0x104661;if(_0x5d2597['toUpperCase']()!=='OUI'&&_0x5d2597[_0x413200(0xc3)]()!=='O'){console['log'](_0x413200(0xe1)),displayBackups();return;}rl[_0x413200(0xc9)]('CONFIRMER:\x20Taper\x20\x22JE\x20SUIS\x20SÛR\x22\x20pour\x20continuer:\x20',_0xad229b=>{const _0x54b4a4=_0x413200;if(_0xad229b!=='JE\x20SUIS\x20SÛR'){console[_0x54b4a4(0x9f)]('\x0aSuppression\x20annulée.\x0a'),displayBackups();return;}try{fs[_0x54b4a4(0xbb)](BACKUP_DIR)&&(fs['rmSync'](BACKUP_DIR,{'recursive':!![],'force':!![]}),fs[_0x54b4a4(0xb0)](BACKUP_DIR,{'recursive':!![]})),console[_0x54b4a4(0x9f)](_0x54b4a4(0xa9)),displayBackups();}catch(_0x1bb4fc){console[_0x54b4a4(0xa8)]('\x0a✗\x20Erreur\x20lors\x20de\x20la\x20suppression:\x20'+_0x1bb4fc[_0x54b4a4(0x94)]+'\x0a'),displayBackups();}});});}displayBackups();
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ const _0x410fe2=_0x19eb;(function(_0x3ebdbc,_0x4b6369){const _0x37767b=_0x19eb,_0x4919df=_0x3ebdbc();while(!![]){try{const _0x1a5cb9=-parseInt(_0x37767b(0x153))/0x1+-parseInt(_0x37767b(0x13a))/0x2+-parseInt(_0x37767b(0x161))/0x3+parseInt(_0x37767b(0x15c))/0x4+parseInt(_0x37767b(0x150))/0x5*(parseInt(_0x37767b(0x172))/0x6)+parseInt(_0x37767b(0x188))/0x7+-parseInt(_0x37767b(0x154))/0x8;if(_0x1a5cb9===_0x4b6369)break;else _0x4919df['push'](_0x4919df['shift']());}catch(_0x174956){_0x4919df['push'](_0x4919df['shift']());}}}(_0x357e,0x80f9f));const fs=require('fs'),path=require(_0x410fe2(0x166)),readline=require(_0x410fe2(0x17c));let projectDir=null;if(process[_0x410fe2(0x15a)][0x2])projectDir=path[_0x410fe2(0x167)](process[_0x410fe2(0x15a)][0x2]);else{if(process[_0x410fe2(0x16d)][_0x410fe2(0x18a)])projectDir=path['resolve'](process[_0x410fe2(0x16d)]['PROJECT_PATH']);else{const defaultPaths=[path['join'](__dirname,'..','..',_0x410fe2(0x13e)),path[_0x410fe2(0x167)](_0x410fe2(0x13e))];for(const checkPath of defaultPaths){if(checkPath&&fs[_0x410fe2(0x14c)](checkPath)&&fs[_0x410fe2(0x14c)](path[_0x410fe2(0x182)](checkPath,'app-config.json'))){projectDir=checkPath;break;}}}}(!projectDir||!fs[_0x410fe2(0x14c)](projectDir))&&(console[_0x410fe2(0x184)](_0x410fe2(0x15e)),process[_0x410fe2(0x151)](0x1));const BACKUP_DIR=path[_0x410fe2(0x182)](projectDir,_0x410fe2(0x13d)),rl=readline['createInterface']({'input':process[_0x410fe2(0x179)],'output':process[_0x410fe2(0x17e)]});!fs[_0x410fe2(0x14c)](BACKUP_DIR)&&fs['mkdirSync'](BACKUP_DIR,{'recursive':!![]});function listBackups(){const _0x249f7=_0x410fe2;if(!fs[_0x249f7(0x14c)](BACKUP_DIR))return console[_0x249f7(0x177)](_0x249f7(0x185)),[];const _0x50a416=fs['readdirSync'](BACKUP_DIR)[_0x249f7(0x162)](_0x5e1a69=>fs[_0x249f7(0x13b)](path['join'](BACKUP_DIR,_0x5e1a69))[_0x249f7(0x178)]())[_0x249f7(0x14b)]()['reverse']()[_0x249f7(0x186)](_0x33d2e5=>{const _0x3e4296=_0x249f7,_0x4826ef=path[_0x3e4296(0x182)](BACKUP_DIR,_0x33d2e5),_0x9d05c5=path[_0x3e4296(0x182)](_0x4826ef,_0x3e4296(0x14a));let _0x321281={'timestamp':_0x33d2e5,'files':[],'app':{}};if(fs[_0x3e4296(0x14c)](_0x9d05c5))try{_0x321281=JSON[_0x3e4296(0x148)](fs['readFileSync'](_0x9d05c5,_0x3e4296(0x137)));}catch(_0x3534ae){}return{'folder':_0x33d2e5,'timestamp':_0x321281[_0x3e4296(0x155)],'date':new Date(_0x321281['timestamp'])[_0x3e4296(0x16b)](_0x3e4296(0x18f)),'app':_0x321281[_0x3e4296(0x13f)]||{},'files':_0x321281['files']||[],'size':getDirectorySize(_0x4826ef)};});return _0x50a416;}function getDirectorySize(_0x134ec8){const _0x5c6b1a=_0x410fe2;let _0x369a0e=0x0;const _0x335ad5=fs[_0x5c6b1a(0x14d)](_0x134ec8);for(const _0x4e6df6 of _0x335ad5){const _0x2b42e5=path[_0x5c6b1a(0x182)](_0x134ec8,_0x4e6df6),_0x150b1a=fs['statSync'](_0x2b42e5);_0x150b1a[_0x5c6b1a(0x178)]()?_0x369a0e+=getDirectorySize(_0x2b42e5):_0x369a0e+=_0x150b1a[_0x5c6b1a(0x16f)];}return _0x369a0e;}function _0x19eb(_0x4e98ac,_0x3147df){const _0x357e25=_0x357e();return _0x19eb=function(_0x19eb0a,_0x59b763){_0x19eb0a=_0x19eb0a-0x136;let _0x2a8099=_0x357e25[_0x19eb0a];return _0x2a8099;},_0x19eb(_0x4e98ac,_0x3147df);}function formatSize(_0x3d689e){const _0x5071f1=_0x410fe2;if(_0x3d689e===0x0)return'0\x20B';const _0x5d109a=0x400,_0x35f941=['B','KB','MB','GB'],_0x517863=Math[_0x5071f1(0x173)](Math[_0x5071f1(0x177)](_0x3d689e)/Math['log'](_0x5d109a));return parseFloat((_0x3d689e/Math[_0x5071f1(0x187)](_0x5d109a,_0x517863))[_0x5071f1(0x175)](0x2))+'\x20'+_0x35f941[_0x517863];}function _0x357e(){const _0x417712=['toUpperCase','date','path','resolve','\x0a⚠\x20ATTENTION:\x20Supprimer\x20TOUS\x20les\x20backups?\x20(OUI/non):\x20','OUI','close','toLocaleString','files','env','readFileSync','size','\x0a✗\x20Erreur\x20lors\x20de\x20la\x20suppression:\x20','\x20\x20[L]\x20Rafraîchir\x20la\x20liste','12qKGxOQ','floor','\x0aNuméro\x20invalide!\x0a','toFixed','\x0a✗\x20Erreur\x20lors\x20de\x20la\x20restauration:\x20','log','isDirectory','stdin','dirname','message','readline','\x0aSuppression\x20annulée.\x0a','stdout','\x0aNuméro\x20du\x20backup\x20à\x20restaurer\x20(ou\x20Q\x20pour\x20annuler):\x20','length','description','join','═══════════════════════════════════════════════════════════════\x0a','error','Aucun\x20backup\x20trouvé.','map','pow','1072169YCdBOP','packageName','PROJECT_PATH','forEach','name','folder','\x20\x20[D]\x20Supprimer\x20un\x20backup','fr-FR','\x0aNuméro\x20du\x20backup\x20à\x20supprimer\x20(ou\x20Q\x20pour\x20annuler):\x20','utf-8','Choisir\x20une\x20option\x20(R/D/C/L/Q):\x20','\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20║','406628UkivQy','statSync','\x0a✓\x20Tous\x20les\x20backups\x20ont\x20été\x20supprimés!\x0a','.backup','MyApp','app','basename','question','version','\x0a✓\x20Backup\x20supprimé\x20avec\x20succès!\x0a','\x0aAucun\x20backup\x20à\x20supprimer.\x0a','split','Options:','mkdirSync','parse','\x20\x20\x20\x20Taille:\x20','metadata.json','sort','existsSync','readdirSync','\x0aConfirmer\x20la\x20suppression\x20de\x20','Aucun\x20backup\x20disponible.\x0a','9155WHDZXI','exit','\x20\x20[Q]\x20Quitter','258111QQowKW','425344NgSwdS','timestamp','\x20\x20\x20\x20Fichiers:\x20','clear','╔════════════════════════════════════════════════════════════════╗','\x20\x20\x20\x20Dossier:\x20','argv','?\x20(OUI/non):\x20','3831580QoneZc','Backups\x20disponibles\x20(du\x20plus\x20récent\x20au\x20plus\x20ancien):\x0a','ERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!','═══════════════════════════════════════════════════════════════','\x0aAu\x20revoir!','215532eJyJrs','filter','rmSync'];_0x357e=function(){return _0x417712;};return _0x357e();}function displayBackups(){const _0x5a3488=_0x410fe2;console[_0x5a3488(0x157)](),console['log'](_0x5a3488(0x158)),console[_0x5a3488(0x177)]('║\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GESTIONNAIRE\x20DE\x20BACKUPS\x20-\x20'+projectDir[_0x5a3488(0x145)]('\x5c')['pop']()+_0x5a3488(0x139)),console[_0x5a3488(0x177)]('╚════════════════════════════════════════════════════════════════╝\x0a');const _0x512909=listBackups();if(_0x512909['length']===0x0){console[_0x5a3488(0x177)](_0x5a3488(0x14f)),showMenu();return;}console[_0x5a3488(0x177)](_0x5a3488(0x15d)),_0x512909[_0x5a3488(0x18b)]((_0x1c72a4,_0x1d7298)=>{const _0x26d617=_0x5a3488;console[_0x26d617(0x177)]('['+_0x1d7298+']\x20'+_0x1c72a4[_0x26d617(0x165)]),console[_0x26d617(0x177)](_0x26d617(0x159)+_0x1c72a4[_0x26d617(0x18d)]),_0x1c72a4[_0x26d617(0x13f)]&&_0x1c72a4[_0x26d617(0x13f)][_0x26d617(0x18c)]&&(console[_0x26d617(0x177)]('\x20\x20\x20\x20App:\x20'+_0x1c72a4[_0x26d617(0x13f)][_0x26d617(0x18c)]+'\x20v'+_0x1c72a4[_0x26d617(0x13f)][_0x26d617(0x142)]),console[_0x26d617(0x177)]('\x20\x20\x20\x20Description:\x20'+_0x1c72a4['app'][_0x26d617(0x181)]),console['log']('\x20\x20\x20\x20Package:\x20'+_0x1c72a4['app'][_0x26d617(0x189)])),console[_0x26d617(0x177)](_0x26d617(0x149)+formatSize(_0x1c72a4[_0x26d617(0x16f)])),_0x1c72a4[_0x26d617(0x16c)][_0x26d617(0x180)]>0x0&&console[_0x26d617(0x177)](_0x26d617(0x156)+_0x1c72a4[_0x26d617(0x16c)][_0x26d617(0x182)](',\x20')),console[_0x26d617(0x177)]();}),showMenu(_0x512909);}function showMenu(_0x5886ae=[]){const _0x24ee9f=_0x410fe2;console['log'](_0x24ee9f(0x15f)),console[_0x24ee9f(0x177)](_0x24ee9f(0x146)),console[_0x24ee9f(0x177)]('\x20\x20[R]\x20Restaurer\x20un\x20backup'),console[_0x24ee9f(0x177)](_0x24ee9f(0x18e)),console[_0x24ee9f(0x177)]('\x20\x20[C]\x20Tout\x20supprimer\x20(ATTENTION!)'),console['log'](_0x24ee9f(0x171)),console[_0x24ee9f(0x177)](_0x24ee9f(0x152)),console[_0x24ee9f(0x177)](_0x24ee9f(0x183)),rl[_0x24ee9f(0x141)](_0x24ee9f(0x138),_0x541873=>{const _0x56be2e=_0x24ee9f,_0x100e2f=_0x541873[_0x56be2e(0x164)]();switch(_0x100e2f){case'R':restoreBackup(_0x5886ae);break;case'D':deleteBackup(_0x5886ae);break;case'C':deleteAllBackups();break;case'L':displayBackups();break;case'Q':console[_0x56be2e(0x177)](_0x56be2e(0x160)),rl[_0x56be2e(0x16a)]();break;default:console[_0x56be2e(0x177)]('\x0aOption\x20invalide!\x0a'),displayBackups();}});}function restoreBackup(_0x80a798){const _0x8d271b=_0x410fe2;if(_0x80a798[_0x8d271b(0x180)]===0x0){console[_0x8d271b(0x177)]('\x0aAucun\x20backup\x20à\x20restaurer.\x0a'),displayBackups();return;}rl[_0x8d271b(0x141)](_0x8d271b(0x17f),_0x3b0d62=>{const _0x33eb38=_0x8d271b;if(_0x3b0d62['toUpperCase']()==='Q'){displayBackups();return;}const _0x5b99c6=parseInt(_0x3b0d62);if(isNaN(_0x5b99c6)||_0x5b99c6<0x0||_0x5b99c6>=_0x80a798[_0x33eb38(0x180)]){console[_0x33eb38(0x177)](_0x33eb38(0x174)),displayBackups();return;}const _0xb692a5=_0x80a798[_0x5b99c6];rl[_0x33eb38(0x141)]('\x0aConfirmer\x20la\x20restauration\x20de\x20'+_0xb692a5['date']+_0x33eb38(0x15b),_0x397804=>{const _0x4af7fa=_0x33eb38;if(_0x397804[_0x4af7fa(0x164)]()!==_0x4af7fa(0x169)&&_0x397804[_0x4af7fa(0x164)]()!=='O'){console[_0x4af7fa(0x177)]('\x0aRestauration\x20annulée.\x0a'),displayBackups();return;}try{const _0x426d2f=path[_0x4af7fa(0x182)](BACKUP_DIR,_0xb692a5[_0x4af7fa(0x18d)]),_0x515887=path['join'](_0x426d2f,'meta.json'),_0x28813e=JSON[_0x4af7fa(0x148)](fs[_0x4af7fa(0x16e)](_0x515887,'utf-8'));for(const _0x41409a of _0x28813e[_0x4af7fa(0x16c)]){const _0x1e97a4=path[_0x4af7fa(0x182)](_0x426d2f,path[_0x4af7fa(0x140)](_0x41409a));if(fs['existsSync'](_0x1e97a4)){const _0x29b4fb=path[_0x4af7fa(0x182)](projectDir,_0x41409a),_0x29d9ad=path[_0x4af7fa(0x17a)](_0x29b4fb);!fs[_0x4af7fa(0x14c)](_0x29d9ad)&&fs[_0x4af7fa(0x147)](_0x29d9ad,{'recursive':!![]}),fs['copyFileSync'](_0x1e97a4,_0x29b4fb),console[_0x4af7fa(0x177)]('✓\x20Restauré:\x20'+_0x41409a);}}console[_0x4af7fa(0x177)]('\x0a✓\x20Backup\x20restauré\x20avec\x20succès!\x0a'),displayBackups();}catch(_0x53ed51){console[_0x4af7fa(0x184)](_0x4af7fa(0x176)+_0x53ed51[_0x4af7fa(0x17b)]+'\x0a'),displayBackups();}});});}function deleteBackup(_0x7559e1){const _0x299f37=_0x410fe2;if(_0x7559e1[_0x299f37(0x180)]===0x0){console[_0x299f37(0x177)](_0x299f37(0x144)),displayBackups();return;}rl['question'](_0x299f37(0x136),_0x34a50d=>{const _0x22806c=_0x299f37;if(_0x34a50d['toUpperCase']()==='Q'){displayBackups();return;}const _0x47d32d=parseInt(_0x34a50d);if(isNaN(_0x47d32d)||_0x47d32d<0x0||_0x47d32d>=_0x7559e1['length']){console['log']('\x0aNuméro\x20invalide!\x0a'),displayBackups();return;}const _0x44a7d9=_0x7559e1[_0x47d32d];rl[_0x22806c(0x141)](_0x22806c(0x14e)+_0x44a7d9['date']+_0x22806c(0x15b),_0x38acc4=>{const _0x5a447a=_0x22806c;if(_0x38acc4['toUpperCase']()!==_0x5a447a(0x169)&&_0x38acc4['toUpperCase']()!=='O'){console['log'](_0x5a447a(0x17d)),displayBackups();return;}try{const _0x319efc=path[_0x5a447a(0x182)](BACKUP_DIR,_0x44a7d9[_0x5a447a(0x18d)]);fs[_0x5a447a(0x163)](_0x319efc,{'recursive':!![],'force':!![]}),console[_0x5a447a(0x177)](_0x5a447a(0x143)),displayBackups();}catch(_0x369ec1){console[_0x5a447a(0x184)](_0x5a447a(0x170)+_0x369ec1[_0x5a447a(0x17b)]+'\x0a'),displayBackups();}});});}function deleteAllBackups(){const _0x3933fc=_0x410fe2;rl[_0x3933fc(0x141)](_0x3933fc(0x168),_0x5d8659=>{const _0xb67208=_0x3933fc;if(_0x5d8659['toUpperCase']()!==_0xb67208(0x169)&&_0x5d8659[_0xb67208(0x164)]()!=='O'){console[_0xb67208(0x177)]('\x0aSuppression\x20annulée.\x0a'),displayBackups();return;}rl[_0xb67208(0x141)]('CONFIRMER:\x20Taper\x20\x22JE\x20SUIS\x20SÛR\x22\x20pour\x20continuer:\x20',_0x5ebc15=>{const _0x150371=_0xb67208;if(_0x5ebc15!=='JE\x20SUIS\x20SÛR'){console['log'](_0x150371(0x17d)),displayBackups();return;}try{fs['existsSync'](BACKUP_DIR)&&(fs[_0x150371(0x163)](BACKUP_DIR,{'recursive':!![],'force':!![]}),fs[_0x150371(0x147)](BACKUP_DIR,{'recursive':!![]})),console[_0x150371(0x177)](_0x150371(0x13c)),displayBackups();}catch(_0x81f3d5){console[_0x150371(0x184)](_0x150371(0x170)+_0x81f3d5[_0x150371(0x17b)]+'\x0a'),displayBackups();}});});}displayBackups();
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ const _0x2e84c0=_0x28fe;(function(_0xa781a0,_0x45b67d){const _0x294bac=_0x28fe,_0x599fa9=_0xa781a0();while(!![]){try{const _0x169017=-parseInt(_0x294bac(0x143))/0x1*(parseInt(_0x294bac(0x18c))/0x2)+-parseInt(_0x294bac(0x157))/0x3*(parseInt(_0x294bac(0x175))/0x4)+-parseInt(_0x294bac(0x15e))/0x5+parseInt(_0x294bac(0x184))/0x6+parseInt(_0x294bac(0x14e))/0x7*(parseInt(_0x294bac(0x17b))/0x8)+-parseInt(_0x294bac(0x15b))/0x9+-parseInt(_0x294bac(0x164))/0xa*(-parseInt(_0x294bac(0x178))/0xb);if(_0x169017===_0x45b67d)break;else _0x599fa9['push'](_0x599fa9['shift']());}catch(_0x10282c){_0x599fa9['push'](_0x599fa9['shift']());}}}(_0x2718,0x788e8));const fs=require('fs'),path=require(_0x2e84c0(0x13d)),readline=require('readline');let projectDir=null;if(process[_0x2e84c0(0x18a)][0x2])projectDir=path[_0x2e84c0(0x132)](process[_0x2e84c0(0x18a)][0x2]);else{if(process['env'][_0x2e84c0(0x133)])projectDir=path['resolve'](process['env'][_0x2e84c0(0x133)]);else{const defaultPaths=[path[_0x2e84c0(0x14c)](__dirname,'..','..',_0x2e84c0(0x166)),path[_0x2e84c0(0x132)]('MyApp')];for(const checkPath of defaultPaths){if(checkPath&&fs[_0x2e84c0(0x17f)](checkPath)&&fs[_0x2e84c0(0x17f)](path[_0x2e84c0(0x14c)](checkPath,_0x2e84c0(0x189)))){projectDir=checkPath;break;}}}}(!projectDir||!fs[_0x2e84c0(0x17f)](projectDir))&&(console['error'](_0x2e84c0(0x137)),process[_0x2e84c0(0x17d)](0x1));function _0x2718(){const _0x265fd4=['floor','8260731qQgSVI','mkdirSync','CONFIRMER:\x20Taper\x20\x22JE\x20SUIS\x20SÛR\x22\x20pour\x20continuer:\x20','3814480FpRKXG','readFileSync','Aucun\x20backup\x20disponible.\x0a','filter','\x0a✓\x20Backup\x20restauré\x20avec\x20succès!\x0a','\x0a✓\x20Tous\x20les\x20backups\x20ont\x20été\x20supprimés!\x0a','20aHMULl','size','MyApp','\x0aAucun\x20backup\x20à\x20supprimer.\x0a','close','stdout','OUI','isDirectory','JE\x20SUIS\x20SÛR','fr-FR','folder','\x0aSuppression\x20annulée.\x0a','═══════════════════════════════════════════════════════════════','\x0a✓\x20Backup\x20supprimé\x20avec\x20succès!\x0a','\x0aConfirmer\x20la\x20restauration\x20de\x20','version','pop','17164dECQbB','packageName','meta.json','8638861pmRpHW','\x20\x20[D]\x20Supprimer\x20un\x20backup','copyFileSync','523144JsKRDy','✓\x20Restauré:\x20','exit','description','existsSync','message','\x20\x20\x20\x20Taille:\x20','error','stdin','4535952NPUizX','toUpperCase','statSync','\x20\x20\x20\x20Fichiers:\x20','\x20\x20\x20\x20Dossier:\x20','app-config.json','argv','question','604ZSgIKJ','╔════════════════════════════════════════════════════════════════╗','\x20\x20\x20\x20Description:\x20','Aucun\x20backup\x20trouvé.','length','clear','rmSync','date','\x20\x20[Q]\x20Quitter','utf-8','═══════════════════════════════════════════════════════════════\x0a','readdirSync','resolve','PROJECT_PATH','╚════════════════════════════════════════════════════════════════╝\x0a','toLocaleString','\x0a⚠\x20ATTENTION:\x20Supprimer\x20TOUS\x20les\x20backups?\x20(OUI/non):\x20','ERREUR:\x20Dossier\x20du\x20projet\x20non\x20trouvé!','0\x20B','parse','toFixed','name','\x0aNuméro\x20du\x20backup\x20à\x20supprimer\x20(ou\x20Q\x20pour\x20annuler):\x20','path','\x20\x20[C]\x20Tout\x20supprimer\x20(ATTENTION!)','createInterface','\x0aOption\x20invalide!\x0a','split','\x0aNuméro\x20invalide!\x0a','1849OIWUrD','files','reverse','\x20\x20[L]\x20Rafraîchir\x20la\x20liste','\x0a✗\x20Erreur\x20lors\x20de\x20la\x20suppression:\x20','basename','Backups\x20disponibles\x20(du\x20plus\x20récent\x20au\x20plus\x20ancien):\x0a','log','timestamp','join','\x0aAucun\x20backup\x20à\x20restaurer.\x0a','49iYFNoI','\x20\x20\x20\x20App:\x20','\x0a✗\x20Erreur\x20lors\x20de\x20la\x20restauration:\x20','\x0aRestauration\x20annulée.\x0a','sort','?\x20(OUI/non):\x20','\x0aConfirmer\x20la\x20suppression\x20de\x20','Options:','\x0aNuméro\x20du\x20backup\x20à\x20restaurer\x20(ou\x20Q\x20pour\x20annuler):\x20','36gOgvad','app','║\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20GESTIONNAIRE\x20DE\x20BACKUPS\x20-\x20'];_0x2718=function(){return _0x265fd4;};return _0x2718();}const BACKUP_DIR=path['join'](projectDir,'.backup'),rl=readline[_0x2e84c0(0x13f)]({'input':process[_0x2e84c0(0x183)],'output':process[_0x2e84c0(0x169)]});function _0x28fe(_0x14e42b,_0x2cc6e7){const _0x2718ca=_0x2718();return _0x28fe=function(_0x28fe8e,_0x1bc6d9){_0x28fe8e=_0x28fe8e-0x12e;let _0x440503=_0x2718ca[_0x28fe8e];return _0x440503;},_0x28fe(_0x14e42b,_0x2cc6e7);}!fs[_0x2e84c0(0x17f)](BACKUP_DIR)&&fs[_0x2e84c0(0x15c)](BACKUP_DIR,{'recursive':!![]});function listBackups(){const _0x1c448e=_0x2e84c0;if(!fs['existsSync'](BACKUP_DIR))return console[_0x1c448e(0x14a)](_0x1c448e(0x18f)),[];const _0x1fd5b1=fs[_0x1c448e(0x131)](BACKUP_DIR)[_0x1c448e(0x161)](_0x3045ae=>fs['statSync'](path[_0x1c448e(0x14c)](BACKUP_DIR,_0x3045ae))[_0x1c448e(0x16b)]())[_0x1c448e(0x152)]()[_0x1c448e(0x145)]()['map'](_0x12aba9=>{const _0x48a299=_0x1c448e,_0x3a22ea=path[_0x48a299(0x14c)](BACKUP_DIR,_0x12aba9),_0x432543=path[_0x48a299(0x14c)](_0x3a22ea,'metadata.json');let _0x53d7a0={'timestamp':_0x12aba9,'files':[],'app':{}};if(fs[_0x48a299(0x17f)](_0x432543))try{_0x53d7a0=JSON[_0x48a299(0x139)](fs['readFileSync'](_0x432543,_0x48a299(0x12f)));}catch(_0x356340){}return{'folder':_0x12aba9,'timestamp':_0x53d7a0[_0x48a299(0x14b)],'date':new Date(_0x53d7a0['timestamp'])[_0x48a299(0x135)](_0x48a299(0x16d)),'app':_0x53d7a0[_0x48a299(0x158)]||{},'files':_0x53d7a0[_0x48a299(0x144)]||[],'size':getDirectorySize(_0x3a22ea)};});return _0x1fd5b1;}function getDirectorySize(_0x250a21){const _0x3d0897=_0x2e84c0;let _0x31dc96=0x0;const _0x1f3193=fs[_0x3d0897(0x131)](_0x250a21);for(const _0x2ed36b of _0x1f3193){const _0x502e1a=path[_0x3d0897(0x14c)](_0x250a21,_0x2ed36b),_0x5abaa2=fs[_0x3d0897(0x186)](_0x502e1a);_0x5abaa2['isDirectory']()?_0x31dc96+=getDirectorySize(_0x502e1a):_0x31dc96+=_0x5abaa2[_0x3d0897(0x165)];}return _0x31dc96;}function formatSize(_0x4118bd){const _0x37be15=_0x2e84c0;if(_0x4118bd===0x0)return _0x37be15(0x138);const _0x496eca=0x400,_0x455c47=['B','KB','MB','GB'],_0x5dfc30=Math[_0x37be15(0x15a)](Math[_0x37be15(0x14a)](_0x4118bd)/Math[_0x37be15(0x14a)](_0x496eca));return parseFloat((_0x4118bd/Math['pow'](_0x496eca,_0x5dfc30))[_0x37be15(0x13a)](0x2))+'\x20'+_0x455c47[_0x5dfc30];}function displayBackups(){const _0x3aa3f0=_0x2e84c0;console[_0x3aa3f0(0x191)](),console['log'](_0x3aa3f0(0x18d)),console[_0x3aa3f0(0x14a)](_0x3aa3f0(0x159)+projectDir[_0x3aa3f0(0x141)]('\x5c')[_0x3aa3f0(0x174)]()+'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20║'),console[_0x3aa3f0(0x14a)](_0x3aa3f0(0x134));const _0x1bdbf2=listBackups();if(_0x1bdbf2[_0x3aa3f0(0x190)]===0x0){console[_0x3aa3f0(0x14a)](_0x3aa3f0(0x160)),showMenu();return;}console['log'](_0x3aa3f0(0x149)),_0x1bdbf2['forEach']((_0x322477,_0x2c86c5)=>{const _0x5d71a0=_0x3aa3f0;console[_0x5d71a0(0x14a)]('['+_0x2c86c5+']\x20'+_0x322477['date']),console[_0x5d71a0(0x14a)](_0x5d71a0(0x188)+_0x322477[_0x5d71a0(0x16e)]),_0x322477[_0x5d71a0(0x158)]&&_0x322477['app'][_0x5d71a0(0x13b)]&&(console[_0x5d71a0(0x14a)](_0x5d71a0(0x14f)+_0x322477[_0x5d71a0(0x158)][_0x5d71a0(0x13b)]+'\x20v'+_0x322477[_0x5d71a0(0x158)][_0x5d71a0(0x173)]),console[_0x5d71a0(0x14a)](_0x5d71a0(0x18e)+_0x322477[_0x5d71a0(0x158)][_0x5d71a0(0x17e)]),console[_0x5d71a0(0x14a)]('\x20\x20\x20\x20Package:\x20'+_0x322477[_0x5d71a0(0x158)][_0x5d71a0(0x176)])),console[_0x5d71a0(0x14a)](_0x5d71a0(0x181)+formatSize(_0x322477[_0x5d71a0(0x165)])),_0x322477['files'][_0x5d71a0(0x190)]>0x0&&console[_0x5d71a0(0x14a)](_0x5d71a0(0x187)+_0x322477['files']['join'](',\x20')),console[_0x5d71a0(0x14a)]();}),showMenu(_0x1bdbf2);}function showMenu(_0x491dfa=[]){const _0x55a9a0=_0x2e84c0;console['log'](_0x55a9a0(0x170)),console[_0x55a9a0(0x14a)](_0x55a9a0(0x155)),console[_0x55a9a0(0x14a)]('\x20\x20[R]\x20Restaurer\x20un\x20backup'),console[_0x55a9a0(0x14a)](_0x55a9a0(0x179)),console['log'](_0x55a9a0(0x13e)),console[_0x55a9a0(0x14a)](_0x55a9a0(0x146)),console[_0x55a9a0(0x14a)](_0x55a9a0(0x12e)),console[_0x55a9a0(0x14a)](_0x55a9a0(0x130)),rl[_0x55a9a0(0x18b)]('Choisir\x20une\x20option\x20(R/D/C/L/Q):\x20',_0x56f7ee=>{const _0x2146cf=_0x55a9a0,_0x50f5c6=_0x56f7ee['toUpperCase']();switch(_0x50f5c6){case'R':restoreBackup(_0x491dfa);break;case'D':deleteBackup(_0x491dfa);break;case'C':deleteAllBackups();break;case'L':displayBackups();break;case'Q':console['log']('\x0aAu\x20revoir!'),rl[_0x2146cf(0x168)]();break;default:console['log'](_0x2146cf(0x140)),displayBackups();}});}function restoreBackup(_0x3818e8){const _0x244323=_0x2e84c0;if(_0x3818e8['length']===0x0){console[_0x244323(0x14a)](_0x244323(0x14d)),displayBackups();return;}rl[_0x244323(0x18b)](_0x244323(0x156),_0x7cbff8=>{const _0x5dec7a=_0x244323;if(_0x7cbff8[_0x5dec7a(0x185)]()==='Q'){displayBackups();return;}const _0x16bfb4=parseInt(_0x7cbff8);if(isNaN(_0x16bfb4)||_0x16bfb4<0x0||_0x16bfb4>=_0x3818e8[_0x5dec7a(0x190)]){console[_0x5dec7a(0x14a)](_0x5dec7a(0x142)),displayBackups();return;}const _0x19eaca=_0x3818e8[_0x16bfb4];rl[_0x5dec7a(0x18b)](_0x5dec7a(0x172)+_0x19eaca['date']+_0x5dec7a(0x153),_0x4d9c8e=>{const _0x4e8804=_0x5dec7a;if(_0x4d9c8e['toUpperCase']()!==_0x4e8804(0x16a)&&_0x4d9c8e[_0x4e8804(0x185)]()!=='O'){console[_0x4e8804(0x14a)](_0x4e8804(0x151)),displayBackups();return;}try{const _0x2d32ea=path[_0x4e8804(0x14c)](BACKUP_DIR,_0x19eaca[_0x4e8804(0x16e)]),_0xda1ba4=path['join'](_0x2d32ea,_0x4e8804(0x177)),_0x4a61f7=JSON[_0x4e8804(0x139)](fs[_0x4e8804(0x15f)](_0xda1ba4,_0x4e8804(0x12f)));for(const _0x453646 of _0x4a61f7[_0x4e8804(0x144)]){const _0x31df90=path['join'](_0x2d32ea,path[_0x4e8804(0x148)](_0x453646));if(fs[_0x4e8804(0x17f)](_0x31df90)){const _0x2ae452=path[_0x4e8804(0x14c)](projectDir,_0x453646),_0x207608=path['dirname'](_0x2ae452);!fs['existsSync'](_0x207608)&&fs['mkdirSync'](_0x207608,{'recursive':!![]}),fs[_0x4e8804(0x17a)](_0x31df90,_0x2ae452),console['log'](_0x4e8804(0x17c)+_0x453646);}}console[_0x4e8804(0x14a)](_0x4e8804(0x162)),displayBackups();}catch(_0x4ecd18){console[_0x4e8804(0x182)](_0x4e8804(0x150)+_0x4ecd18['message']+'\x0a'),displayBackups();}});});}function deleteBackup(_0x497a8c){const _0x540472=_0x2e84c0;if(_0x497a8c[_0x540472(0x190)]===0x0){console['log'](_0x540472(0x167)),displayBackups();return;}rl[_0x540472(0x18b)](_0x540472(0x13c),_0x255411=>{const _0x3f123=_0x540472;if(_0x255411[_0x3f123(0x185)]()==='Q'){displayBackups();return;}const _0x50778f=parseInt(_0x255411);if(isNaN(_0x50778f)||_0x50778f<0x0||_0x50778f>=_0x497a8c['length']){console[_0x3f123(0x14a)](_0x3f123(0x142)),displayBackups();return;}const _0x2b9807=_0x497a8c[_0x50778f];rl[_0x3f123(0x18b)](_0x3f123(0x154)+_0x2b9807[_0x3f123(0x193)]+_0x3f123(0x153),_0x1cbb5c=>{const _0x28e4e0=_0x3f123;if(_0x1cbb5c[_0x28e4e0(0x185)]()!==_0x28e4e0(0x16a)&&_0x1cbb5c['toUpperCase']()!=='O'){console[_0x28e4e0(0x14a)](_0x28e4e0(0x16f)),displayBackups();return;}try{const _0xa299e9=path[_0x28e4e0(0x14c)](BACKUP_DIR,_0x2b9807['folder']);fs['rmSync'](_0xa299e9,{'recursive':!![],'force':!![]}),console[_0x28e4e0(0x14a)](_0x28e4e0(0x171)),displayBackups();}catch(_0x5e6197){console[_0x28e4e0(0x182)](_0x28e4e0(0x147)+_0x5e6197[_0x28e4e0(0x180)]+'\x0a'),displayBackups();}});});}function deleteAllBackups(){const _0x47fc1c=_0x2e84c0;rl['question'](_0x47fc1c(0x136),_0xd612e5=>{const _0x360f45=_0x47fc1c;if(_0xd612e5['toUpperCase']()!==_0x360f45(0x16a)&&_0xd612e5[_0x360f45(0x185)]()!=='O'){console[_0x360f45(0x14a)]('\x0aSuppression\x20annulée.\x0a'),displayBackups();return;}rl[_0x360f45(0x18b)](_0x360f45(0x15d),_0x2ddfb5=>{const _0xfdaa22=_0x360f45;if(_0x2ddfb5!==_0xfdaa22(0x16c)){console[_0xfdaa22(0x14a)]('\x0aSuppression\x20annulée.\x0a'),displayBackups();return;}try{fs[_0xfdaa22(0x17f)](BACKUP_DIR)&&(fs[_0xfdaa22(0x192)](BACKUP_DIR,{'recursive':!![],'force':!![]}),fs[_0xfdaa22(0x15c)](BACKUP_DIR,{'recursive':!![]})),console[_0xfdaa22(0x14a)](_0xfdaa22(0x163)),displayBackups();}catch(_0x244b58){console[_0xfdaa22(0x182)](_0xfdaa22(0x147)+_0x244b58[_0xfdaa22(0x180)]+'\x0a'),displayBackups();}});});}displayBackups();
@@ -0,0 +1,98 @@
1
+ <div align="center" id="top">
2
+ <img src="./img.png" alt="Anubis" />
3
+
4
+ &#xa0;
5
+
6
+ </div>
7
+
8
+ <h1 align="center">[UNMAINTAINED] Anubis</h1>
9
+
10
+ <p align="center">
11
+ <img alt="Github top language" src="https://img.shields.io/github/languages/top/0sir1ss/Anubis">
12
+
13
+ <img alt="Github stars" src="https://img.shields.io/github/stars/0sir1ss/Anubis" />
14
+
15
+ <img alt="License" src="https://img.shields.io/github/license/0sir1ss/Anubis">
16
+
17
+ <!-- <img alt="Github issues" src="https://img.shields.io/github/issues/0sir1ss/Anubis" /> -->
18
+
19
+ <!-- <img alt="Repository size" src="https://img.shields.io/github/repo-size/0sir1ss/Anubis"> -->
20
+
21
+ <!-- <img alt="Github language count" src="https://img.shields.io/github/languages/count/0sir1ss/Anubis"> -->
22
+
23
+ <!-- <img alt="Github forks" src="https://img.shields.io/github/forks/0sir1ss/Anubis" /> -->
24
+
25
+ </p>
26
+
27
+
28
+ <p align="center">
29
+ <a href="#dart-about">About</a> &#xa0; | &#xa0;
30
+ <a href="#sparkles-features">Features</a> &#xa0; | &#xa0;
31
+ <a href="#rocket-technologies">Technologies</a> &#xa0; | &#xa0;
32
+ <a href="#white_check_mark-requirements">Requirements</a> &#xa0; | &#xa0;
33
+ <a href="#checkered_flag-starting">Starting</a> &#xa0; | &#xa0;
34
+ <a href="#memo-license">License</a> &#xa0; | &#xa0;
35
+ <a href="https://github.com/0sir1ss" target="_blank">Author</a>
36
+ </p>
37
+
38
+ <br>
39
+
40
+ ## :dart: About ##
41
+
42
+ I was looking around online and github when I realised that there were little Python obfuscators. First there's [pyarmor](https://pypi.org/project/pyarmor/) but that can be deobfuscated, however it still is quite good. Then there's many tools like [pyminifier](https://pypi.org/project/pyminifier/) but they all do the same thing and don't provide any real protection against your code. Another good solution I found was this obfuscator [here](https://pyob.oxyry.com/) but purchasing it costs **USD $1998**. Luckily I made my own version named [Carbon](https://github.com/0sir1ss/Carbon) which you can use for free.
43
+
44
+ Anyways, I decided to create my own obfuscator, which provides a plethora of features such as junk code and custom encryption, and includes the obfuscation found in Carbon.
45
+
46
+ You can see the difference it makes from this source [here](https://github.com/0sir1ss/Anubis/blob/main/example/script.py) to this obfuscated one liner [here](https://github.com/0sir1ss/Anubis/blob/main/example/script-obf.py) and you can see what Carbon does [here](https://github.com/0sir1ss/Carbon/blob/main/examples/script-obf.py)
47
+
48
+ ## :sparkles: Features ##
49
+
50
+ :heavy_check_mark: Anti Debugger - Stop the use of debuggers whilst this program is running\
51
+ :heavy_check_mark: Junk Code - Add junk code to the program\
52
+ :heavy_check_mark: Carbon Obfuscation - Rename classes, functions, variables and parameters along with removing comments and docstrings\
53
+ :heavy_check_mark: Custom Encryption - A one liner which uses custom encryption\
54
+ :heavy_check_mark: Compile to exe with Nuitka
55
+
56
+ ## :rocket: Technologies ##
57
+
58
+ The following tools were used in this project:
59
+
60
+ - [Python](https://www.python.org/)
61
+ - [Nuitka](https://pypi.org/project/Nuitka/)
62
+
63
+ ## :white_check_mark: Requirements ##
64
+
65
+ Before starting, you need to have [Python](https://www.python.org/) installed.
66
+
67
+ If you wish to compile your project to an exe you will need [Nuitka](https://pypi.org/project/Nuitka/) along with a C compiler. Nuitka will automatically download the MinGW64 compiler if no usable one is found.
68
+
69
+ ## :checkered_flag: Starting ##
70
+
71
+ ```bash
72
+ # Clone this project
73
+ $ git clone https://github.com/0sir1ss/Anubis
74
+
75
+ # Access
76
+ $ cd Anubis
77
+
78
+ # Install dependencies
79
+ $ pip install -r requirements.txt
80
+
81
+ # Run the project
82
+ $ python anubis.py
83
+ ```
84
+
85
+ If you do not compile to an exe and instead choose to distribute with the custom encryption you will need the [ancrypt file](https://github.com/0sir1ss/Anubis/blob/main/ancrypt.py)\
86
+ You can build this with the following command:
87
+ > python setup.py build_ext --inplace
88
+
89
+ ## :memo: License ##
90
+
91
+ This project is under license from MIT. For more details, see the [LICENSE](LICENSE) file.
92
+
93
+
94
+ Made with :heart: by <a href="https://github.com/0sir1ss" target="_blank">0sir1s</a>
95
+
96
+ &#xa0;
97
+
98
+ <a href="#top">Back to top</a>