aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar djsollen <djsollen@google.com>2015-07-22 11:33:24 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-07-22 11:33:25 -0700
commit425535f1626932e4e22f61a2571f9c3c2b1c5977 (patch)
treeabea4aaaf77ea00c9f424ff8e003dffa9a4ce50f
parent404d9d620d98b186890f9dbdd3498557206c2793 (diff)
Update Android Apps to use gradle
This CL replaces ant with gradle for the task of building APKs. The primary driver of this change is that it now allow us to develop and test our apps using Android Studio. DOCS_PREVIEW= https://skia.org/?cl=1215023017 Review URL: https://codereview.chromium.org/1215023017
-rw-r--r--.gitignore7
-rw-r--r--platform_tools/android/app/build.xml61
-rw-r--r--platform_tools/android/app/project.properties14
-rw-r--r--platform_tools/android/apps/build.gradle86
-rw-r--r--platform_tools/android/apps/sample_app/build.gradle46
-rw-r--r--platform_tools/android/apps/sample_app/src/main/AndroidManifest.xml (renamed from platform_tools/android/app/AndroidManifest.xml)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleActivity.java (renamed from platform_tools/android/app/src/com/skia/SkiaSampleActivity.java)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleRenderer.java (renamed from platform_tools/android/app/src/com/skia/SkiaSampleRenderer.java)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleView.java (renamed from platform_tools/android/app/src/com/skia/SkiaSampleView.java)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/jni/AndroidKeyToSkKey.h (renamed from platform_tools/android/app/jni/AndroidKeyToSkKey.h)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.cpp (renamed from platform_tools/android/app/jni/com_skia_SkiaSampleRenderer.cpp)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.h (renamed from platform_tools/android/app/jni/com_skia_SkiaSampleRenderer.h)7
-rw-r--r--platform_tools/android/apps/sample_app/src/main/res/drawable-hdpi/ic_btn_find_next.png (renamed from platform_tools/android/app/res/drawable-hdpi/ic_btn_find_next.png)bin1099 -> 1099 bytes
-rw-r--r--platform_tools/android/apps/sample_app/src/main/res/drawable-hdpi/ic_btn_find_prev.png (renamed from platform_tools/android/app/res/drawable-hdpi/ic_btn_find_prev.png)bin912 -> 912 bytes
-rw-r--r--platform_tools/android/apps/sample_app/src/main/res/layout/layout.xml (renamed from platform_tools/android/app/res/layout/layout.xml)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/res/menu/action_bar.xml (renamed from platform_tools/android/app/res/menu/action_bar.xml)0
-rw-r--r--platform_tools/android/apps/sample_app/src/main/res/values/strings.xml (renamed from platform_tools/android/app/res/values/strings.xml)0
-rw-r--r--platform_tools/android/apps/settings.gradle2
-rw-r--r--platform_tools/android/apps/visualbench/build.gradle46
-rw-r--r--platform_tools/android/apps/visualbench/src/main/AndroidManifest.xml (renamed from platform_tools/android/visualbench/AndroidManifest.xml)0
-rw-r--r--platform_tools/android/apps/visualbench/src/main/java/com/skia/VisualBenchActivity.java (renamed from platform_tools/android/visualbench/src/com/skia/VisualBenchActivity.java)0
-rw-r--r--platform_tools/android/apps/visualbench/src/main/jni/SkOSWindow_AndroidNative.cpp (renamed from platform_tools/android/visualbench/jni/SkOSWindow_AndroidNative.cpp)0
-rw-r--r--platform_tools/android/apps/visualbench/src/main/jni/main.cpp (renamed from platform_tools/android/visualbench/jni/main.cpp)0
-rwxr-xr-xplatform_tools/android/bin/android_install_app14
-rwxr-xr-xplatform_tools/android/bin/android_setup.sh5
-rw-r--r--platform_tools/android/gyp/dependencies.gypi6
-rw-r--r--platform_tools/android/gyp/skia_android.gypi77
-rw-r--r--platform_tools/android/visualbench/build.xml61
-rw-r--r--platform_tools/android/visualbench/project.properties14
-rw-r--r--site/user/quick/android.md35
30 files changed, 261 insertions, 220 deletions
diff --git a/.gitignore b/.gitignore
index 44d423f269..7ea825655a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,9 +1,12 @@
*.pyc
*.swp
+*.iml
.DS_Store
.android_config
.gclient*
.gm-actuals
+.gradle
+.idea
.cproject
.project
.settings/
@@ -12,6 +15,10 @@ bower_components
common
gyp/build
out
+platform_tools/android/apps/build
+platform_tools/android/apps/*.properties
+platform_tools/android/apps/*/build
+platform_tools/android/apps/*/src/main/libs
platform_tools/chromeos/third_party/externals
platform_tools/chromeos/toolchain
skps
diff --git a/platform_tools/android/app/build.xml b/platform_tools/android/app/build.xml
deleted file mode 100644
index fbba716abb..0000000000
--- a/platform_tools/android/app/build.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="SkiaAndroid" default="help">
-
- <!-- The local.properties file is created and updated by the 'android' tool.
- It contains the path to the SDK. It should *NOT* be checked into
- Version Control Systems. -->
- <property file="local.properties" />
-
- <!-- The project.properties file is created and updated by the 'android'
- tool, as well as ADT.
-
- This contains project specific properties such as project target, and library
- dependencies. Lower level build properties are stored in ant.properties
- (or in .classpath for Eclipse projects).
-
- This file is an integral part of the build system for your
- application and should be checked into Version Control Systems. -->
- <loadproperties srcFile="project.properties" />
-
- <!-- quick check on sdk.dir -->
- <fail
- message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
- unless="sdk.dir"
- />
-
- <!--
- Import per project custom build rules if present at the root of the project.
- This is the place to put custom intermediary targets such as:
- -pre-build
- -pre-compile
- -post-compile (This is typically used for code obfuscation.
- Compiled code location: ${out.classes.absolute.dir}
- If this is not done in place, override ${out.dex.input.absolute.dir})
- -post-package
- -post-build
- -pre-clean
- -->
- <import file="custom_rules.xml" optional="true" />
-
- <!-- Import the actual build file.
-
- To customize existing targets, there are two options:
- - Customize only one target:
- - copy/paste the target into this file, *before* the
- <import> task.
- - customize it to your needs.
- - Customize the whole content of build.xml
- - copy/paste the content of the rules files (minus the top node)
- into this file, replacing the <import> task.
- - customize to your needs.
-
- ***********************
- ****** IMPORTANT ******
- ***********************
- In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
- in order to avoid having your file be overridden by tools such as "android update project"
- -->
- <!-- version-tag: 1 -->
- <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>
diff --git a/platform_tools/android/app/project.properties b/platform_tools/android/app/project.properties
deleted file mode 100644
index 4ab125693c..0000000000
--- a/platform_tools/android/app/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-19
diff --git a/platform_tools/android/apps/build.gradle b/platform_tools/android/apps/build.gradle
new file mode 100644
index 0000000000..b20334b887
--- /dev/null
+++ b/platform_tools/android/apps/build.gradle
@@ -0,0 +1,86 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:1.2.3'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ jcenter()
+ }
+}
+
+def getLocalProperties() {
+ Properties properties = new Properties()
+ File propFile = project.rootProject.file('local.properties')
+ if (propFile.canRead()) {
+ properties.load(propFile.newDataInputStream())
+ }
+ propFile = project.rootProject.file('gradle.properties')
+ if (propFile.canRead()) {
+ properties.load(propFile.newDataInputStream())
+ }
+ return properties
+}
+
+def getSDKPath() {
+ String path = System.getenv("ANDROID_SDK_ROOT")
+ if (path == null) {
+ path = getLocalProperties().getProperty('sdk.dir', null)
+ }
+
+ if (path == null) {
+ throw new GradleScriptException("Android SDK not found! Please set ANDROID_SDK_ROOT to" +
+ " your path or define sdk.dir in gradle.properties")
+ }
+ return path
+}
+
+def getPathWithDepotTools() {
+ System.getenv("PATH") + ":" + getLocalProperties().getProperty('depot_tools.dir', null)
+ String path = System.getenv("PATH")
+ if (!path.contains("depot_tools")) {
+ path += ":" + getLocalProperties().getProperty('depot_tools.dir', null)
+ }
+
+ if (!path.contains("depot_tools")) {
+ throw GradleScriptException("Depot Tools not found! Please update your path to include" +
+ " depot_tools or define depot_tools.dir in gradle.properties")
+ }
+ return path
+}
+
+def constructBuildCommand(variant, buildTarget) {
+ String cmdLine = "./platform_tools/android/bin/android_ninja $buildTarget"
+ String deviceType = null
+ if (variant.name.startsWith("arm64")) {
+ deviceType = "arm64"
+ } else if (variant.name.startsWith("arm")) {
+ deviceType = "arm_v7_neon"
+ } else if (variant.name.startsWith("x86_64")) {
+ deviceType = "x86_64"
+ } else if (variant.name.startsWith("x86")) {
+ deviceType = "x86"
+ } else if (variant.name.startsWith("mips")) {
+ deviceType = "mips"
+ } else if (variant.name.startsWith("mips64")) {
+ deviceType = "mips64"
+ }
+
+ if (deviceType != null) {
+ cmdLine += " -d " + deviceType
+ }
+
+ if (variant.name.endsWith("Release")) {
+ cmdLine += " --release"
+ }
+ return cmdLine
+} \ No newline at end of file
diff --git a/platform_tools/android/apps/sample_app/build.gradle b/platform_tools/android/apps/sample_app/build.gradle
new file mode 100644
index 0000000000..e27a77ae24
--- /dev/null
+++ b/platform_tools/android/apps/sample_app/build.gradle
@@ -0,0 +1,46 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 19
+ buildToolsVersion "22.0.1"
+
+ defaultConfig {
+ applicationId "com.skia.sample_app"
+ minSdkVersion 9
+ targetSdkVersion 19
+ versionCode 1
+ versionName "1.0"
+ }
+
+ sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call
+ sourceSets.main.jniLibs.srcDir "src/main/libs"
+
+ productFlavors {
+ arm {}
+ arm64 {}
+ x86 {}
+ x86_64 {}
+ mips {}
+ mips64 {}
+ }
+
+ // make sure that app is built and shared libraries are copied to correct directories
+ applicationVariants.all{ variant ->
+
+ def buildNativeLib = task("${variant.name}_NativeLib", type:Exec) {
+ workingDir '../../../..' // top-level skia directory
+ commandLine constructBuildCommand(variant, "CopySampleAppDeps").split()
+ environment PATH: getPathWithDepotTools()
+ environment ANDROID_SDK_ROOT: getSDKPath()
+ }
+
+ if (!hasProperty("suppressNativeBuild")) {
+ TaskCollection<Task> assembleTask
+ assembleTask = project.tasks.matching {
+ it.name.contains("assemble") &&
+ it.name.toLowerCase().endsWith(variant.name.toLowerCase())
+ }
+ assembleTask.getAt(0).dependsOn buildNativeLib
+ }
+ }
+} \ No newline at end of file
diff --git a/platform_tools/android/app/AndroidManifest.xml b/platform_tools/android/apps/sample_app/src/main/AndroidManifest.xml
index edb0424ba8..edb0424ba8 100644
--- a/platform_tools/android/app/AndroidManifest.xml
+++ b/platform_tools/android/apps/sample_app/src/main/AndroidManifest.xml
diff --git a/platform_tools/android/app/src/com/skia/SkiaSampleActivity.java b/platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleActivity.java
index d9cd9f887d..d9cd9f887d 100644
--- a/platform_tools/android/app/src/com/skia/SkiaSampleActivity.java
+++ b/platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleActivity.java
diff --git a/platform_tools/android/app/src/com/skia/SkiaSampleRenderer.java b/platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleRenderer.java
index 55257094cd..55257094cd 100644
--- a/platform_tools/android/app/src/com/skia/SkiaSampleRenderer.java
+++ b/platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleRenderer.java
diff --git a/platform_tools/android/app/src/com/skia/SkiaSampleView.java b/platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleView.java
index c33f8ae8ac..c33f8ae8ac 100644
--- a/platform_tools/android/app/src/com/skia/SkiaSampleView.java
+++ b/platform_tools/android/apps/sample_app/src/main/java/com/skia/SkiaSampleView.java
diff --git a/platform_tools/android/app/jni/AndroidKeyToSkKey.h b/platform_tools/android/apps/sample_app/src/main/jni/AndroidKeyToSkKey.h
index 6bcb148b46..6bcb148b46 100644
--- a/platform_tools/android/app/jni/AndroidKeyToSkKey.h
+++ b/platform_tools/android/apps/sample_app/src/main/jni/AndroidKeyToSkKey.h
diff --git a/platform_tools/android/app/jni/com_skia_SkiaSampleRenderer.cpp b/platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.cpp
index d66221a01c..d66221a01c 100644
--- a/platform_tools/android/app/jni/com_skia_SkiaSampleRenderer.cpp
+++ b/platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.cpp
diff --git a/platform_tools/android/app/jni/com_skia_SkiaSampleRenderer.h b/platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.h
index 263353ac1a..8883a3a9f0 100644
--- a/platform_tools/android/app/jni/com_skia_SkiaSampleRenderer.h
+++ b/platform_tools/android/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.h
@@ -1,3 +1,10 @@
+/*
+ * Copyright 2015 Skia
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_skia_SkiaSampleRenderer */
diff --git a/platform_tools/android/app/res/drawable-hdpi/ic_btn_find_next.png b/platform_tools/android/apps/sample_app/src/main/res/drawable-hdpi/ic_btn_find_next.png
index b696a6bb22..b696a6bb22 100644
--- a/platform_tools/android/app/res/drawable-hdpi/ic_btn_find_next.png
+++ b/platform_tools/android/apps/sample_app/src/main/res/drawable-hdpi/ic_btn_find_next.png
Binary files differ
diff --git a/platform_tools/android/app/res/drawable-hdpi/ic_btn_find_prev.png b/platform_tools/android/apps/sample_app/src/main/res/drawable-hdpi/ic_btn_find_prev.png
index 5550c5a6ff..5550c5a6ff 100644
--- a/platform_tools/android/app/res/drawable-hdpi/ic_btn_find_prev.png
+++ b/platform_tools/android/apps/sample_app/src/main/res/drawable-hdpi/ic_btn_find_prev.png
Binary files differ
diff --git a/platform_tools/android/app/res/layout/layout.xml b/platform_tools/android/apps/sample_app/src/main/res/layout/layout.xml
index cdb90e9961..cdb90e9961 100644
--- a/platform_tools/android/app/res/layout/layout.xml
+++ b/platform_tools/android/apps/sample_app/src/main/res/layout/layout.xml
diff --git a/platform_tools/android/app/res/menu/action_bar.xml b/platform_tools/android/apps/sample_app/src/main/res/menu/action_bar.xml
index 72e135e43b..72e135e43b 100644
--- a/platform_tools/android/app/res/menu/action_bar.xml
+++ b/platform_tools/android/apps/sample_app/src/main/res/menu/action_bar.xml
diff --git a/platform_tools/android/app/res/values/strings.xml b/platform_tools/android/apps/sample_app/src/main/res/values/strings.xml
index b0b4e7b74b..b0b4e7b74b 100644
--- a/platform_tools/android/app/res/values/strings.xml
+++ b/platform_tools/android/apps/sample_app/src/main/res/values/strings.xml
diff --git a/platform_tools/android/apps/settings.gradle b/platform_tools/android/apps/settings.gradle
new file mode 100644
index 0000000000..89cc95447b
--- /dev/null
+++ b/platform_tools/android/apps/settings.gradle
@@ -0,0 +1,2 @@
+include ':sample_app'
+include ':visualbench'
diff --git a/platform_tools/android/apps/visualbench/build.gradle b/platform_tools/android/apps/visualbench/build.gradle
new file mode 100644
index 0000000000..81322b026e
--- /dev/null
+++ b/platform_tools/android/apps/visualbench/build.gradle
@@ -0,0 +1,46 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 19
+ buildToolsVersion "22.0.1"
+
+ defaultConfig {
+ applicationId "com.skia.visualbench"
+ minSdkVersion 9
+ targetSdkVersion 19
+ versionCode 1
+ versionName "1.0"
+ }
+
+ sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call
+ sourceSets.main.jniLibs.srcDir "src/main/libs"
+
+ productFlavors {
+ arm {}
+ arm64 {}
+ x86 {}
+ x86_64 {}
+ mips {}
+ mips64 {}
+ }
+
+ // make sure that app is built and shared libraries are copied to correct directories
+ applicationVariants.all{ variant ->
+
+ def buildNativeLib = task("${variant.name}_NativeLib", type:Exec) {
+ workingDir '../../../..' // top-level skia directory
+ commandLine constructBuildCommand(variant, "CopyVisualBenchDeps").split()
+ environment PATH: getPathWithDepotTools()
+ environment ANDROID_SDK_ROOT: getSDKPath()
+ }
+
+ if (!hasProperty("suppressNativeBuild")) {
+ TaskCollection<Task> assembleTask
+ assembleTask = project.tasks.matching {
+ it.name.contains("assemble") &&
+ it.name.toLowerCase().endsWith(variant.name.toLowerCase())
+ }
+ assembleTask.getAt(0).dependsOn buildNativeLib
+ }
+ }
+} \ No newline at end of file
diff --git a/platform_tools/android/visualbench/AndroidManifest.xml b/platform_tools/android/apps/visualbench/src/main/AndroidManifest.xml
index c15dee6e16..c15dee6e16 100644
--- a/platform_tools/android/visualbench/AndroidManifest.xml
+++ b/platform_tools/android/apps/visualbench/src/main/AndroidManifest.xml
diff --git a/platform_tools/android/visualbench/src/com/skia/VisualBenchActivity.java b/platform_tools/android/apps/visualbench/src/main/java/com/skia/VisualBenchActivity.java
index 90f70bfe0a..90f70bfe0a 100644
--- a/platform_tools/android/visualbench/src/com/skia/VisualBenchActivity.java
+++ b/platform_tools/android/apps/visualbench/src/main/java/com/skia/VisualBenchActivity.java
diff --git a/platform_tools/android/visualbench/jni/SkOSWindow_AndroidNative.cpp b/platform_tools/android/apps/visualbench/src/main/jni/SkOSWindow_AndroidNative.cpp
index e2bc99610f..e2bc99610f 100644
--- a/platform_tools/android/visualbench/jni/SkOSWindow_AndroidNative.cpp
+++ b/platform_tools/android/apps/visualbench/src/main/jni/SkOSWindow_AndroidNative.cpp
diff --git a/platform_tools/android/visualbench/jni/main.cpp b/platform_tools/android/apps/visualbench/src/main/jni/main.cpp
index 2ea6b76b39..2ea6b76b39 100644
--- a/platform_tools/android/visualbench/jni/main.cpp
+++ b/platform_tools/android/apps/visualbench/src/main/jni/main.cpp
diff --git a/platform_tools/android/bin/android_install_app b/platform_tools/android/bin/android_install_app
index a8c1a12b2b..ed5ed61318 100755
--- a/platform_tools/android/bin/android_install_app
+++ b/platform_tools/android/bin/android_install_app
@@ -9,7 +9,7 @@ function print_usage {
echo " -h Prints this help message"
echo " --release Install the release build of Skia"
echo " -s [device_s/n] Serial number of the device to be used"
- echo " AppName Can be either SampleApp or VisualBench"
+ echo " AppName Can be either sample_app or VisualBench"
}
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
@@ -18,8 +18,6 @@ source $SCRIPT_DIR/android_setup.sh
source $SCRIPT_DIR/utils/setup_adb.sh
forceRemoval="false"
-installLauncher="false"
-installOptions="-r"
app=""
for arg in ${APP_ARGS[@]}; do
@@ -45,8 +43,8 @@ for arg in ${APP_ARGS[@]}; do
done
if [[ ${app} == "" ]]; then
- echo "defaulting to installing SampleApp."
- app="SampleApp"
+ echo "defaulting to installing sample_app."
+ app="sample_app"
fi
@@ -56,6 +54,8 @@ then
$ADB ${DEVICE_SERIAL} uninstall com.skia > /dev/null
fi
-echo "Installing ${app} from ${SKIA_OUT}/${BUILDTYPE}"
-$ADB ${DEVICE_SERIAL} install ${installOptions} ${SKIA_OUT}/${BUILDTYPE}/android/${app}/bin/${app}.apk
+BUILD_TYPE_LC=$(echo $BUILDTYPE | tr "[:upper:]" "[:lower:]")
+
+echo "Installing ${app} from ${app}/build/outputs/apk/${app}-${ANDROID_ARCH}-${BUILD_TYPE_LC}.apk"
+$ADB ${DEVICE_SERIAL} install -r ${SCRIPT_DIR}/../apps/${app}/build/outputs/apk/${app}-${ANDROID_ARCH}-${BUILD_TYPE_LC}.apk
diff --git a/platform_tools/android/bin/android_setup.sh b/platform_tools/android/bin/android_setup.sh
index 94ae87f9a1..5396294c7f 100755
--- a/platform_tools/android/bin/android_setup.sh
+++ b/platform_tools/android/bin/android_setup.sh
@@ -70,6 +70,11 @@ if [ -z "$ANDROID_SDK_ROOT" ]; then
fi
fi
+if [ -z "$ANDROID_HOME" ]; then
+ echo "ANDROID_HOME not set so we are setting it to a default value of ANDROID_SDK_ROOT"
+ exportVar ANDROID_HOME $ANDROID_SDK_ROOT
+fi
+
# check to see that gclient sync ran successfully
THIRD_PARTY_EXTERNAL_DIR=${SCRIPT_DIR}/../third_party/externals
if [ ! -d "$THIRD_PARTY_EXTERNAL_DIR" ]; then
diff --git a/platform_tools/android/gyp/dependencies.gypi b/platform_tools/android/gyp/dependencies.gypi
index 8be6836f37..036abf2cc5 100644
--- a/platform_tools/android/gyp/dependencies.gypi
+++ b/platform_tools/android/gyp/dependencies.gypi
@@ -287,7 +287,7 @@
}],
],
'sources': [
- '../app/jni/com_skia_SkiaSampleRenderer.cpp',
+ '../apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.cpp',
],
},
},
@@ -320,8 +320,8 @@
'../../../tools/VisualBench/',
],
'sources': [
- '../visualbench/jni/SkOSWindow_AndroidNative.cpp',
- '../visualbench/jni/main.cpp',
+ '../apps/visualbench/src/main/jni/SkOSWindow_AndroidNative.cpp',
+ '../apps/visualbench/src/main/jni/main.cpp',
],
},
},
diff --git a/platform_tools/android/gyp/skia_android.gypi b/platform_tools/android/gyp/skia_android.gypi
index e8bf1c3150..6ffb49cd93 100644
--- a/platform_tools/android/gyp/skia_android.gypi
+++ b/platform_tools/android/gyp/skia_android.gypi
@@ -12,24 +12,31 @@
'conditions': [
[ 'skia_arch_type == "arm" and arm_version != 7', {
'android_arch%': "armeabi",
+ 'android_variant%': "arm",
}],
[ 'skia_arch_type == "arm" and arm_version == 7', {
'android_arch%': "armeabi-v7a",
+ 'android_variant%': "arm",
}],
[ 'skia_arch_type == "arm64"', {
'android_arch%': "arm64-v8a",
+ 'android_variant%': "arm64",
}],
[ 'skia_arch_type == "x86"', {
'android_arch%': "x86",
+ 'android_variant%': "x86",
}],
[ 'skia_arch_type == "x86_64"', {
'android_arch%': "x86_64",
+ 'android_variant%': "x86_64",
}],
[ 'skia_arch_type == "mips" and skia_arch_width == 32', {
'android_arch%': "mips",
+ 'android_variant%': "mips",
}],
[ 'skia_arch_type == "mips" and skia_arch_width == 64', {
'android_arch%': "mips64",
+ 'android_variant%': "mips64",
}],
],
},
@@ -48,7 +55,7 @@
# libraries to copy, this will cause an error in Make, but the app will
# still build.
{
- 'destination': '<(PRODUCT_DIR)/android/SampleApp/libs/<(android_arch)',
+ 'destination': '<(android_base)/apps/sample_app/src/main/libs/<(android_arch)',
'conditions': [
[ 'skia_shared_lib', {
'files': [
@@ -69,40 +76,25 @@
'dependencies': [
'CopySampleAppDeps',
],
- 'variables': {
- 'ANDROID_SDK_ROOT': '<!(echo $ANDROID_SDK_ROOT)',
- # the ninja generator treats PRODUCT_DIR as a relative path to the
- # gyp directory but android ant build wants a path relative to the
- # build.xml file so we do that adjustment here.
- 'ANDROID_OUT': '../../<(PRODUCT_DIR)/android/SampleApp'
- },
'actions': [
{
'action_name': 'SampleApp_apk',
'inputs': [
- '<(android_base)/app/AndroidManifest.xml',
- '<(android_base)/app/build.xml',
- '<(android_base)/app/project.properties',
- '<(android_base)/app/jni/com_skia_SkiaSampleRenderer.h',
- '<(android_base)/app/jni/com_skia_SkiaSampleRenderer.cpp',
- '<(android_base)/app/src/com/skia/SkiaSampleActivity.java',
- '<(android_base)/app/src/com/skia/SkiaSampleRenderer.java',
- '<(android_base)/app/src/com/skia/SkiaSampleView.java',
+ '<(android_base)/apps/sample_app/src/main/AndroidManifest.xml',
+ '<(android_base)/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.h',
+ '<(android_base)/apps/sample_app/src/main/jni/com_skia_SkiaSampleRenderer.cpp',
+ '<(android_base)/apps/sample_app/src/main/java/com/skia/SkiaSampleActivity.java',
+ '<(android_base)/apps/sample_app/src/main/java/com/skia/SkiaSampleRenderer.java',
+ '<(android_base)/apps/sample_app/src/main/java/com/skia/SkiaSampleView.java',
],
'outputs': [
- '<(PRODUCT_DIR)/../android/SampleApp/bin/SampleApp.apk',
+ '<(android_base)/apps/sample_app/build',
],
'action': [
- 'ant',
- '-quiet',
- '-f',
- '<(android_base)/app/build.xml',
- '-Dout.dir=<(ANDROID_OUT)/bin',
- '-Dgen.absolute.dir=<(ANDROID_OUT)/gen',
- '-Dnative.libs.absolute.dir=<(ANDROID_OUT)/libs',
- '-Dout.final.file=<(ANDROID_OUT)/bin/SampleApp.apk',
- '-Dsdk.dir=<(ANDROID_SDK_ROOT)',
- 'debug',
+ '<(android_base)/apps/gradlew',
+ ':sample_app:assemble<(android_variant)Debug',
+ '-p<(android_base)/apps/sample_app',
+ '-PsuppressNativeBuild',
],
},
],
@@ -122,7 +114,7 @@
# libraries to copy, this will cause an error in Make, but the app will
# still build.
{
- 'destination': '<(PRODUCT_DIR)/android/VisualBench/libs/<(android_arch)',
+ 'destination': '<(android_base)/apps/visualbench/src/main/libs/<(android_arch)',
'conditions': [
[ 'skia_shared_lib', {
'files': [
@@ -143,36 +135,21 @@
'dependencies': [
'CopyVisualBenchDeps',
],
- 'variables': {
- 'ANDROID_SDK_ROOT': '<!(echo $ANDROID_SDK_ROOT)',
- # the ninja generator treats PRODUCT_DIR as a relative path to the
- # gyp directory but android ant build wants a path relative to the
- # build.xml file so we do that adjustment here.
- 'ANDROID_OUT': '../../<(PRODUCT_DIR)/android/VisualBench/'
- },
'actions': [
{
'action_name': 'SkiaVisualBench_apk',
'inputs': [
- '<(android_base)/visualbench/AndroidManifest.xml',
- '<(android_base)/visualbench/build.xml',
- '<(android_base)/visualbench/project.properties',
- '<(android_base)/visualbench/src/com/skia/VisualBenchActivity.java',
+ '<(android_base)/apps/visualbench/src/main/AndroidManifest.xml',
+ '<(android_base)/apps/visualbench/src/main/java/com/skia/VisualBenchActivity.java',
],
'outputs': [
- '<(PRODUCT_DIR)/../android/VisualBench/bin/VisualBench.apk',
+ '<(android_base)/apps/visualbench/build',
],
'action': [
- 'ant',
- '-quiet',
- '-f',
- '<(android_base)/visualbench/build.xml',
- '-Dout.dir=<(ANDROID_OUT)/bin',
- '-Dgen.absolute.dir=<(ANDROID_OUT)/gen',
- '-Dnative.libs.absolute.dir=<(ANDROID_OUT)/libs',
- '-Dout.final.file=<(ANDROID_OUT)/bin/VisualBench.apk',
- '-Dsdk.dir=<(ANDROID_SDK_ROOT)',
- 'debug',
+ '<(android_base)/apps/gradlew',
+ ':visualbench:assemble<(android_variant)Debug',
+ '-p<(android_base)/apps/visualbench',
+ '-PsuppressNativeBuild',
],
},
],
diff --git a/platform_tools/android/visualbench/build.xml b/platform_tools/android/visualbench/build.xml
deleted file mode 100644
index 61df264754..0000000000
--- a/platform_tools/android/visualbench/build.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="VisualBench" default="help">
-
- <!-- The local.properties file is created and updated by the 'android' tool.
- It contains the path to the SDK. It should *NOT* be checked into
- Version Control Systems. -->
- <property file="local.properties" />
-
- <!-- The project.properties file is created and updated by the 'android'
- tool, as well as ADT.
-
- This contains project specific properties such as project target, and library
- dependencies. Lower level build properties are stored in ant.properties
- (or in .classpath for Eclipse projects).
-
- This file is an integral part of the build system for your
- application and should be checked into Version Control Systems. -->
- <loadproperties srcFile="project.properties" />
-
- <!-- quick check on sdk.dir -->
- <fail
- message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
- unless="sdk.dir"
- />
-
- <!--
- Import per project custom build rules if present at the root of the project.
- This is the place to put custom intermediary targets such as:
- -pre-build
- -pre-compile
- -post-compile (This is typically used for code obfuscation.
- Compiled code location: ${out.classes.absolute.dir}
- If this is not done in place, override ${out.dex.input.absolute.dir})
- -post-package
- -post-build
- -pre-clean
- -->
- <import file="custom_rules.xml" optional="true" />
-
- <!-- Import the actual build file.
-
- To customize existing targets, there are two options:
- - Customize only one target:
- - copy/paste the target into this file, *before* the
- <import> task.
- - customize it to your needs.
- - Customize the whole content of build.xml
- - copy/paste the content of the rules files (minus the top node)
- into this file, replacing the <import> task.
- - customize to your needs.
-
- ***********************
- ****** IMPORTANT ******
- ***********************
- In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
- in order to avoid having your file be overridden by tools such as "android update project"
- -->
- <!-- version-tag: 1 -->
- <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>
diff --git a/platform_tools/android/visualbench/project.properties b/platform_tools/android/visualbench/project.properties
deleted file mode 100644
index 4ab125693c..0000000000
--- a/platform_tools/android/visualbench/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system edit
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-#
-# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
-#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
-
-# Project target.
-target=android-19
diff --git a/site/user/quick/android.md b/site/user/quick/android.md
index 44e3161c40..57d45d5259 100644
--- a/site/user/quick/android.md
+++ b/site/user/quick/android.md
@@ -10,20 +10,12 @@ _Currently we only support building Skia for Android on a Linux or Mac host! In
The following libraries/utilities are required in addition to those needed for a standard skia checkout:
- * Apache Ant
* The Android SDK: http://developer.android.com/sdk/
-~~~~
-$ sudo apt-get install ant git
-~~~~
-
Check out the source code
-------------------------
-Follow the instructions [here](../download) for downloading the Skia source. Modify .gclient to add the following line to
-the bottom, and then run gclient sync again:
-
- target_os = ["android"]
+Follow the instructions [here](../download) for downloading the Skia source.
Inside your Skia checkout, `platform_tools/android` contains the Android setup
scripts, Android specific dependencies, and the Android Sample App.
@@ -63,6 +55,7 @@ the -d option plus any of the options or arguments you would normally pass to
ninja (see descriptions of some of the other flags here).
export ANDROID_SDK_ROOT=/path/to/android/sdk
+ export ANDROID_HOME=/path/to/android/sdk
export PATH=$PATH:/path/to/depot_tools
cd skia
@@ -135,7 +128,7 @@ Build and run SampleApp
The SampleApp on Android provides a simple UI for viewing sample slides and gm images.
- BUILDTYPE=Debug ./platform_tools/android/bin/android_ninja -d $TARGET_DEVICE
+ BUILDTYPE=Debug ./platform_tools/android/bin/android_ninja -d $TARGET_DEVICE SampleApp_APK
Then, install the app onto the device:
@@ -155,6 +148,28 @@ params...
--resourcePath /data/local/tmp/skia_resoures
--pictureDir /data/local/tmp/skia_skp
+
+Android Studio Support
+-----------------------
+
+You can also build and run SampleApp (and some other experimental apps) using Android
+Studio. To create the project either select "import project" from the quickstart
+screen or use File -> Open. In both cases you'll need to select ./platform_tools/android/apps
+as the root directory of your project.
+
+Finally to be able to build within Android studio it needs to know the path to
+ninja so you will need to add a properties file and populate it with the path
+to depot_tools. The syntax and location of that file is...
+
+ #
+ # file location: ./platform_tools/android/apps/gradle.properties
+ #
+ depot_tools.dir=<path_to_depot_tools>
+
+That should be all the setup you need. You should now be able to build and deploy
+SampleApp on ARM, Intel, and MIPS devices.
+
+
Build tools
-----------