mirror of
https://github.com/apache/cordova-android.git
synced 2025-01-19 07:02:51 +08:00
Merge branch 'master' into 4.0.x
Conflicts: framework/src/org/apache/cordova/CordovaActivity.java
This commit is contained in:
commit
dd5a337a49
@ -48,20 +48,21 @@ function tryCommand(cmd, errMsg) {
|
|||||||
|
|
||||||
// Get valid target from framework/project.properties
|
// Get valid target from framework/project.properties
|
||||||
module.exports.get_target = function() {
|
module.exports.get_target = function() {
|
||||||
if(fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) {
|
function extractFromFile(filePath) {
|
||||||
var target = shelljs.grep(/target=android-[\d+]/, path.join(ROOT, 'framework', 'project.properties'));
|
var target = shelljs.grep(/\btarget=/, filePath);
|
||||||
return target.split('=')[1].replace('\n', '').replace('\r', '').replace(' ', '');
|
if (!target) {
|
||||||
} else if (fs.existsSync(path.join(ROOT, 'project.properties'))) {
|
throw new Error('Could not find android target within: ' + filePath);
|
||||||
|
}
|
||||||
|
return target.split('=')[1].trim();
|
||||||
|
}
|
||||||
|
if (fs.existsSync(path.join(ROOT, 'framework', 'project.properties'))) {
|
||||||
|
return extractFromFile(path.join(ROOT, 'framework', 'project.properties'));
|
||||||
|
}
|
||||||
|
if (fs.existsSync(path.join(ROOT, 'project.properties'))) {
|
||||||
// if no target found, we're probably in a project and project.properties is in ROOT.
|
// if no target found, we're probably in a project and project.properties is in ROOT.
|
||||||
// this is called on the project itself, and can support Google APIs AND Vanilla Android
|
return extractFromFile(path.join(ROOT, 'project.properties'));
|
||||||
var target = shelljs.grep(/target=android-[\d+]/, path.join(ROOT, 'project.properties')) ||
|
|
||||||
shelljs.grep(/target=Google Inc.:Google APIs:[\d+]/, path.join(ROOT, 'project.properties'));
|
|
||||||
if(target == "" || !target) {
|
|
||||||
// Try Google Glass APIs
|
|
||||||
target = shelljs.grep(/target=Google Inc.:Glass Development Kit Preview:[\d+]/, path.join(ROOT, 'project.properties'));
|
|
||||||
}
|
|
||||||
return target.split('=')[1].replace('\n', '').replace('\r', '');
|
|
||||||
}
|
}
|
||||||
|
throw new Error('Could not find android target. File missing: ' + path.join(ROOT, 'project.properties'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns a promise. Called only by build and clean commands.
|
// Returns a promise. Called only by build and clean commands.
|
||||||
@ -141,6 +142,20 @@ module.exports.check_android = function() {
|
|||||||
var androidCmdPath = forgivingWhichSync('android');
|
var androidCmdPath = forgivingWhichSync('android');
|
||||||
var adbInPath = !!forgivingWhichSync('adb');
|
var adbInPath = !!forgivingWhichSync('adb');
|
||||||
var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
|
var hasAndroidHome = !!process.env['ANDROID_HOME'] && fs.existsSync(process.env['ANDROID_HOME']);
|
||||||
|
function maybeSetAndroidHome(value) {
|
||||||
|
if (fs.existsSync(value)) {
|
||||||
|
hasAndroidHome = true;
|
||||||
|
process.env['ANDROID_HOME'] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!hasAndroidHome && !androidCmdPath) {
|
||||||
|
if (isWindows) {
|
||||||
|
maybeSetAndroidHome(path.join(process.env['LOCALAPPDATA'], 'Android', 'android-studio', 'sdk'));
|
||||||
|
maybeSetAndroidHome(path.join(process.env['ProgramFiles'], 'Android', 'android-studio', 'sdk'));
|
||||||
|
} else if (process.platform == 'darwin') {
|
||||||
|
maybeSetAndroidHome('/Applications/Android Studio.app/sdk');
|
||||||
|
}
|
||||||
|
}
|
||||||
if (hasAndroidHome && !androidCmdPath) {
|
if (hasAndroidHome && !androidCmdPath) {
|
||||||
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
|
process.env['PATH'] += path.delimiter + path.join(process.env['ANDROID_HOME'], 'tools');
|
||||||
}
|
}
|
||||||
@ -166,12 +181,17 @@ module.exports.check_android = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.exports.check_android_target = function(valid_target) {
|
module.exports.check_android_target = function(valid_target) {
|
||||||
|
// valid_target can look like:
|
||||||
|
// android-19
|
||||||
|
// android-L
|
||||||
|
// Google Inc.:Google APIs:20
|
||||||
|
// Google Inc.:Glass Development Kit Preview:20
|
||||||
var msg = 'Failed to run "android". Make sure you have the latest Android SDK installed, and that the "android" command (inside the tools/ folder) is added to your PATH.';
|
var msg = 'Failed to run "android". Make sure you have the latest Android SDK installed, and that the "android" command (inside the tools/ folder) is added to your PATH.';
|
||||||
return tryCommand('android list targets', msg)
|
return tryCommand('android list targets --compact', msg)
|
||||||
.then(function(output) {
|
.then(function(output) {
|
||||||
if (!output.match(valid_target)) {
|
if (output.split('\n').indexOf(valid_target) == -1) {
|
||||||
throw new Error('Please install Android target "' + valid_target + '".\n' +
|
throw new Error('Please install Android target: "' + valid_target + '".\n' +
|
||||||
'Hint: Run "android" from your command-line to open the SDK manager.');
|
'Hint: Open the SDK manager by running: ' + forgivingWhichSync('android'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -225,10 +225,6 @@ exports.createProject = function(project_path, package_name, project_name, proje
|
|||||||
return validatePackageName(package_name)
|
return validatePackageName(package_name)
|
||||||
.then(function() {
|
.then(function() {
|
||||||
validateProjectName(project_name);
|
validateProjectName(project_name);
|
||||||
})
|
|
||||||
// Check that requirements are met and proper targets are installed
|
|
||||||
.then(function() {
|
|
||||||
return check_reqs.run();
|
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
// Log the given values for the project
|
// Log the given values for the project
|
||||||
console.log('Creating Cordova project for the Android platform:');
|
console.log('Creating Cordova project for the Android platform:');
|
||||||
@ -304,8 +300,7 @@ function extractProjectNameFromManifest(projectPath) {
|
|||||||
// Returns a promise.
|
// Returns a promise.
|
||||||
exports.updateProject = function(projectPath, shared) {
|
exports.updateProject = function(projectPath, shared) {
|
||||||
var newVersion = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
|
var newVersion = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
|
||||||
// Check that requirements are met and proper targets are installed
|
return Q()
|
||||||
return check_reqs.run()
|
|
||||||
.then(function() {
|
.then(function() {
|
||||||
var projectName = extractProjectNameFromManifest(projectPath);
|
var projectName = extractProjectNameFromManifest(projectPath);
|
||||||
var target_api = check_reqs.get_target();
|
var target_api = check_reqs.get_target();
|
||||||
|
@ -1,5 +1,26 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
|
|
||||||
|
ext.cordova = {}
|
||||||
|
apply from: 'cordova.gradle', to: ext.cordova
|
||||||
apply plugin: 'android'
|
apply plugin: 'android'
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
@ -38,8 +59,8 @@ android {
|
|||||||
versionCode Integer.parseInt("" + getVersionCodeFromManifest() + "0")
|
versionCode Integer.parseInt("" + getVersionCodeFromManifest() + "0")
|
||||||
}
|
}
|
||||||
|
|
||||||
compileSdkVersion 19
|
compileSdkVersion cordova.cordovaSdkVersion
|
||||||
buildToolsVersion "19.0.0"
|
buildToolsVersion cordova.cordovaBuildToolsVersion
|
||||||
|
|
||||||
if (multiarch || System.env.BUILD_MULTIPLE_APKS) {
|
if (multiarch || System.env.BUILD_MULTIPLE_APKS) {
|
||||||
productFlavors {
|
productFlavors {
|
||||||
|
123
bin/templates/project/cordova.gradle
Normal file
123
bin/templates/project/cordova.gradle
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.regex.Pattern
|
||||||
|
|
||||||
|
String getProjectTarget(String defaultTarget) {
|
||||||
|
def manifestFile = file("project.properties")
|
||||||
|
def pattern = Pattern.compile("target\\s*=\\s*(.*)")
|
||||||
|
def matcher = pattern.matcher(manifestFile.getText())
|
||||||
|
if (matcher.find()) {
|
||||||
|
matcher.group(1)
|
||||||
|
} else {
|
||||||
|
defaultTarget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] getAvailableBuildTools() {
|
||||||
|
def buildToolsDir = new File(getAndroidSdkDir(), "build-tools")
|
||||||
|
buildToolsDir.list()
|
||||||
|
.findAll { it ==~ /[0-9.]+/ }
|
||||||
|
.sort { a, b -> compareVersions(b, a) }
|
||||||
|
}
|
||||||
|
|
||||||
|
String latestBuildToolsAvailable(String minBuildToolsVersion) {
|
||||||
|
def availableBuildToolsVersions
|
||||||
|
try {
|
||||||
|
availableBuildToolsVersions = getAvailableBuildTools()
|
||||||
|
} catch (e) {
|
||||||
|
println "An exception occurred while trying to find the Android build tools."
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
if (availableBuildToolsVersions.length > 0) {
|
||||||
|
def highestBuildToolsVersion = availableBuildToolsVersions[0]
|
||||||
|
if (compareVersions(highestBuildToolsVersion, minBuildToolsVersion) < 0) {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"No usable Android build tools found. Highest installed version is " +
|
||||||
|
highestBuildToolsVersion + "; minimum version required is " +
|
||||||
|
minBuildToolsVersion + ".")
|
||||||
|
}
|
||||||
|
highestBuildToolsVersion
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"No installed build tools found. Please install the Android build tools version " +
|
||||||
|
minBuildToolsVersion + " or higher.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the first non-zero result of subtracting version list elements
|
||||||
|
// pairwise. If they are all identical, return the difference in length of
|
||||||
|
// the two lists.
|
||||||
|
int compareVersionList(Collection aParts, Collection bParts) {
|
||||||
|
def pairs = ([aParts, bParts]).transpose()
|
||||||
|
pairs.findResult(aParts.size()-bParts.size()) {it[0] - it[1] != 0 ? it[0] - it[1] : null}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compare two version strings, such as "19.0.0" and "18.1.1.0". If all matched
|
||||||
|
// elements are identical, the longer version is the largest by this method.
|
||||||
|
// Examples:
|
||||||
|
// "19.0.0" > "19"
|
||||||
|
// "19.0.1" > "19.0.0"
|
||||||
|
// "19.1.0" > "19.0.1"
|
||||||
|
// "19" > "18.999.999"
|
||||||
|
int compareVersions(String a, String b) {
|
||||||
|
def aParts = a.tokenize('.').collect {it.toInteger()}
|
||||||
|
def bParts = b.tokenize('.').collect {it.toInteger()}
|
||||||
|
compareVersionList(aParts, bParts)
|
||||||
|
}
|
||||||
|
|
||||||
|
String getAndroidSdkDir() {
|
||||||
|
def rootDir = project.rootDir
|
||||||
|
def localProperties = new File(rootDir, 'local.properties')
|
||||||
|
def androidSdkDir = ""
|
||||||
|
if (localProperties.exists()) {
|
||||||
|
Properties properties = new Properties()
|
||||||
|
localProperties.withInputStream { instr ->
|
||||||
|
properties.load(instr)
|
||||||
|
}
|
||||||
|
def sdkDirProp = properties.getProperty('sdk.dir')
|
||||||
|
if (sdkDirProp != null) {
|
||||||
|
androidSdkDir = sdkDirProp
|
||||||
|
} else {
|
||||||
|
sdkDirProp = properties.getProperty('android.dir')
|
||||||
|
if (sdkDirProp != null) {
|
||||||
|
androidSdkDir = (new File(rootDir, sdkDirProp)).getAbsolutePath()
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"No sdk.dir property defined in local.properties file.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String envVar = System.getenv("ANDROID_HOME")
|
||||||
|
if (envVar != null) {
|
||||||
|
androidSdkDir = envVar
|
||||||
|
} else {
|
||||||
|
String property = System.getProperty("android.home")
|
||||||
|
if (property != null) {
|
||||||
|
androidSdkDir = property
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println androidSdkDir
|
||||||
|
androidSdkDir
|
||||||
|
}
|
||||||
|
|
||||||
|
cordovaSdkVersion = getProjectTarget("android-19")
|
||||||
|
cordovaBuildToolsVersion = latestBuildToolsAvailable("19.0.0")
|
||||||
|
|
@ -1,3 +1,24 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
@ -11,8 +32,8 @@ buildscript {
|
|||||||
apply plugin: 'android-library'
|
apply plugin: 'android-library'
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 19
|
compileSdkVersion cordova.cordovaSdkVersion
|
||||||
buildToolsVersion "19.0.0"
|
buildToolsVersion cordova.cordovaBuildToolsVersion
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_7
|
sourceCompatibility JavaVersion.VERSION_1_7
|
||||||
|
@ -212,10 +212,8 @@ public class CordovaActivity extends Activity implements CordovaInterface {
|
|||||||
root.addView(appView.getView());
|
root.addView(appView.getView());
|
||||||
setContentView(root);
|
setContentView(root);
|
||||||
|
|
||||||
// TODO: Setting this on the appView causes it to show when <html style="opacity:0">.
|
|
||||||
int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK);
|
int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK);
|
||||||
root.setBackgroundColor(backgroundColor);
|
root.setBackgroundColor(backgroundColor);
|
||||||
appView.getView().setBackgroundColor(backgroundColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
package org.apache.cordova.test;
|
package org.apache.cordova.test;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
/*
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
package org.apache.cordova.test.junit;
|
package org.apache.cordova.test.junit;
|
||||||
|
|
||||||
import org.apache.cordova.CordovaWebView;
|
import org.apache.cordova.CordovaWebView;
|
||||||
|
Loading…
Reference in New Issue
Block a user