diff options
author | Xavier Ducrohet <xav@android.com> | 2012-09-11 12:35:30 -0700 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2012-09-26 13:48:16 -0700 |
commit | d137d790fc023d0956397804ee2e856bd9453d22 (patch) | |
tree | f63c9ab4087ec7292e9fdb74864fa12ff5118e80 /gradle/src | |
parent | 27973d74cf31a98eb68c6e5a8322fb4332f046fb (diff) | |
download | build-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')
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()) |