Skip to content

Commit

Permalink
Adjust ResourceClassGenerator to match AndroidBuilder#processResources
Browse files Browse the repository at this point in the history
  • Loading branch information
hameno committed Jan 12, 2017
1 parent bef5579 commit 1de7a15
Showing 1 changed file with 34 additions and 18 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
package com.simpligility.maven.plugins.android.phase01generatesources;

import com.android.builder.core.AndroidBuilder;
import com.android.builder.core.DefaultManifestParser;

import com.android.builder.internal.aapt.Aapt;
import com.android.builder.internal.aapt.AaptPackageConfig;
import com.android.builder.symbols.RGeneration;
import com.android.builder.symbols.SymbolIo;
import com.android.builder.symbols.SymbolTable;
import com.android.sdklib.internal.build.SymbolLoader;
import com.android.sdklib.internal.build.SymbolWriter;
import com.android.utils.ILogger;
import com.google.common.base.Splitter;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import org.apache.maven.artifact.Artifact;
Expand All @@ -29,8 +35,8 @@ final class ResourceClassGenerator
private final Log log;
private final ILogger androidUtilsLog;

ResourceClassGenerator( GenerateSourcesMojo mojo, File targetDirectory,
File genDirectory )
ResourceClassGenerator(final GenerateSourcesMojo mojo, final File targetDirectory,
final File genDirectory )
{
this.mojo = mojo;
this.targetDirectory = targetDirectory;
Expand All @@ -39,10 +45,17 @@ final class ResourceClassGenerator
this.androidUtilsLog = new MavenILogger( log );
}

public void generateLibraryRs( Set<Artifact> libraries, String libraryType ) throws MojoExecutionException
/**
* see {@link AndroidBuilder#processResources(Aapt, AaptPackageConfig.Builder, boolean)}
*
* @param libraries
* @param libraryType
* @throws MojoExecutionException
*/
public void generateLibraryRs(final Set<Artifact> libraries, final String libraryType ) throws MojoExecutionException
{
// list of all the symbol loaders per package names.
final Multimap<String, SymbolLoader> libMap = ArrayListMultimap.create();
final Multimap<String, SymbolTable> libMap = ArrayListMultimap.create();

for ( final Artifact lib : libraries )
{
Expand All @@ -56,7 +69,7 @@ public void generateLibraryRs( Set<Artifact> libraries, String libraryType ) thr
log.debug( "Reading R for " + packageName + " at " + rFile );

// store these symbols by associating them with the package name.
final SymbolLoader libSymbols = loadSymbols( rFile );
final SymbolTable libSymbols = SymbolIo.read(rFile);
libMap.put( packageName, libSymbols );
}
}
Expand All @@ -68,45 +81,48 @@ public void generateLibraryRs( Set<Artifact> libraries, String libraryType ) thr

// load the full resources values from the R.txt calculated for the project.
final File projectR = new File( targetDirectory, "R.txt" );
final SymbolLoader fullSymbolValues = loadSymbols( projectR );
final SymbolTable mainSymbols = SymbolIo.read(projectR);

// now loop on all the package name, merge all the symbols to write, and write them
for ( final String packageName : libMap.keySet() )
{
log.info( "Generating R file for " + libraryType + " : " + packageName );
final Collection<SymbolLoader> symbols = libMap.get( packageName );

final SymbolWriter writer = new SymbolWriter(
genDirectory.getAbsolutePath(), packageName, fullSymbolValues );
for ( SymbolLoader symbolLoader : symbols )
{
writer.addSymbolsToWrite( symbolLoader );
final Collection<SymbolTable> symbols = libMap.get( packageName );

final Splitter splitter = Splitter.on('.');
final Iterable<String> folders = splitter.split(packageName);
File file = new File(genDirectory.getAbsolutePath());
for (final String folder : folders) {
file = new File(file, folder);
}
writeSymbols( writer, packageName );
file.mkdirs();
log.info( "File: " + file);
RGeneration.generateRForLibraries(mainSymbols, symbols, file, false);
}
}

private SymbolLoader loadSymbols( File file ) throws MojoExecutionException
private SymbolLoader loadSymbols(final File file ) throws MojoExecutionException
{
final SymbolLoader libSymbols = new SymbolLoader( file );
try
{
libSymbols.load();
}
catch ( IOException e )
catch ( final IOException e )
{
throw new MojoExecutionException( "Could not load " + file, e );
}
return libSymbols;
}

private void writeSymbols( SymbolWriter writer, String packageName ) throws MojoExecutionException
private void writeSymbols(final SymbolWriter writer, final String packageName ) throws MojoExecutionException
{
try
{
writer.write();
}
catch ( IOException e )
catch ( final IOException e )
{
throw new MojoExecutionException( "Could not write R for " + packageName, e );
}
Expand Down

0 comments on commit 1de7a15

Please sign in to comment.