【发布时间】:2017-08-25 13:53:01
【问题描述】:
您好,我正在尝试使用以下命令通过 gulp 编译我的 android 应用程序: gulp --prod -p android(prod 是配置文件之一)。
但是有一个问题,虽然没有错误。同事编译的时候,生成的apk重20mo,我的时候只有1.7mo。我们的app是在svn上的,所以之前我们有相同的代码,然后我们只运行一个npm install和bower install .
我真的不知道要添加什么来帮助您识别问题,但这里是 gulpfile.js
'use strict';
var mainModuleName = 'ModuleName'; <--- Generic
var bootstrapModule = mainModuleName;
var gulp = require('gulp');
var plugins = require('gulp-load-plugins')();
var del = require('del');
var fs = require('fs');
var beep = require('beepbeep');
var express = require('express');
var path = require('path');
var open = require('open');
var stylish = require('jshint-stylish');
var connectLr = require('connect-livereload');
var streamqueue = require('streamqueue');
var runSequence = require('run-sequence');
var merge = require('merge-stream');
var ripple = require('ripple-emulator');
var karmaServer = require('karma').Server;
var replaceTask = require('gulp-replace-task');
var buildAndroid = require('gulp-cordova-build-android');
//var buildiOS = require('gulp-cordova-build-ios'); // Useless plugin for now (v1.0)
var wiredep = require('wiredep');
var runningPlatform = process.platform;
var isWindows = /^win/.test(runningPlatform);
var isMac = /darwin/.test(runningPlatform);
/**
* Parse arguments
*/
var args = require('yargs')
.alias('e', 'emulate')
.alias('b', 'build')
.alias('r', 'run')
.alias('p', 'package')
// remove all debug messages (console.logs, alerts etc) from release build
.alias('release', 'strip-debug')
.alias('m', 'mock')
.default('build', false)
.default('port', 9000)
.default('strip-debug', false)
.default('mock', false)
.argv;
var build = !!(args.build || args.emulate || args.run || args['package']);
var emulate = args.emulate;
var run = args.run;
var packageArgs = args['package'];
var port = args.port;
var mock = args.mock;
var stripDebug = !!args.stripDebug;
var targetDir = path.resolve(build ? 'www' : '.tmp');
// Retrieve environment args
var dev = args.dev;
var qualif = args.qualif;
var recette = args.recette;
var prod = args.prod;
if (!dev && !qualif && !recette && !prod){
dev = true;
}
if (mock){
plugins.util.log("Mock mode enabled, fake data will be used");
bootstrapModule += ".mock";
}
// if we just use emulate or run or package without specifying platform, we assume iOS
// in this case the value returned from yargs would just be true
if (emulate === true) {
emulate = isMac ? 'ios' : 'android';
}
else if (emulate === 'windows') {
emulate += " --emulator -- --phone";
}
if (run === true) {
run = isMac ? 'ios' : 'android';;
}
else if (run === 'windows') {
run += " --device -- --phone";
}
if (packageArgs === true) {
packageArgs = isMac ? 'ios' : 'android';;
}
// global error handler
var errorHandler = function(error) {
if (build) {
throw error;
} else {
beep(2, 170);
plugins.util.log(error);
}
};
var arePlatformsAdded = function(){
return fs.existsSync('platforms');
}
var getEnvironment = function(){
var environmentName = "development";
if (dev && emulate){
environmentName = "development_with_proxy";
}
else if (dev){
environmentName = "development";
}
else if (qualif){
environmentName = "qualification";
}
else if (recette){
environmentName = "recette";
}
else if (prod){
environmentName = "production";
}
return environmentName;
}
// no-op = empty function
gulp.task('noop', function() {});
gulp.task('noop2', function() {});
// clean target dir
gulp.task('clean', function(done) {
try{
del([targetDir], done);
}
catch(e){
console.warn('err: ', err);
}
});
/*
* Test task, run test once and exit
*/
gulp.task('test', /*['build'],*/ function(done) {
var vendorFiles = wiredep().js;
// list of files / patterns to load in the browser
var files = [
'./app/**/*.js'
];
new karmaServer({
configFile: __dirname + '/karma.conf.js',
singleRun: true,
files: vendorFiles.concat(files)
}, done).start();
});
// precompile .scss and concat with ionic.css
gulp.task('styles', function() {
var options = build ? { style: 'compressed' } : { style: 'expanded' };
var sassStream = gulp.src('app/styles/main.scss')
.pipe(plugins.sass(options))
.on('error', function(err) {
console.log('err: ', err);
beep();
});
// var widgetSassStream = gulp.src('app/scripts/widgets/widgets.scss')
// .pipe(plugins.sass(options))
// .on('error', function(err) {
// console.log('err: ', err);
// beep();
// });
// build ionic css dynamically to support custom themes
var ionicStream = gulp.src('bower_components/ionic/scss/ionic.scss')
.pipe(plugins.cached('ionic-styles'))
.pipe(plugins.sass(options))
// cache and remember ionic .scss in order to cut down re-compile time
.pipe(plugins.remember('ionic-styles'))
.on('error', function(err) {
console.log('err: ', err);
beep();
});
// ionicStream is not used for now - ionic scss is imported on main.scss to support overrididing
return streamqueue({ objectMode: true }, sassStream/*, widgetSassStream, ionicStream*/)
.pipe(plugins.autoprefixer('last 1 Chrome version', 'last 3 iOS versions', 'last 3 Android versions'))
.pipe(plugins.concat('main.css'))
.pipe(plugins.if(build, plugins.stripCssComments()))
.pipe(plugins.if(build && !emulate, plugins.rev()))
.pipe(gulp.dest(path.join(targetDir, 'styles')))
.on('error', errorHandler);
});
// build templatecache, copy scripts.
// if build: concat, minsafe, uglify and versionize
gulp.task('scripts', function() {
var dest = path.join(targetDir, 'scripts');
/*var buildInDebug = false;
if (build === true && (getEnvironment() === "development" || getEnvironment() === "qualification")) {
buildInDebug = true;
}*/
build = false;
var minifyConfig = {
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeAttributeQuotes: true,
removeComments: true
};
// prepare angular template cache from html templates
// (remember to change mainModuleName var to desired module name)
var templateStream = gulp
.src('**/*.html', { cwd: 'app'})
.pipe(plugins.angularTemplatecache('templates.js', {
root: 'templates/',
module: mainModuleName,
htmlmin: build /*&& !buildInDebug*/ && minifyConfig
}));
// Manager environment configuration
var envConfigFile = gulp.src('EnvironmentConfig.json')
.pipe(plugins.ngConfig(mainModuleName, {
createModule: false,
environment: getEnvironment()
}))
//.pipe(gulp.dest(path.join(dest, 'config')))
.on('error', errorHandler);
var scriptStream = gulp
.src([
'templates.js',
'app.js',
'**/*Module.js',
'**/*.js',
'!**/*_test.js'
], { cwd: 'app/scripts' })
.pipe(plugins.if(!build, plugins.changed(dest))
);
return streamqueue({ objectMode: true }, scriptStream, envConfigFile, templateStream)
.pipe(plugins.if(build/* && !buildInDebug*/, plugins.ngAnnotate()))
.pipe(plugins.if(stripDebug, plugins.stripDebug()))
.pipe(plugins.if(build/* && !buildInDebug*/, plugins.concat('app.js')))
.pipe(plugins.if(build/* && !buildInDebug*/, plugins.uglify()))
.pipe(plugins.if(build/* && !buildInDebug*/ && !emulate, plugins.rev()))
.pipe(gulp.dest(dest))
.on('error', errorHandler);
});
// copy fonts
gulp.task('fonts', function() {
var vendorFontFiles = []
var fontExts = ['eot', 'svg', 'ttf', 'woff', 'woff2'];
var deps = wiredep().packages;
for (var i in deps) {
for(var k in deps[i].main) {
var f = deps[i].main[k];
if(~fontExts.indexOf(f.split('.').pop())) {
vendorFontFiles.push(f);
}
}
}
return gulp
.src(vendorFontFiles.concat(['app/fonts/*.*']))
.pipe(gulp.dest(path.join(targetDir, 'fonts')))
.on('error', errorHandler);
});
// copy templates
gulp.task('templates', function() {
return gulp.src(['app/templates/**/*.*', 'app/scripts/widgets/**/*.html'])
.pipe(gulp.dest(path.join(targetDir, 'templates')))
.on('error', errorHandler);
});
// generate iconfont
gulp.task('iconfont', function(){
return gulp.src('app/icons/*.svg', {
buffer: false
})
.pipe(plugins.iconfontCss({
fontName: 'ownIconFont',
path: 'app/icons/own-icons-template.css',
targetPath: '../styles/own-icons.css',
fontPath: '../fonts/'
}))
.pipe(plugins.iconfont({
fontName: 'ownIconFont'
}))
.pipe(gulp.dest(path.join(targetDir, 'fonts')))
.on('error', errorHandler);
});
// copy images
gulp.task('images', function() {
return gulp.src(['app/images/**/*.*', 'app/scripts/widgets/**/*.png'])
.pipe(gulp.dest(path.join(targetDir, 'images')))
.on('error', errorHandler);
});
// copy videos
gulp.task('videos', function() {
return gulp.src(['app/videos/**/*.*', 'app/scripts/widgets/**/*.mp4'])
.pipe(gulp.dest(path.join(targetDir, 'videos')))
.on('error', errorHandler);
});
// copy mock data
gulp.task('mockData', function() {
return gulp.src(['app/scripts/mock/data/**/*.*'])
.pipe(gulp.dest(path.join(targetDir, 'mock/data')))
.on('error', errorHandler);
});
// lint js sources based on .jshintrc ruleset
gulp.task('jsHint', function(done) {
return gulp
.src('app/scripts/**/*.js')
.pipe(plugins.jshint())
.pipe(plugins.jshint.reporter(stylish))
.pipe(plugins.jshint.reporter('fail'))
.on('error', errorHandler);
done();
});
// check js sources code style with jscs based on .jshintrc ruleset
gulp.task('jscs', function(done) {
return gulp
.src('app/scripts/**/*.js')
.pipe(plugins.jscs())
.pipe(plugins.jscs.reporter())
.pipe(plugins.jscs.reporter('fail'))
.on('error', errorHandler);
done();
});
// concatenate and minify vendor sources
gulp.task('vendor', function() {
var vendorFiles = wiredep().js;
return gulp.src(vendorFiles)
.pipe(plugins.concat('vendor.js'))
.pipe(gulp.dest(targetDir))
.on('error', errorHandler);
});
// inject the files in index.html
gulp.task('index', ['jsHint', 'jscs', 'scripts'], function() {
// build has a '-versionnumber' suffix
var cssNaming = 'styles/main*';
// injects 'src' into index.html at position 'tag'
var _inject = function(src, tag) {
return plugins.inject(src, {
starttag: '<!-- inject:' + tag + ':{{ext}} -->',
read: false,
addRootSlash: false
});
};
// get all our javascript sources
// in development mode, it's better to add each file seperately.
// it makes debugging easier.
var _getAllScriptSources = function() {
// Inject modules first
var scriptStream = gulp.src([
'scripts/app.js',
'scripts/**/*Module.js',
'scripts/**/*.js',
'!scripts/**/*_test.js'
], { cwd: targetDir });
return streamqueue({ objectMode: true }, scriptStream);
};
return gulp.src('app/index.html')
// inject module name
.pipe(replaceTask({patterns: [{match: 'moduleName', replacement: bootstrapModule}]}))
// inject css
.pipe(_inject(gulp.src(cssNaming, { cwd: targetDir }), 'app-styles'))
// inject vendor.js
.pipe(_inject(gulp.src('vendor*.js', { cwd: targetDir }), 'vendor'))
// inject app.js (build) or all js files indivually (dev)
.pipe(plugins.if(build,
_inject(gulp.src('scripts/app*.js', { cwd: targetDir }), 'app'),
_inject(_getAllScriptSources(), 'app')
))
.pipe(gulp.dest(targetDir))
.on('error', errorHandler);
});
// start local express server
gulp.task('serve', function() {
express()
.use(!build ? connectLr() : function(){})
.use(express.static(targetDir))
.listen(port);
open('http://localhost:' + port + '/');
});
// ionic emulate wrapper
gulp.task('addPlatforms', function(done) {
runSequence(
'ionic:addAndroid',
isMac ? 'ionic:addiOS' : 'noop',
isWindows ? 'ionic:addWP' : 'noop2',
done
);
});
// ionic add platform android wrapper
gulp.task('ionic:addAndroid', plugins.shell.task([
'ionic platform add android@4.1.1'
]));
// ionic add platform ios wrapper
gulp.task('ionic:addiOS', plugins.shell.task([
'ionic platform add ios'
]));
// ionic add platform Windows Phone 8.1 wrapper
gulp.task('ionic:addWP', plugins.shell.task([
'ionic platform add windows'
]));
// ionic emulate wrapper
gulp.task('ionic:emulate', plugins.shell.task([
'ionic emulate ' + emulate + ' --livereload --consolelogs'
]));
// ionic run wrapper
gulp.task('ionic:run', plugins.shell.task([
'ionic run ' + run
]));
// ionic resources wrapper
gulp.task('icon', plugins.shell.task([
'ionic resources --icon'
]));
gulp.task('splash', plugins.shell.task([
'ionic resources --splash'
]));
gulp.task('resources', plugins.shell.task([
'ionic resources'
]));
// select emulator device
gulp.task('select', plugins.shell.task([
'./helpers/emulateios'
]));
// ripple emulator
gulp.task('ripple', ['scripts', 'styles', 'watchers'], function() {
var options = {
keepAlive: false,
open: true,
port: 4400
};
// Start the ripple server
ripple.emulate.start(options);
open('http://localhost:' + options.port + '?enableripple=true');
});
// start watchers
gulp.task('watchers', function() {
plugins.livereload.listen();
gulp.watch('app/styles/**/*.scss', ['styles']);
gulp.watch('app/scripts/widgets/**/*.scss', ['styles']);
gulp.watch('app/fonts/**', ['fonts']);
gulp.watch('app/icons/**', ['iconfont']);
gulp.watch('app/images/**', ['images']);
gulp.watch('app/videos/**', ['videos']);
gulp.watch('app/scripts/mock/data/**', ['mockData']);
gulp.watch('app/scripts/widgets/**/*.png', ['images']);
gulp.watch('app/scripts/widgets/**/*.mp4', ['videos']);
gulp.watch('app/scripts/**/*.js', ['index']);
gulp.watch('./vendor.json', ['vendor']);
gulp.watch('app/templates/**/*.html', ['index', 'templates']);
gulp.watch('app/scripts/widgets/**/*.html', ['index', 'templates']);
gulp.watch('app/index.html', ['index']);
gulp.watch(targetDir + '/**')
.on('change', plugins.livereload.changed)
.on('error', errorHandler);
});
gulp.task('package:ios', plugins.shell.task([
'cordova build ios --device',
'cd platforms/ios/build/device',
'/usr/bin/xcrun -sdk iphoneos PackageApplication "$(pwd)/$PROJECT_NAME.app" -o "$(pwd)/$PROJECT_NAME.ipa"'
]));
// Package binary file to distribute
gulp.task('package', function() {
switch (packageArgs){
case 'ios':
return runSequence('package:ios');
break;
case 'android':
return gulp.src('platforms/android')
.pipe(buildAndroid({
storeFile: '../../debug.keystore',
storePassword: 'android',
keyAlias: 'androiddebugkey',
keyPassword: 'android'
}))
;
break;
default:
console.error("Unable to package - no platform specified or unknown platform");
break;
}
});
gulp.task('build', function(done) {
build = true;
targetDir = path.resolve('www');
runSequence('default', done);
});
// our main sequence, with some conditional jobs depending on params
gulp.task('default', function(done) {
runSequence(
'clean',
'iconfont',
[
arePlatformsAdded() ? 'resources' : 'noop',
'fonts',
'templates',
'styles',
'images',
'videos',
mock ? 'mockData' : 'noop2',
'vendor'
],
'index',
build ? 'noop' : 'watchers',
build ? 'noop' : 'serve',
emulate ? ['ionic:emulate', 'watchers'] : 'noop',
run ? 'ionic:run' : 'noop',
packageArgs ? 'package' : 'noop',
done);
});
还有 package.json :
{
"name": "myApp",
"version": "1.0.0",
"author": "Me",
"description": "",
"dependencies": {
"angular-animate": "1.5.3",
"angular-touch": "^1.5.7"
},
"devDependencies": {
"beepbeep": "^1.2.0",
"bower": "1.7.9",
"connect-livereload": "^0.5.2",
"cordova": "5.3.3",
"del": "^1.1.1",
"express": "^4.11.1",
"glob": "^4.3.5",
"gulp": "3.9.1",
"gulp-angular-templatecache": "^1.5.0",
"gulp-autoprefixer": "^2.1.0",
"gulp-cached": "^1.1.0",
"gulp-changed": "^1.1.1",
"gulp-concat": "^2.4.3",
"gulp-cordova-build-android": "^1.5.1",
"gulp-cordova-build-ios": "^1.0.0",
"gulp-iconfont": "^1.0.0",
"gulp-iconfont-css": "0.0.9",
"gulp-if": "^1.2.5",
"gulp-inject": "^1.1.1",
"gulp-jscs": "^3.0.1",
"gulp-jshint": "^1.9.0",
"gulp-livereload": "^3.7.0",
"gulp-load-plugins": "^0.8.0",
"gulp-ng-annotate": "^0.5.0",
"gulp-ng-config": "1.2.1",
"gulp-remember": "^0.3.0",
"gulp-replace-task": "0.11.0",
"gulp-rev": "^3.0.0",
"gulp-sass": "^2.0.1",
"gulp-shell": "^0.2.11",
"gulp-strip-css-comments": "^1.1.0",
"gulp-strip-debug": "^1.0.2",
"gulp-uglify": "^1.1.0",
"gulp-util": "^2.2.14",
"ionic": "1.7.15",
"jasmine-core": "2.4.1",
"jshint-stylish": "^1.0.0",
"karma": "0.13.22",
"karma-coverage": "1.0.0",
"karma-jasmine": "1.0.2",
"karma-junit-reporter": "1.0.0",
"karma-phantomjs-launcher": "1.0.0",
"lodash": "^3.9.3",
"lodash._basecopy": "latest",
"merge-stream": "^0.1.7",
"node-sass": "^3.0.0",
"open": "0.0.5",
"phantomjs": "2.1.7",
"ripple-emulator": "^0.9.28",
"run-sequence": "^1.0.2",
"shelljs": "^0.3.0",
"streamqueue": "^0.1.1",
"wiredep": "^3.0.0",
"yargs": "^1.3.3"
},
"optionalDependencies": {
"ios-sim": "^5.0.2",
"ios-deploy": "^1.8.3"
},
"scripts": {
"gulp": "./node_modules/.bin/gulp",
"bower": "./node_modules/.bin/bower",
"cordova": "./node_modules/.bin/cordova",
"ionic": "./node_modules/.bin/ionic",
"phantomjs": "./node_modules/.bin/phantomjs",
"postinstall": "bower install && gulp -b"
},
"cordovaPlugins": [
"cordova-plugin-whitelist",
"cordova-plugin-crosswalk-webview@1.5.0",
"cordova-plugin-splashscreen@2.0.0",
"cordova-plugin-device@1.1.0",
"cordova-plugin-app-version@0.1.8",
"cordova-plugin-file@3.0.0",
"ionic-plugin-keyboard@2.0.1",
"cordova-plugin-screen-orientation",
"cordova-plugin-screen-orientation@~1.4.2",
"cordova-plugin-geolocation@~2.2.0",
"cordova-plugin-camera@~2.2.0"
],
"cordovaPlatforms": [
"ios",
{
"platform": "android",
"version": "4.1.1",
"locator": "android@4.1.1"
}
]
}
最后是编译日志:
[15:49:52] Using gulpfile D:\Profiles\bgouygou\Workspaces\Eclipse_IDE_for_Java_EE_Developers_442\B0001\gulpfile.js
[15:49:52] Starting 'default'...
[15:49:52] Starting 'clean'...
[15:49:52] Finished 'clean' after 132 ms
[15:49:52] Starting 'iconfont'...
[15:49:53] Finished 'iconfont' after 800 ms
[15:49:53] Starting 'resources'...
[15:49:53] Starting 'fonts'...
[15:49:54] Starting 'templates'...
[15:49:54] Starting 'styles'...
[15:49:55] Starting 'images'...
[15:49:55] Starting 'videos'...
[15:49:55] Starting 'noop2'...
[15:49:55] Finished 'noop2' after 15 μs
[15:49:55] Starting 'vendor'...
Ionic icon and splash screen resources generator
uploading icon.png...
uploading splash.png...
[15:49:55] Finished 'videos' after 102 ms
[15:49:55] Finished 'templates' after 1.9 s
[15:49:56] Finished 'fonts' after 2.06 s
[15:49:56] Finished 'vendor' after 449 ms
[15:49:56] Finished 'images' after 633 ms
[15:49:57] Finished 'styles' after 3.63 s
[15:50:16] Finished 'resources' after 23 s
[15:50:16] Starting 'jsHint'...
[15:50:17] Starting 'jscs'...
[15:50:19] Starting 'scripts'...
[15:50:21] Finished 'jsHint' after 5.03 s
[15:50:21] Finished 'jscs' after 4.61 s
[15:50:21] Finished 'scripts' after 2.03 s
[15:50:21] Starting 'index'...
[15:50:21] gulp-inject 1 files into index.html.
[15:50:21] gulp-inject 1 files into index.html.
[15:50:21] gulp-inject 30 files into index.html.
[15:50:21] Finished 'index' after 169 ms
[15:50:21] Starting 'noop'...
[15:50:21] Finished 'noop' after 4.92 μs
[15:50:21] Starting 'noop'...
[15:50:21] Finished 'noop' after 2.87 μs
[15:50:21] Starting 'noop'...
[15:50:21] Finished 'noop' after 2.46 μs
[15:50:21] Starting 'noop'...
[15:50:21] Finished 'noop' after 2.05 μs
[15:50:21] Starting 'package'...
add to body class: platform-android
ANDROID_HOME=D:\Android\android-sdk
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131
Subproject Path: CordovaLib
Starting a new Gradle Daemon for this build (subsequent builds will be faster).
Incremental java compilation is an incubating feature.
:preBuild UP-TO-DATE
:preReleaseBuild UP-TO-DATE
:checkReleaseManifest
:CordovaLib:preBuild UP-TO-DATE
:CordovaLib:preReleaseBuild UP-TO-DATE
:CordovaLib:checkReleaseManifest
:CordovaLib:prepareReleaseDependencies
:CordovaLib:compileReleaseAidl UP-TO-DATE
:CordovaLib:compileReleaseNdk UP-TO-DATE
:CordovaLib:compileLint UP-TO-DATE
:CordovaLib:copyReleaseLint UP-TO-DATE
:CordovaLib:mergeReleaseShaders UP-TO-DATE
:CordovaLib:compileReleaseShaders UP-TO-DATE
:CordovaLib:generateReleaseAssets UP-TO-DATE
:CordovaLib:mergeReleaseAssets UP-TO-DATE
:CordovaLib:mergeReleaseProguardFiles UP-TO-DATE
:CordovaLib:packageReleaseRenderscript UP-TO-DATE
:CordovaLib:compileReleaseRenderscript UP-TO-DATE
:CordovaLib:generateReleaseResValues UP-TO-DATE
:CordovaLib:generateReleaseResources UP-TO-DATE
:CordovaLib:packageReleaseResources UP-TO-DATE
:CordovaLib:processReleaseManifest UP-TO-DATE
:CordovaLib:generateReleaseBuildConfig UP-TO-DATE
:CordovaLib:processReleaseResources UP-TO-DATE
:CordovaLib:generateReleaseSources UP-TO-DATE
:CordovaLib:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE
:CordovaLib:compileReleaseJavaWithJavac UP-TO-DATE
:CordovaLib:processReleaseJavaRes UP-TO-DATE
:CordovaLib:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
:CordovaLib:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE
:CordovaLib:mergeReleaseJniLibFolders UP-TO-DATE
:CordovaLib:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE
:CordovaLib:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE
:CordovaLib:bundleRelease UP-TO-DATE
:prepareAndroidCordovaLibUnspecifiedReleaseLibrary UP-TO-DATE
:prepareReleaseDependencies
:compileReleaseAidl UP-TO-DATE
:compileReleaseRenderscript UP-TO-DATE
:generateReleaseBuildConfig UP-TO-DATE
:generateReleaseResValues UP-TO-DATE
:generateReleaseResources UP-TO-DATE
:mergeReleaseResources UP-TO-DATE
:processReleaseManifest UP-TO-DATE
:processReleaseResources UP-TO-DATE
:generateReleaseSources UP-TO-DATE
:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE
:compileReleaseJavaWithJavac UP-TO-DATE
:compileReleaseNdk UP-TO-DATE
:compileReleaseSources UP-TO-DATE
:lintVitalRelease
:mergeReleaseShaders UP-TO-DATE
:compileReleaseShaders UP-TO-DATE
:generateReleaseAssets UP-TO-DATE
:mergeReleaseAssets
:transformClassesWithDexForRelease UP-TO-DATE
:mergeReleaseJniLibFolders UP-TO-DATE
:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE
:processReleaseJavaRes UP-TO-DATE
:transformResourcesWithMergeJavaResForRelease UP-TO-DATE
:validateSigningRelease
:packageRelease
:assembleRelease
:cdvBuildRelease
BUILD SUCCESSFUL
Total time: 17.387 secs
[15:50:43] Finished 'package' after 21 s
[15:50:43] Finished 'default' after 51 s
就是这样,如果您需要更多信息来确定问题,请告诉我。
【问题讨论】:
标签: javascript android angularjs gulp