1
+ #!/usr/bin/env node
2
+
1
3
/**
2
4
* @author Jade Yeom
3
5
* @email ysw0094@gmail.com
4
6
*/
5
- var commander = require('commander'), fs = require('fs'), path = require('path'), chalk = require('chalk'), walk = require('walk'), inquirer = require('inquirer'), xml2js = require('xml2js'), changeCase = require('change-case');
7
+ var commander = require ( 'commander' ) , fs = require ( 'fs' ) , path = require ( 'path' ) , chalk = require ( 'chalk' ) , walk = require ( 'walk' ) , inquirer = require ( 'inquirer' ) , xml2js = require ( 'xml2js' ) , changeCase = require ( 'change-case' ) , gjs = require ( 'gradlejs' ) , shell = require ( 'shelljs' ) ;
8
+ var xmlParser = new xml2js . Parser ( ) ;
9
+ var xmlBuilder = new xml2js . Builder ( ) ;
6
10
commander . arguments ( '<name>' )
7
11
. version ( '0.0.1' )
8
12
. option ( '-g, --generate [name]' , 'component (e.g activity, fragment etc..)' )
9
- .option('-p, --permission [name] ', 'add uses-permission to manifest file(e.g INTERNET)')
10
- .option('--adb-reset ', 'kill server adb (required environment variable for ADB_PATH) ')
13
+ . option ( '-p, --permission <permission> ' , 'add uses-permission to manifest file(e.g INTERNET)' )
14
+ . option ( '-d, --dependency <dependency> ' , 'add dependency to build.gradle and sync gradle ' )
11
15
. action ( function ( name ) {
12
16
var selectedPackage ;
13
17
var parsedJavaContent ;
@@ -31,19 +35,71 @@ commander.arguments('<name>')
31
35
} ) ;
32
36
}
33
37
} ) . parse ( process . argv ) ;
38
+ if ( commander . permission ) {
39
+ console . log ( commander . permission ) ;
40
+ addPermissionToManifest ( commander . permission , function ( xml ) {
41
+ try {
42
+ fs . writeFileSync ( './app/src/main/AndroidManifest.xml' , xml ) ;
43
+ console . log ( chalk . green ( "Successful adding permission" ) ) ;
44
+ }
45
+ catch ( err ) {
46
+ console . log ( chalk . red ( "Failed to adding permission" ) ) ;
47
+ console . log ( chalk . red ( err ) ) ;
48
+ }
49
+ } ) ;
50
+ }
51
+ if ( commander . dependency ) {
52
+ console . log ( commander . dependency ) ;
53
+ var gradlePath_1 = "./app/build.gradle" ;
54
+ gjs . parseFile ( gradlePath_1 ) . then ( function ( representation ) {
55
+ representation . dependencies . compile . push ( "'" + commander . dependency + "'" ) ;
56
+ fs . writeFile ( gradlePath_1 , gjs . makeGradleText ( representation ) , function ( err ) {
57
+ if ( ! err ) {
58
+ var gradleSyncCommand = "" ;
59
+ if ( isWindows ( ) )
60
+ gradleSyncCommand = "gradlew.bat build" ;
61
+ else
62
+ gradleSyncCommand = "./gradlew build" ;
63
+ shell . exec ( gradleSyncCommand , function ( code , stdout , stderr ) {
64
+ console . log ( 'Exit code:' , code ) ;
65
+ console . log ( 'Program output:' , stdout ) ;
66
+ console . log ( 'Program stderr:' , stderr ) ;
67
+ } ) ;
68
+ }
69
+ } ) ;
70
+ } ) ;
71
+ }
72
+ /**
73
+ * @desc Add permission to Manfest
74
+ *
75
+ * @param {string } permissionName - To add permission of name
76
+ */
77
+ function addPermissionToManifest ( permissionName , callback ) {
78
+ xmlParser . parseString ( getManifestContent ( ) , function ( err , result ) {
79
+ if ( ! Array . isArray ( result . manifest [ 'uses-permission' ] ) )
80
+ result . manifest [ 'uses-permission' ] = [ ] ;
81
+ result . manifest [ 'uses-permission' ] . push ( {
82
+ '$' : {
83
+ 'android:name' : "android.permission." + changeCase . upperCase ( permissionName )
84
+ }
85
+ } ) ;
86
+ callback ( xmlBuilder . buildObject ( result ) ) ;
87
+ } ) ;
88
+ }
34
89
/**
35
90
* @desc Parse package name by AndroidManifest.xml
36
91
*
37
92
* @param {function } callback - Call anonymous function when complete xml parse
38
93
*/
39
94
function getApplicationPackage ( callback ) {
40
95
// TODO GET REAL PATH
41
- var manifestContent = fs.readFileSync('./app/src/main/AndroidManifest.xml');
42
- var parser = new xml2js.Parser();
43
- parser.parseString(manifestContent, function (err, result) {
96
+ xmlParser . parseString ( getManifestContent ( ) , function ( err , result ) {
44
97
callback ( result . manifest . $ . package ) ;
45
98
} ) ;
46
99
}
100
+ function getManifestContent ( ) {
101
+ return fs . readFileSync ( './app/src/main/AndroidManifest.xml' ) ;
102
+ }
47
103
/**
48
104
* @desc Parse package name list by walk module
49
105
*
@@ -113,7 +169,7 @@ function generateRenderedOutFile(componentType, componentName, targetPkg) {
113
169
console . log ( chalk . red ( err ) ) ;
114
170
}
115
171
try {
116
- fs.writeFileSync("" + xmlFileName /*TODO GET REAL PATH*/, parsedXMLContent);
172
+ fs . writeFileSync ( "./app/src/main/res/layout/ " + xmlFileName /*TODO GET REAL PATH*/ , parsedXMLContent ) ;
117
173
console . log ( chalk . green ( "Successful generate layout file " + xmlFileName ) ) ;
118
174
}
119
175
catch ( err ) {
@@ -129,3 +185,6 @@ function presentInitialMessage() {
129
185
console . log ( chalk . cyan ( "Welcome to Android CLI TOOL 0.0.1" ) ) ;
130
186
console . log ( chalk . cyan ( "=================================" ) ) ;
131
187
}
188
+ function isWindows ( ) {
189
+ return / ^ w i n / . test ( process . platform ) ;
190
+ }
0 commit comments