UNPKG

dragonbones-runtime

Version:

the tools to build dragonbones file for diffrent framework

171 lines (153 loc) 7.67 kB
/// <reference path="../lib/types.d.ts" /> import FileUtil = require('../lib/FileUtil'); class ChangeEntranceCommand implements egret.Command { platformPath; platformContent; execute():number { //扫描json数据 if (this.versionFile) { this.changePublish(this.url, this.platform, this.versionFile); } else { this.changeBuild(this.url, this.platform); } return 0; } url; platform; versionFile; initCommand(url, platform, versionFile?:string){ this.url = url; this.platform = platform; this.versionFile = versionFile; } private init(url, platform) { switch (platform) { case "android"://修改java文件 //判断入口文件是否存在 var entranceFile = FileUtil.joinPath(url, "AndroidManifest.xml"); if(!FileUtil.exists(entranceFile)){ break; } var DOMParser = require('../lib/core/xmldom/dom-parser').DOMParser; var xmlContent = FileUtil.read(entranceFile); var doc = new DOMParser().parseFromString(xmlContent); var filePath = doc.documentElement.getElementsByTagName('manifest')._node.getAttribute('package').replace(/\./g, "/"); var javaName; var activities = doc.documentElement.getElementsByTagName("activity"); for (var i = 0; i < activities.length; i++) { var activity = activities[i]; if (activity.hasAttribute("android:name") && activity.getAttribute("android:label") == "@string/app_name") { javaName = activity.getAttribute('android:name').replace(/\./g, "/"); break; } } if (FileUtil.exists(FileUtil.joinPath(url, "src", javaName + ".java"))) { this.platformPath = FileUtil.joinPath(url, "src", javaName + ".java"); this.platformContent = FileUtil.read(this.platformPath); } else if (FileUtil.exists(FileUtil.joinPath(url, "src", filePath, javaName + ".java"))) { this.platformPath = FileUtil.joinPath(url, "src", filePath, javaName + ".java"); this.platformContent = FileUtil.read(this.platformPath); } else { this.platformContent = null; } break; case "android_as": //判断入口文件是否存在 var entranceFile = FileUtil.joinPath(url,"app","src","main", "AndroidManifest.xml"); if (!FileUtil.exists(entranceFile)) { console.log(entranceFile+" is not exists"); break; } var DOMParser = require('../lib/core/xmldom/dom-parser').DOMParser; var xmlContent = FileUtil.read(entranceFile); var doc = new DOMParser().parseFromString(xmlContent); var filePath = doc.documentElement.getElementsByTagName('manifest')._node.getAttribute('package').replace(/\./g, "/"); var javaName; var activities = doc.documentElement.getElementsByTagName("activity"); for (var i = 0; i < activities.length; i++) { var activity = activities[i]; if (activity.hasAttribute("android:name") && activity.getAttribute("android:label") == "@string/app_name") { javaName = activity.getAttribute('android:name').replace(/\./g, "/"); break; } } var javaSrcPath = FileUtil.joinPath(url,"app", "src","main","java"); //console.log(" javaSrcPath = "+javaSrcPath); if (FileUtil.exists(FileUtil.joinPath(javaSrcPath, javaName + ".java"))) { this.platformPath = FileUtil.joinPath(javaSrcPath, javaName + ".java"); //console.log(" platformPath 1= "+this.platformPath); this.platformContent = FileUtil.read(this.platformPath); } else if (FileUtil.exists(FileUtil.joinPath(javaSrcPath, filePath, javaName + ".java"))) { this.platformPath = FileUtil.joinPath(javaSrcPath, filePath, javaName + ".java"); //console.log(" platformPath 2= "+this.platformPath); this.platformContent = FileUtil.read(this.platformPath); } else { this.platformContent = null; } break; case "ios"://修改ios入口文件 var projectName = ''; var fileList = FileUtil.getDirectoryListing(url, true); for (var key in fileList) { var item = fileList[key]; var index = item.indexOf('.xcodeproj'); if (index >= 0) { projectName = item.substr(0, index); break; } } this.platformPath = FileUtil.joinPath(url, projectName, 'AppDelegate.mm'); if (FileUtil.exists(this.platformPath)) { this.platformContent = FileUtil.read(this.platformPath, true); } else { this.platformPath = FileUtil.joinPath(url,projectName, 'ViewController.mm'); if(FileUtil.exists(this.platformPath)){ this.platformContent = FileUtil.read(this.platformPath, true); }else this.platformContent = null; } break; } } private changePublish(url, platform, versionFile) { this.init(url, platform); if (this.platformContent) { this.changeLoaderUrl(0, platform); switch (platform) { case "android": case "android_as": this.platformContent = this.platformContent.replace(/private static final String EGRET_PUBLISH_ZIP =.*/, 'private static final String EGRET_PUBLISH_ZIP = "game_code_' + versionFile + '.zip";'); break; case "ios": this.platformContent = this.platformContent.replace(/#define EGRET_PUBLISH_ZIP @.*/, '#define EGRET_PUBLISH_ZIP @"game_code_' + versionFile + '.zip"'); break; } FileUtil.save(this.platformPath, this.platformContent); } } private changeBuild(url, platform) { this.init(url, platform); if (this.platformContent) { this.changeLoaderUrl(2, platform); FileUtil.save(this.platformPath, this.platformContent); } } private changeLoaderUrl(code, platform) { switch (platform) { case "android": case "android_as": this.platformContent = this.platformContent.replace(/setLoaderUrl\((\s)*\d(\s)*\);/, 'setLoaderUrl(' + code + ');'); break; case "ios": this.platformContent = this.platformContent.replace(/setLoaderUrl:(\s)*\d(\s)*/, 'setLoaderUrl:' + code); break; } } } export = ChangeEntranceCommand;