forked from github/cordova-android
fix: ANDROID_HOME is the new default, to check first and give advice (#1471)
This commit is contained in:
parent
016018513e
commit
841710edf7
@ -83,9 +83,9 @@ String doFindLatestInstalledBuildTools(String minBuildToolsVersionString) {
|
|||||||
String getAndroidSdkDir() {
|
String getAndroidSdkDir() {
|
||||||
def rootDir = project.rootDir
|
def rootDir = project.rootDir
|
||||||
def androidSdkDir = null
|
def androidSdkDir = null
|
||||||
String envVar = System.getenv("ANDROID_SDK_ROOT")
|
String envVar = System.getenv("ANDROID_HOME")
|
||||||
if (envVar == null) {
|
if (envVar == null) {
|
||||||
envVar = System.getenv("ANDROID_HOME")
|
envVar = System.getenv("ANDROID_SDK_ROOT")
|
||||||
}
|
}
|
||||||
|
|
||||||
def localProperties = new File(rootDir, 'local.properties')
|
def localProperties = new File(rootDir, 'local.properties')
|
||||||
|
@ -149,7 +149,7 @@ module.exports.check_gradle = function () {
|
|||||||
const sdkDir = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
|
const sdkDir = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT;
|
||||||
if (!sdkDir) {
|
if (!sdkDir) {
|
||||||
return Promise.reject(new CordovaError('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.\n' +
|
return Promise.reject(new CordovaError('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.\n' +
|
||||||
'Might need to install Android SDK or set up \'ANDROID_SDK_ROOT\' env variable.'));
|
'Might need to install Android SDK or set up \'ANDROID_HOME\' env variable.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
const gradlePath = module.exports.get_gradle_wrapper();
|
const gradlePath = module.exports.get_gradle_wrapper();
|
||||||
@ -270,7 +270,7 @@ module.exports.check_android = function () {
|
|||||||
'Failed to find \'android\' command in your \'PATH\'. Try update your \'PATH\' to include path to valid SDK directory.');
|
'Failed to find \'android\' command in your \'PATH\'. Try update your \'PATH\' to include path to valid SDK directory.');
|
||||||
}
|
}
|
||||||
if (!fs.existsSync(process.env.ANDROID_HOME)) {
|
if (!fs.existsSync(process.env.ANDROID_HOME)) {
|
||||||
throw new CordovaError('\'ANDROID_HOME\' environment variable is set to non-existent path: ' + process.env.ANDROID_SDK_ROOT +
|
throw new CordovaError('\'ANDROID_HOME\' environment variable is set to non-existent path: ' + process.env.ANDROID_HOME +
|
||||||
'\nTry update it manually to point to valid SDK directory.');
|
'\nTry update it manually to point to valid SDK directory.');
|
||||||
}
|
}
|
||||||
// Next let's make sure relevant parts of the SDK tooling is in our PATH
|
// Next let's make sure relevant parts of the SDK tooling is in our PATH
|
||||||
@ -306,7 +306,7 @@ module.exports.run = function () {
|
|||||||
console.log('ANDROID_SDK_ROOT=' + process.env.ANDROID_SDK_ROOT + ' (DEPRECATED)');
|
console.log('ANDROID_SDK_ROOT=' + process.env.ANDROID_SDK_ROOT + ' (DEPRECATED)');
|
||||||
|
|
||||||
return Promise.all([this.check_java(), this.check_android()]).then(function (values) {
|
return Promise.all([this.check_java(), this.check_android()]).then(function (values) {
|
||||||
console.log('Using Android SDK: ' + process.env.ANDROID_SDK_ROOT);
|
console.log('Using Android SDK: ' + (process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT));
|
||||||
|
|
||||||
if (!values[1]) {
|
if (!values[1]) {
|
||||||
throw new CordovaError('Requirements check failed for Android SDK! Android SDK was not detected.');
|
throw new CordovaError('Requirements check failed for Android SDK! Android SDK was not detected.');
|
||||||
|
@ -58,7 +58,7 @@ describe('check_reqs', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('check_android', function () {
|
describe('check_android', function () {
|
||||||
describe('find and set ANDROID_HOME when ANDROID_HOME and ANDROID_SDK_ROOT is not set', function () {
|
describe('find and set ANDROID_HOME when neither ANDROID_HOME nor ANDROID_SDK_ROOT is set', function () {
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
delete process.env.ANDROID_HOME;
|
delete process.env.ANDROID_HOME;
|
||||||
delete process.env.ANDROID_SDK_ROOT;
|
delete process.env.ANDROID_SDK_ROOT;
|
||||||
@ -150,32 +150,24 @@ describe('check_reqs', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('ANDROID_SDK_ROOT environment variable detection', () => {
|
describe('ANDROID_HOME environment variable detection', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
delete process.env.ANDROID_SDK_ROOT;
|
|
||||||
delete process.env.ANDROID_HOME;
|
delete process.env.ANDROID_HOME;
|
||||||
|
delete process.env.ANDROID_SDK_ROOT;
|
||||||
check_reqs.__set__('forgivingWhichSync', jasmine.createSpy().and.returnValue(''));
|
check_reqs.__set__('forgivingWhichSync', jasmine.createSpy().and.returnValue(''));
|
||||||
});
|
});
|
||||||
|
|
||||||
const expectedAndroidSdkPath = path.sep + 'android' + path.sep + 'sdk';
|
const expectedAndroidSdkPath = path.sep + 'android' + path.sep + 'sdk';
|
||||||
const expectedAndroidRootSdkPath = path.sep + 'android' + path.sep + 'sdk' + path.sep + 'root';
|
const expectedAndroidRootSdkPath = path.sep + 'android' + path.sep + 'sdk' + path.sep + 'root';
|
||||||
|
|
||||||
it('should error if neither ANDROID_SDK_ROOT or ANDROID_HOME is defined', () => {
|
it('should error if neither ANDROID_HOME nor ANDROID_SDK_ROOT is defined', () => {
|
||||||
spyOn(fs, 'existsSync').and.returnValue(true);
|
spyOn(fs, 'existsSync').and.returnValue(true);
|
||||||
return check_reqs.check_android().catch((error) => {
|
return check_reqs.check_android().catch((error) => {
|
||||||
expect(error.toString()).toContain('Failed to find \'ANDROID_SDK_ROOT\' environment variable.');
|
expect(error.toString()).toContain('Failed to find \'ANDROID_HOME\' environment variable.');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should use ANDROID_SDK_ROOT if defined', () => {
|
it('should use ANDROID_HOME if defined', () => {
|
||||||
spyOn(fs, 'existsSync').and.returnValue(true);
|
|
||||||
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk');
|
|
||||||
return check_reqs.check_android().then(() => {
|
|
||||||
expect(process.env.ANDROID_SDK_ROOT).toContain(expectedAndroidSdkPath);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should use ANDROID_HOME if defined and ANDROID_SDK_ROOT is not defined', () => {
|
|
||||||
spyOn(fs, 'existsSync').and.returnValue(true);
|
spyOn(fs, 'existsSync').and.returnValue(true);
|
||||||
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
||||||
return check_reqs.check_android().then(() => {
|
return check_reqs.check_android().then(() => {
|
||||||
@ -183,15 +175,23 @@ describe('check_reqs', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should use ANDROID_HOME if defined and ANDROID_SDK_ROOT is defined', () => {
|
it('should use ANDROID_SDK_ROOT if defined and ANDROID_HOME is not defined', () => {
|
||||||
spyOn(fs, 'existsSync').and.returnValue(true);
|
spyOn(fs, 'existsSync').and.returnValue(true);
|
||||||
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
||||||
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
|
||||||
return check_reqs.check_android().then(() => {
|
return check_reqs.check_android().then(() => {
|
||||||
expect(process.env.ANDROID_SDK_ROOT).toContain(expectedAndroidRootSdkPath);
|
expect(process.env.ANDROID_SDK_ROOT).toContain(expectedAndroidRootSdkPath);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should use ANDROID_HOME if defined and ANDROID_SDK_ROOT is defined', () => {
|
||||||
|
spyOn(fs, 'existsSync').and.returnValue(true);
|
||||||
|
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
||||||
|
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
||||||
|
return check_reqs.check_android().then(() => {
|
||||||
|
expect(process.env.ANDROID_HOME).toContain(expectedAndroidSdkPath);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should throw if ANDROID_HOME points to an invalid path', () => {
|
it('should throw if ANDROID_HOME points to an invalid path', () => {
|
||||||
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
||||||
return check_reqs.check_android().catch((error) => {
|
return check_reqs.check_android().catch((error) => {
|
||||||
@ -219,30 +219,30 @@ describe('check_reqs', function () {
|
|||||||
describe('check_gradle', () => {
|
describe('check_gradle', () => {
|
||||||
describe('environment variable checks', () => {
|
describe('environment variable checks', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
delete process.env.ANDROID_SDK_ROOT;
|
|
||||||
delete process.env.ANDROID_HOME;
|
delete process.env.ANDROID_HOME;
|
||||||
|
delete process.env.ANDROID_SDK_ROOT;
|
||||||
spyOn(check_reqs, 'get_gradle_wrapper').and.callFake(() => {
|
spyOn(check_reqs, 'get_gradle_wrapper').and.callFake(() => {
|
||||||
return path.normalize((process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT) + '/bin/gradle');
|
return path.normalize((process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT) + '/bin/gradle');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with ANDROID_SDK_ROOT / without ANDROID_HOME', async () => {
|
it('with ANDROID_HOME / without ANDROID_SDK_ROOT', async () => {
|
||||||
|
process.env.ANDROID_HOME = path.normalize('/android/sdk/home');
|
||||||
|
await expectAsync(check_reqs.check_gradle()).toBeResolvedTo(path.normalize('/android/sdk/home/bin/gradle'));
|
||||||
|
});
|
||||||
|
|
||||||
|
it('without ANDROID_HOME / with ANDROID_SDK_ROOT', async () => {
|
||||||
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
||||||
await expectAsync(check_reqs.check_gradle()).toBeResolvedTo(path.normalize('/android/sdk/root/bin/gradle'));
|
await expectAsync(check_reqs.check_gradle()).toBeResolvedTo(path.normalize('/android/sdk/root/bin/gradle'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('with ANDROID_SDK_ROOT / with ANDROID_HOME', async () => {
|
it('with ANDROID_HOME / with ANDROID_SDK_ROOT', async () => {
|
||||||
|
process.env.ANDROID_HOME = path.normalize('/android/sdk/home');
|
||||||
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk/root');
|
||||||
process.env.ANDROID_HOME = path.normalize('/android/sdk/home');
|
|
||||||
await expectAsync(check_reqs.check_gradle()).toBeResolvedTo(path.normalize('/android/sdk/home/bin/gradle'));
|
await expectAsync(check_reqs.check_gradle()).toBeResolvedTo(path.normalize('/android/sdk/home/bin/gradle'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('without ANDROID_SDK_ROOT / with ANDROID_HOME', async () => {
|
it('without ANDROID_HOME / without ANDROID_SDK_ROOT', () => {
|
||||||
process.env.ANDROID_HOME = path.normalize('/android/sdk/home');
|
|
||||||
await expectAsync(check_reqs.check_gradle()).toBeResolvedTo(path.normalize('/android/sdk/home/bin/gradle'));
|
|
||||||
});
|
|
||||||
|
|
||||||
it('without ANDROID_SDK_ROOT / without ANDROID_HOME', () => {
|
|
||||||
return check_reqs.check_gradle().catch((error) => {
|
return check_reqs.check_gradle().catch((error) => {
|
||||||
expect(error.toString()).toContain('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.');
|
expect(error.toString()).toContain('Could not find gradle wrapper within Android SDK. Could not find Android SDK directory.');
|
||||||
});
|
});
|
||||||
@ -250,7 +250,7 @@ describe('check_reqs', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should error if sdk is installed but no gradle found', () => {
|
it('should error if sdk is installed but no gradle found', () => {
|
||||||
process.env.ANDROID_SDK_ROOT = path.normalize('/android/sdk');
|
process.env.ANDROID_HOME = path.normalize('/android/sdk');
|
||||||
spyOn(check_reqs, 'get_gradle_wrapper').and.callFake(() => {
|
spyOn(check_reqs, 'get_gradle_wrapper').and.callFake(() => {
|
||||||
return '';
|
return '';
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user