Skip to content

Commit e826c30

Browse files
committed
Check requirements - ant, java, and android
1 parent dbe8f77 commit e826c30

File tree

1 file changed

+49
-3
lines changed

1 file changed

+49
-3
lines changed

lib/services/project-service.ts

Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,14 @@ class AndroidProjectService implements IAndroidProjectService {
192192
var packageName = projectData.projectId;
193193
var packageAsPath = packageName.replace(/\./g, path.sep);
194194

195-
var targetApi = this.getTargetApi();
195+
var targetApi = this.getTarget();
196196
var manifestFile = path.join(this.frameworkDir, "AndroidManifest.xml");
197197

198198
this.validatePackageName(packageName);
199199
this.validateProjectName(projectData.projectName);
200200

201+
this.checkRequirements().wait();
202+
201203
}).future<any>()();
202204
}
203205

@@ -234,7 +236,7 @@ class AndroidProjectService implements IAndroidProjectService {
234236
return path.join(__dirname, "../../framework", "android");
235237
}
236238

237-
private getTargetApi(): string {
239+
private getTarget(): string {
238240
var projectPropertiesFilePath = path.join(this.frameworkDir, "project.properties");
239241
if(this.$fs.exists(projectPropertiesFilePath).wait()) {
240242
var target = shell.grep(/target=android-[\d+]/, projectPropertiesFilePath);
@@ -246,10 +248,54 @@ class AndroidProjectService implements IAndroidProjectService {
246248

247249
private checkAnt(): IFuture<boolean> {
248250
return (() => {
251+
try {
252+
this.$childProcess.exec("ant -version").wait();
253+
} catch(error) {
254+
this.$errors.fail("Error executing commands 'ant', make sure you have ant installed and added to your PATH.")
255+
}
249256
return true;
250257
}).future<boolean>()();
251258
}
252-
}
259+
260+
private checkJava(): IFuture<boolean> {
261+
return (() => {
262+
try {
263+
this.$childProcess.exec("java -version").wait();
264+
} catch(error) {
265+
this.$errors.fail("%s\n Failed to run 'java', make sure your java environment is set up.\n Including JDK and JRE.\n Your JAVA_HOME variable is %s", error, process.env.JAVA_HOME);
266+
}
267+
return true;
268+
}).future<boolean>()();
269+
}
270+
271+
private checkAndroid(): IFuture<boolean> {
272+
return (() => {
273+
var validTarget = this.getTarget();
274+
try {
275+
var output = this.$childProcess.exec('android list targets').wait();
276+
} catch(error) {
277+
if (error.match(/command\snot\sfound/)) {
278+
this.$errors.fail("The command \"android\" failed. Make sure you have the latest Android SDK installed, and the \"android\" command (inside the tools/ folder) is added to your path.");
279+
} else {
280+
this.$errors.fail("An error occurred while listing Android targets");
281+
}
282+
}
283+
284+
if (!output.match(validTarget)) {
285+
this.$errors.fail("Please install Android target %s the Android newest SDK). Make sure you have the latest Android tools installed as well. Run \"android\" from your command-line to install/update any missing SDKs or tools.",
286+
validTarget.split('-')[1]);
287+
}
288+
289+
return true;
290+
}).future<boolean>()();
291+
}
292+
293+
private checkRequirements(): IFuture<boolean> {
294+
return (() => {
295+
return this.checkAnt().wait() && this.checkAndroid().wait() && this.checkJava().wait();
296+
}).future<boolean>()();
297+
}
298+
}
253299
$injector.register("androidProjectService", AndroidProjectService);
254300

255301
class iOSProjectService implements IiOSProjectService {

0 commit comments

Comments
 (0)