aboutsummaryrefslogtreecommitdiff
path: root/gradle/src
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2012-09-11 12:35:30 -0700
committerXavier Ducrohet <xav@android.com>2012-09-26 13:48:16 -0700
commitd137d790fc023d0956397804ee2e856bd9453d22 (patch)
treef63c9ab4087ec7292e9fdb74864fa12ff5118e80 /gradle/src
parent27973d74cf31a98eb68c6e5a8322fb4332f046fb (diff)
downloadbuild-d137d790fc023d0956397804ee2e856bd9453d22.tar.gz
Generate smaller R classes for libraries.
Using the new --output-text-symbols from aapt the build system now generates the R class for libraries manually based on the symbols exported by the libraries and the final values computed by aapt when using all the resource folders. Because only R.java is concerned, the Manifest class is now included in the library jar file. Also added a new test apps that uses instrumentation to verify the build system. Change-Id: I0e9ba124cfba729f4ab8021b440b1ac70c5d1b80
Diffstat (limited to 'gradle/src')
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy5
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AndroidLibraryPlugin.groovy13
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/AndroidLogger.groovy27
-rw-r--r--gradle/src/main/groovy/com/android/build/gradle/ProcessResourcesTask.groovy4
4 files changed, 38 insertions, 11 deletions
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
index 85e5d18..454595b 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AndroidBasePlugin.groovy
@@ -228,10 +228,13 @@ abstract class AndroidBasePlugin {
processResources.variant = variant
processResources.configObjects = variant.configObjects
processResources.conventionMapping.manifestFile = { processManifestTask.processedManifest }
- // TODO: unify with generateBuilderConfig, and compileAidl somehow?
+ // TODO: unify with generateBuilderConfig, compileAidl, and library packaging somehow?
processResources.conventionMapping.sourceOutputDir = {
project.file("$project.buildDir/source/$variant.dirName")
}
+ processResources.conventionMapping.textSymbolDir = {
+ project.file("$project.buildDir/symbols/$variant.dirName")
+ }
processResources.conventionMapping.packageFile = {
project.file(
"$project.buildDir/libs/${project.archivesBaseName}-${variant.baseName}.ap_")
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AndroidLibraryPlugin.groovy b/gradle/src/main/groovy/com/android/build/gradle/AndroidLibraryPlugin.groovy
index 3217612..e64ae45 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AndroidLibraryPlugin.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AndroidLibraryPlugin.groovy
@@ -126,7 +126,7 @@ class AndroidLibraryPlugin extends AndroidBasePlugin implements Plugin<Project>
compileAidl)
// jar the classes.
- Jar jar = project.tasks.add("${buildTypeData.buildType.name}Jar", Jar);
+ Jar jar = project.tasks.add("package${buildTypeData.buildType.name}Jar", Jar);
jar.from(variant.compileTask.outputs);
// TODO: replace with proper ProcessResources task with properly configured SourceDirectorySet
jar.from(defaultConfigData.androidSourceSet.javaResources);
@@ -137,8 +137,6 @@ class AndroidLibraryPlugin extends AndroidBasePlugin implements Plugin<Project>
String packageName = variantConfig.getPackageFromManifest().replace('.', '/');
jar.exclude(packageName + "/R.class")
jar.exclude(packageName + "/R\$*.class")
- jar.exclude(packageName + "/Manifest.class")
- jar.exclude(packageName + "/Manifest\$*.class")
// package the resources into the bundle folder
Copy packageRes = project.tasks.add("package${variant.name}Res", Copy)
@@ -151,13 +149,18 @@ class AndroidLibraryPlugin extends AndroidBasePlugin implements Plugin<Project>
// package the aidl files into the bundle folder
Copy packageAidl = project.tasks.add("package${variant.name}Aidl", Copy)
// packageAidl from 3 sources. the order is important to make sure the override works well.
- // TODO: fix the case of values -- need to merge the XML!
packageAidl.from(defaultConfigData.androidSourceSet.aidlSource,
buildTypeData.androidSourceSet.aidlSource)
packageAidl.into(project.file("$project.buildDir/$DIR_BUNDLES/${variant.dirName}/aidl"))
+ // package the resources into the bundle folder
+ Copy packageSymbol = project.tasks.add("package${variant.name}Symbols", Copy)
+ packageSymbol.dependsOn processResources
+ packageSymbol.from(processResources.textSymbolDir)
+ packageSymbol.into(project.file("$project.buildDir/$DIR_BUNDLES/${variant.dirName}"))
+
Zip bundle = project.tasks.add("bundle${variant.name}", Zip)
- bundle.dependsOn jar, packageRes, packageAidl
+ bundle.dependsOn jar, packageRes, packageAidl, packageSymbol
bundle.setDescription("Assembles a bundle containing the library in ${variant.name}.");
bundle.destinationDir = project.file("$project.buildDir/libs")
bundle.extension = "alb"
diff --git a/gradle/src/main/groovy/com/android/build/gradle/AndroidLogger.groovy b/gradle/src/main/groovy/com/android/build/gradle/AndroidLogger.groovy
index 9cacdbb..2d7f87f 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/AndroidLogger.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/AndroidLogger.groovy
@@ -32,26 +32,43 @@ class AndroidLogger implements ILogger {
@Override
void error(Throwable throwable, String s, Object... objects) {
+ if (objects != null && objects.length > 0) {
+ s = String.format(s, objects)
+ }
+
if (throwable == null) {
- logger.log(LogLevel.ERROR, String.format(s, objects))
+ logger.log(LogLevel.ERROR, s)
} else {
- logger.log(LogLevel.ERROR, String.format(s, objects), throwable)
+ logger.log(LogLevel.ERROR, s, throwable)
}
}
@Override
void warning(String s, Object... objects) {
- logger.log(LogLevel.WARN, String.format(s, objects))
+ if (objects == null || objects.length == 0) {
+ logger.log(LogLevel.WARN, s)
+ } else {
+ logger.log(LogLevel.WARN, String.format(s, objects))
+ }
}
@Override
void info(String s, Object... objects) {
- logger.log(LogLevel.INFO, String.format(s, objects))
+ if (objects == null || objects.length == 0) {
+ logger.log(LogLevel.INFO, s)
+ } else {
+ logger.log(LogLevel.INFO, String.format(s, objects))
+ }
}
@Override
void verbose(String s, Object... objects) {
- logger.log(LogLevel.INFO, String.format(s, objects))
+ if (objects == null || objects.length == 0) {
+ logger.log(LogLevel.INFO, s)
+
+ } else {
+ logger.log(LogLevel.INFO, String.format(s, objects))
+ }
}
}
diff --git a/gradle/src/main/groovy/com/android/build/gradle/ProcessResourcesTask.groovy b/gradle/src/main/groovy/com/android/build/gradle/ProcessResourcesTask.groovy
index f0e2d7a..2422a15 100644
--- a/gradle/src/main/groovy/com/android/build/gradle/ProcessResourcesTask.groovy
+++ b/gradle/src/main/groovy/com/android/build/gradle/ProcessResourcesTask.groovy
@@ -39,6 +39,9 @@ class ProcessResourcesTask extends BaseAndroidTask {
@OutputDirectory @Optional
File sourceOutputDir
+ @OutputDirectory @Optional
+ File textSymbolDir
+
@OutputFile @Optional
File packageFile
@@ -56,6 +59,7 @@ class ProcessResourcesTask extends BaseAndroidTask {
getCrunchDir()?.absolutePath,
getResDirectories(),
getSourceOutputDir()?.absolutePath,
+ getTextSymbolDir()?.absolutePath,
getPackageFile()?.absolutePath,
getProguardFile()?.absolutePath,
getAaptOptions())