Sorry for the lack of documentation in this area. Things are also very much
subject to changes based on feedback.

First of all you need to understand that this API is only about updating
the model that the IDE sees. It has no impact on the generated APK.

the idea is to do the following:
- register a new type of artifact
- for each variant, register a new artifact of this type, with source sets,
and associated task.
Then Studio (not 0.4 yet, but hopefully 0.4.1) will allow you to switch
between the existing artifacts (main, instrumentTest) and the new one.

Let's look at the API.

First to register the artifact:

void registerArtifactType(@NonNull String name, boolean isTest, int
artifactType);

The name is a unique name, and will show up in the UI. For your example
"robolectric" is fine.
if isTest is true then the source folders of the artifact will setup as
test source folder, extending the main artifact source folders. If false,
they'll replace the main artifact as "main" source folders.
the artifact type is Java or Android (only Java supported now), so use
com.android.builder.model.ArtifactMetaData.TYPE_JAVA

Then you register source folders.Look at the sample.

You can register folders specific to build types and flavors, but strangely
not a common one (usually src/test). This is stupid! more on this later.

Then you add an actual artifact. You need to associate it with a variant.
The source folder associated earlier are automatically associated with
variants that use those build types or flavors.
When registering an artifact you can also specify a variant-specific source
folder.

    public void registerJavaArtifact(
            @NonNull String name,
            @NonNull BaseVariant variant,
            @NonNull String assembleTaskName,
            @NonNull String javaCompileTaskName,
            @NonNull File classesFolder,
            @Nullable SourceProvider sourceProvider);


When I designed this I looked at Jake Wharton's robolectric plugin (there
are too many different robolectric plugins out there! </rant>), and
realized that he's creating a single source folders with multiple path
(src/test/java, src/debugTest/java, etc...), so in this case you'd use this
source folder as the variant specific one.
Note that the build type/flavor specific folders can't really be used now
because Gradle doesn't like combining multiple source sets into a single
binary yet (they are working on fixing this which will allow us to start
using their default source sets instead of custom ones).

Your comment about the SourceProvider is expected. We need this to be
generic Java/Android so it contains everything. If you use a default Gradle
sourceSet you can use android.wrapJavaSourceSet(theSourceSet) to get a
SourceProvider from a java source set.

Stupidly (again), the dependency information is missing. I'll add this
shortly. Note that again you can't really use this before Studio is updated
to use this new model. I wanted to get this out of the door to get
feedback. I intend to rev quickly to address issues.

hope this helps.
Xav

-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to