dragonbones-runtime
Version:
the tools to build dragonbones file for diffrent framework
153 lines (152 loc) • 7.69 kB
JavaScript
/// <reference path="../lib/types.d.ts" />
var FileUtil = require("../lib/FileUtil");
var ChangeEntranceCommand = (function () {
function ChangeEntranceCommand() {
}
ChangeEntranceCommand.prototype.execute = function () {
//扫描json数据
if (this.versionFile) {
this.changePublish(this.url, this.platform, this.versionFile);
}
else {
this.changeBuild(this.url, this.platform);
}
return 0;
};
ChangeEntranceCommand.prototype.initCommand = function (url, platform, versionFile) {
this.url = url;
this.platform = platform;
this.versionFile = versionFile;
};
ChangeEntranceCommand.prototype.init = function (url, platform) {
switch (platform) {
case "android":
//判断入口文件是否存在
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":
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;
}
};
ChangeEntranceCommand.prototype.changePublish = function (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);
}
};
ChangeEntranceCommand.prototype.changeBuild = function (url, platform) {
this.init(url, platform);
if (this.platformContent) {
this.changeLoaderUrl(2, platform);
FileUtil.save(this.platformPath, this.platformContent);
}
};
ChangeEntranceCommand.prototype.changeLoaderUrl = function (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;
}
};
return ChangeEntranceCommand;
}());
module.exports = ChangeEntranceCommand;