Fix setting up classpath with jars from libraries.
Xavier Ducrohet [Fri, 14 Sep 2012 00:05:09 +0000 (17:05 -0700)]
Change-Id: I5dfa2ee3d21c748450b3ebaf2316fdf8d757f68e

builder/src/main/java/com/android/builder/VariantConfiguration.java
testapps/tictactoe/app/build.gradle
testapps/tictactoe/lib/src/main/AndroidManifest.xml

index 33507de..a074858 100644 (file)
@@ -26,6 +26,9 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
 /**
  * A Variant configuration.
  */
@@ -37,6 +40,7 @@ public class VariantConfiguration {
     private final SourceSet mDefaultSourceSet;
 
     private final BuildType mBuildType;
+    /** SourceSet for the BuildType. Can be null */
     private final SourceSet mBuildTypeSourceSet;
 
     private final List<ProductFlavor> mFlavorConfigs = new ArrayList<ProductFlavor>();
@@ -112,19 +116,15 @@ public class VariantConfiguration {
      */
     public VariantConfiguration(
             @NonNull ProductFlavor defaultConfig, @NonNull SourceSet defaultSourceSet,
-            @NonNull BuildType buildType, @NonNull SourceSet buildTypeSourceSet,
+            @NonNull BuildType buildType, SourceSet buildTypeSourceSet,
             @NonNull Type type, @Nullable VariantConfiguration testedConfig) {
-        mDefaultConfig = defaultConfig;
-        mDefaultSourceSet = defaultSourceSet;
-        mBuildType = buildType;
+        mDefaultConfig = checkNotNull(defaultConfig);
+        mDefaultSourceSet = checkNotNull(defaultSourceSet);
+        mBuildType = checkNotNull(buildType);
         mBuildTypeSourceSet = buildTypeSourceSet;
-        mType = type;
+        mType = checkNotNull(type);
         mTestedConfig = testedConfig;
-
-        assert mType != Type.TEST || mTestedConfig != null;
-        assert mTestedConfig == null ||
-                mTestedConfig.mType != Type.LIBRARY ||
-                mTestedConfig.mOutput != null;
+        checkState(mType != Type.TEST || mTestedConfig != null);
 
         mMergedFlavor = mDefaultConfig;
 
@@ -224,6 +224,9 @@ public class VariantConfiguration {
         return mBuildType;
     }
 
+    /**
+     * The SourceSet for the BuildType. Can be null.
+     */
     public SourceSet getBuildTypeSourceSet() {
         return mBuildTypeSourceSet;
     }
@@ -410,9 +413,11 @@ public class VariantConfiguration {
             inputs.add(defaultManifest);
         }
 
-        File typeLocation = mBuildTypeSourceSet.getAndroidManifest();
-        if (typeLocation != null && typeLocation.isFile()) {
-            inputs.add(typeLocation);
+        if (mBuildTypeSourceSet != null) {
+            File typeLocation = mBuildTypeSourceSet.getAndroidManifest();
+            if (typeLocation != null && typeLocation.isFile()) {
+                inputs.add(typeLocation);
+            }
         }
 
         for (SourceSet sourceSet : mFlavorSourceSets) {
@@ -512,6 +517,10 @@ public class VariantConfiguration {
             }
         }
 
+        for (AndroidDependency lib : mFlatLibraryProjects) {
+            classpath.add(lib.getJarFile());
+        }
+
         if (mType == Type.TEST && mTestedConfig.mType == Type.LIBRARY) {
             // the tested library is added to the main app so we need its compile classpath as well.
             // which starts with its output
index 1faee70..2cfde9c 100644 (file)
@@ -4,5 +4,9 @@ apply plugin: 'android'
 // A basic Android application split over a library and a main project.
 //
 dependencies {
-//    compile project(':lib')
+    compile project(':lib')
+}
+
+android {
+       target = "android-15"
 }
index ee934a5..7894def 100755 (executable)
@@ -18,6 +18,6 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="com.example.android.tictactoe.library">
     <application>
-        <activity android:name="GameActivity" />
+        <activity android:name="com.example.android.tictactoe.library.GameActivity" />
     </application>
 </manifest>