@@ -161,7 +161,7 @@ export class ProjectService implements IProjectService {
161
161
shell . cp ( "-r" , path . join ( this . projectData . projectDir , ProjectService . APP_FOLDER_NAME ) , assetsDirectoryPath ) ;
162
162
163
163
var files = helpers . enumerateFilesInDirectorySync ( path . join ( assetsDirectoryPath , ProjectService . APP_FOLDER_NAME ) ) ;
164
- var pattern = util . format ( "%s%s%s" , path . sep , ProjectService . APP_FOLDER_NAME , path . sep ) ;
164
+ var pattern = util . format ( "%s%s%s" , path . sep , ProjectService . APP_FOLDER_NAME , path . sep ) ;
165
165
_ . each ( files , fileName => {
166
166
if ( ProjectService . shouldExcludeFile ( platform , platforms , fileName . split ( pattern ) [ 1 ] ) ) {
167
167
this . $fs . deleteFile ( fileName ) . wait ( ) ;
@@ -194,17 +194,17 @@ export class ProjectService implements IProjectService {
194
194
195
195
private executePlatformSpecificAction ( platform , functionName : string ) : IFuture < void > {
196
196
return ( ( ) => {
197
- var projectService = null ;
197
+ var platformProjectService = null ;
198
198
switch ( platform ) {
199
199
case "android" :
200
- projectService = this . $androidProjectService ;
200
+ platformProjectService = this . $androidProjectService ;
201
201
break ;
202
202
case "ios" :
203
- projectService = this . $iOSProjectService ;
203
+ platformProjectService = this . $iOSProjectService ;
204
204
break ;
205
205
}
206
206
207
- this . executeFunctionByName ( functionName , projectService , [ this . projectData ] ) . wait ( ) ;
207
+ this . executeFunctionByName ( functionName , platformProjectService , [ this . projectData ] ) . wait ( ) ;
208
208
} ) . future < void > ( ) ( ) ;
209
209
}
210
210
@@ -257,6 +257,7 @@ class AndroidProjectService implements IPlatformProjectService {
257
257
this . frameworkDir = this . getFrameworkDir ( projectData ) . wait ( ) ;
258
258
259
259
var packageName = projectData . projectId ;
260
+ var packageAsPath = packageName . replace ( / \. / g, path . sep ) ;
260
261
var projectDir = path . join ( projectData . projectDir , "platforms" , "android" ) ;
261
262
262
263
this . validatePackageName ( packageName ) ;
@@ -268,7 +269,7 @@ class AndroidProjectService implements IPlatformProjectService {
268
269
269
270
// Log the values for project
270
271
this . $logger . trace ( "Creating NativeScript project for the Android platform" ) ;
271
- this . $logger . trace ( "Path: %s" , projectData . projectDir ) ;
272
+ this . $logger . trace ( "Path: %s" , projectDir ) ;
272
273
this . $logger . trace ( "Package: %s" , projectData . projectId ) ;
273
274
this . $logger . trace ( "Name: %s" , projectData . projectName ) ;
274
275
this . $logger . trace ( "Android target: %s" , targetApi ) ;
@@ -283,6 +284,10 @@ class AndroidProjectService implements IPlatformProjectService {
283
284
shell . cp ( "-f" , path . join ( this . frameworkDir , ".project" ) , projectDir ) ;
284
285
shell . cp ( "-f" , path . join ( this . frameworkDir , "AndroidManifest.xml" ) , projectDir ) ;
285
286
287
+ // Create src folder
288
+ var activityDir = path . join ( projectDir , 'src' , packageAsPath ) ;
289
+ this . $fs . createDirectory ( activityDir ) . wait ( ) ;
290
+
286
291
this . $fs . deleteDirectory ( path . join ( projectData . platformsDir , "android" , "node_modules" ) ) . wait ( ) ;
287
292
288
293
// Interpolate the activity name and package
@@ -301,10 +306,40 @@ class AndroidProjectService implements IPlatformProjectService {
301
306
302
307
public buildProject ( projectData : IProjectData ) : IFuture < void > {
303
308
return ( ( ) => {
309
+ var projectRoot = path . join ( projectData . platformsDir , "android" ) ;
310
+ var buildConfiguration = options . release || "--debug" ;
311
+ var args = this . getAntArgs ( buildConfiguration , projectRoot ) ;
312
+
313
+ switch ( buildConfiguration ) {
314
+ case "--debug" :
315
+ args [ 0 ] = "debug" ;
316
+ break ;
317
+ case "--release" :
318
+ args [ 0 ] = "release" ;
319
+ break ;
320
+ default :
321
+ this . $errors . fail ( "Build option %s not recognized" , buildConfiguration ) ;
322
+ }
323
+
324
+ this . spawn ( 'ant' , args ) ;
304
325
305
326
} ) . future < void > ( ) ( ) ;
306
327
}
307
328
329
+ private spawn ( command : string , args : string [ ] , options ?: any ) : void {
330
+ if ( helpers . isWindows ( ) ) {
331
+ args . unshift ( '/s' , '/c' , command ) ;
332
+ command = 'cmd' ;
333
+ }
334
+
335
+ this . $childProcess . spawn ( command , args , { cwd : options , stdio : 'inherit' } ) ;
336
+ }
337
+
338
+ private getAntArgs ( configuration : string , projectRoot : string ) : string [ ] {
339
+ var args = [ configuration , "-f" , path . join ( projectRoot , "build.xml" ) ] ;
340
+ return args ;
341
+ }
342
+
308
343
private runAndroidUpdate ( projectPath : string , targetApi : string ) : IFuture < void > {
309
344
return ( ( ) => {
310
345
this . $childProcess . exec ( "android update project --subprojects --path " + projectPath + " --target " + targetApi ) . wait ( ) ;
0 commit comments