aboutsummaryrefslogtreecommitdiff
path: root/builder
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2013-06-21 19:27:56 -0700
committerXavier Ducrohet <xav@android.com>2013-06-29 14:38:13 -0700
commit60a5b2383dc6c67f85edfdf0d0fd33db6ec9e715 (patch)
treeaec6a9184f3ae9e59756883a30f8c0c57306c906 /builder
parent6dd1c8675adeaaa58cd0e9a8bc1fb779bd8fd331 (diff)
downloadbuild-60a5b2383dc6c67f85edfdf0d0fd33db6ec9e715.tar.gz
Improve model.
Since we are already changing the model in non compatible way, now is a good time to fix some issues. Refactoring all the properties of an artifact out of variant and into its own ArtifactInfo class, so that we can have both the main and test artifact in the variant in an elegant way. Also adding SigningConfig info to enable the creation of export wizard from the IDE. Change-Id: Ib6c48873ba0e5c5a61bc1e79b00a90e2be83652f
Diffstat (limited to 'builder')
-rw-r--r--builder/src/main/java/com/android/builder/AaptOptions.java34
-rw-r--r--builder/src/main/java/com/android/builder/AndroidBuilder.java11
-rw-r--r--builder/src/main/java/com/android/builder/DefaultBuildType.java2
-rw-r--r--builder/src/main/java/com/android/builder/DefaultProductFlavor.java2
-rw-r--r--builder/src/main/java/com/android/builder/VariantConfiguration.java20
-rw-r--r--builder/src/main/java/com/android/builder/signing/DefaultSigningConfig.java (renamed from builder/src/main/java/com/android/builder/signing/SigningConfig.java)51
-rw-r--r--builder/src/main/java/com/android/builder/signing/KeystoreHelper.java9
-rw-r--r--builder/src/main/java/com/android/builder/testing/TestData.java12
-rw-r--r--builder/src/main/java/com/android/builder/testing/TestRunner.java3
-rw-r--r--builder/src/test/java/com/android/builder/VariantConfigurationTest.java7
-rwxr-xr-xbuilder/src/test/java/com/android/builder/signing/KeyStoreHelperTest.java2
11 files changed, 89 insertions, 64 deletions
diff --git a/builder/src/main/java/com/android/builder/AaptOptions.java b/builder/src/main/java/com/android/builder/AaptOptions.java
deleted file mode 100644
index 4b2bd28..0000000
--- a/builder/src/main/java/com/android/builder/AaptOptions.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.builder;
-
-import java.util.List;
-
-/**
- * Options for aapt.
- */
-public interface AaptOptions {
- /**
- * Returns the value for the --ignore-assets option, or null
- */
- String getIgnoreAssets();
-
- /**
- * Returns the list of values for the -0 (disabled compression) option, or null
- */
- List<String> getNoCompress();
-}
diff --git a/builder/src/main/java/com/android/builder/AndroidBuilder.java b/builder/src/main/java/com/android/builder/AndroidBuilder.java
index bfbfdc8..511e2b1 100644
--- a/builder/src/main/java/com/android/builder/AndroidBuilder.java
+++ b/builder/src/main/java/com/android/builder/AndroidBuilder.java
@@ -33,6 +33,8 @@ import com.android.builder.internal.compiler.LeafFolderGatherer;
import com.android.builder.internal.compiler.SourceSearcher;
import com.android.builder.internal.packaging.JavaResourceProcessor;
import com.android.builder.internal.packaging.Packager;
+import com.android.builder.model.AaptOptions;
+import com.android.builder.model.SigningConfig;
import com.android.builder.packaging.DuplicateFileException;
import com.android.builder.packaging.PackagerException;
import com.android.builder.packaging.SealedPackageException;
@@ -40,7 +42,6 @@ import com.android.builder.packaging.SigningException;
import com.android.builder.signing.CertificateInfo;
import com.android.builder.signing.KeystoreHelper;
import com.android.builder.signing.KeytoolException;
-import com.android.builder.signing.SigningConfig;
import com.android.ide.common.internal.AaptRunner;
import com.android.ide.common.internal.CommandLineRunner;
import com.android.manifmerger.ManifestMerger;
@@ -80,10 +81,10 @@ import static com.google.common.base.Preconditions.checkNotNull;
* {@link #generateBuildConfig(String, boolean, java.util.List, String)}
* {@link #processManifest(java.io.File, java.util.List, java.util.List, String, int, String, int, int, String)}
* {@link #processTestManifest(String, int, int, String, String, java.util.List, String)}
- * {@link #processResources(java.io.File, java.io.File, java.io.File, java.util.List, String, String, String, String, String, com.android.builder.VariantConfiguration.Type, boolean, AaptOptions)}
+ * {@link #processResources(java.io.File, java.io.File, java.io.File, java.util.List, String, String, String, String, String, com.android.builder.VariantConfiguration.Type, boolean, com.android.builder.model.AaptOptions)}
* {@link #compileAllAidlFiles(java.util.List, java.io.File, java.util.List, com.android.builder.compiling.DependencyFileProcessor)}
* {@link #convertByteCode(Iterable, Iterable, File, String, DexOptions, boolean)}
- * {@link #packageApk(String, String, java.util.List, String, String, boolean, com.android.builder.signing.SigningConfig, String)}
+ * {@link #packageApk(String, String, java.util.List, String, String, boolean, SigningConfig, String)}
*
* Java compilation is not handled but the builder provides the bootclasspath with
* {@link #getBootClasspath(SdkParser)}.
@@ -489,7 +490,7 @@ public class AndroidBuilder {
* @param proguardOutput optional filepath for proguard file to generate
* @param type the type of the variant being built
* @param debuggable whether the app is debuggable
- * @param options the {@link AaptOptions}
+ * @param options the {@link com.android.builder.model.AaptOptions}
*
*
* @throws IOException
@@ -507,7 +508,7 @@ public class AndroidBuilder {
@Nullable String proguardOutput,
VariantConfiguration.Type type,
boolean debuggable,
- @NonNull AaptOptions options)
+ @NonNull AaptOptions options)
throws IOException, InterruptedException {
checkNotNull(manifestFile, "manifestFile cannot be null.");
diff --git a/builder/src/main/java/com/android/builder/DefaultBuildType.java b/builder/src/main/java/com/android/builder/DefaultBuildType.java
index 3b076dd..2f75eb0 100644
--- a/builder/src/main/java/com/android/builder/DefaultBuildType.java
+++ b/builder/src/main/java/com/android/builder/DefaultBuildType.java
@@ -20,7 +20,7 @@ import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.builder.internal.BuildConfigImpl;
import com.android.builder.model.BuildType;
-import com.android.builder.signing.SigningConfig;
+import com.android.builder.model.SigningConfig;
import com.google.common.base.Objects;
public class DefaultBuildType extends BuildConfigImpl implements BuildType {
diff --git a/builder/src/main/java/com/android/builder/DefaultProductFlavor.java b/builder/src/main/java/com/android/builder/DefaultProductFlavor.java
index a626842..f7520ca 100644
--- a/builder/src/main/java/com/android/builder/DefaultProductFlavor.java
+++ b/builder/src/main/java/com/android/builder/DefaultProductFlavor.java
@@ -20,7 +20,7 @@ import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.builder.internal.BuildConfigImpl;
import com.android.builder.model.ProductFlavor;
-import com.android.builder.signing.SigningConfig;
+import com.android.builder.model.SigningConfig;
import com.google.common.base.Objects;
/**
diff --git a/builder/src/main/java/com/android/builder/VariantConfiguration.java b/builder/src/main/java/com/android/builder/VariantConfiguration.java
index 14db3ea..b4e6516 100644
--- a/builder/src/main/java/com/android/builder/VariantConfiguration.java
+++ b/builder/src/main/java/com/android/builder/VariantConfiguration.java
@@ -22,8 +22,8 @@ import com.android.annotations.VisibleForTesting;
import com.android.builder.dependency.DependencyContainer;
import com.android.builder.dependency.JarDependency;
import com.android.builder.dependency.LibraryDependency;
+import com.android.builder.model.SigningConfig;
import com.android.builder.model.SourceProvider;
-import com.android.builder.signing.SigningConfig;
import com.android.builder.testing.TestData;
import com.android.ide.common.res2.AssetSet;
import com.android.ide.common.res2.ResourceSet;
@@ -31,7 +31,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.io.File;
-import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -361,24 +360,32 @@ public class VariantConfiguration implements TestData {
* @return the package
*/
@Override
- @Nullable
+ @NonNull
public String getPackageName() {
String packageName;
if (mType == Type.TEST) {
+ assert mTestedConfig != null;
+
packageName = mMergedFlavor.getTestPackageName();
if (packageName == null) {
String testedPackage = mTestedConfig.getPackageName();
-
packageName = testedPackage + ".test";
}
} else {
+ // first get package override.
packageName = getPackageOverride();
+ // if it's null, this means we just need the default package
+ // from the manifest since both flavor and build type do nothing.
if (packageName == null) {
packageName = getPackageFromManifest();
}
}
+ if (packageName == null) {
+ throw new RuntimeException("Failed get query package name for " + mDebugName);
+ }
+
return packageName;
}
@@ -386,6 +393,7 @@ public class VariantConfiguration implements TestData {
@Nullable
public String getTestedPackageName() {
if (mType == Type.TEST) {
+ assert mTestedConfig != null;
if (mTestedConfig.mType == Type.LIBRARY) {
return getPackageName();
} else {
@@ -399,6 +407,7 @@ public class VariantConfiguration implements TestData {
/**
* Returns the package override values coming from the Product Flavor and/or the Build Type.
* If the package is not overridden then this returns null.
+ *
* @return the package override or null
*/
@Nullable
@@ -463,10 +472,11 @@ public class VariantConfiguration implements TestData {
}
/**
- * Reads the package name from the manifest.
+ * Reads the package name from the manifest. This is unmodified by the build type.
*/
@Nullable
public String getPackageFromManifest() {
+ assert mType != Type.TEST;
File manifestLocation = mDefaultSourceProvider.getManifestFile();
return sManifestParser.getPackage(manifestLocation);
}
diff --git a/builder/src/main/java/com/android/builder/signing/SigningConfig.java b/builder/src/main/java/com/android/builder/signing/DefaultSigningConfig.java
index fdd25d0..ff47542 100644
--- a/builder/src/main/java/com/android/builder/signing/SigningConfig.java
+++ b/builder/src/main/java/com/android/builder/signing/DefaultSigningConfig.java
@@ -16,6 +16,9 @@
package com.android.builder.signing;
+import com.android.annotations.NonNull;
+import com.android.annotations.Nullable;
+import com.android.builder.model.SigningConfig;
import com.android.prefs.AndroidLocation.AndroidLocationException;
import com.google.common.base.Objects;
@@ -26,11 +29,13 @@ import java.security.KeyStore;
* SigningConfig encapsulates the information necessary to access certificates in a keystore file
* that can be used to sign APKs.
*/
-public class SigningConfig {
+public class DefaultSigningConfig implements SigningConfig {
- public static final String DFAULT_PASSWORD = "android";
+ public static final String DEFAULT_PASSWORD = "android";
public static final String DEFAULT_ALIAS = "AndroidDebugKey";
+ @NonNull
+ protected final String mName;
private File mStoreFile = null;
private String mStorePassword = null;
private String mKeyAlias = null;
@@ -40,7 +45,8 @@ public class SigningConfig {
/**
* Creates a SigningConfig.
*/
- public SigningConfig() {
+ public DefaultSigningConfig(@NonNull String name) {
+ mName = name;
}
/**
@@ -50,55 +56,78 @@ public class SigningConfig {
*/
public void initDebug() throws AndroidLocationException {
mStoreFile = new File(KeystoreHelper.defaultDebugKeystoreLocation());
- mStorePassword = DFAULT_PASSWORD;
+ mStorePassword = DEFAULT_PASSWORD;
mKeyAlias = DEFAULT_ALIAS;
- mKeyPassword = DFAULT_PASSWORD;
+ mKeyPassword = DEFAULT_PASSWORD;
}
+ @Override
+ @NonNull
+ public String getName() {
+ return mName;
+ }
+
+ @Override
+ @Nullable
public File getStoreFile() {
return mStoreFile;
}
- public SigningConfig setStoreFile(File storeFile) {
+ @NonNull
+ public DefaultSigningConfig setStoreFile(File storeFile) {
mStoreFile = storeFile;
return this;
}
+ @Override
+ @Nullable
public String getStorePassword() {
return mStorePassword;
}
- public SigningConfig setStorePassword(String storePassword) {
+ @NonNull
+ public DefaultSigningConfig setStorePassword(String storePassword) {
mStorePassword = storePassword;
return this;
}
+ @Override
+ @Nullable
public String getKeyAlias() {
return mKeyAlias;
}
- public SigningConfig setKeyAlias(String keyAlias) {
+ @NonNull
+ public DefaultSigningConfig setKeyAlias(String keyAlias) {
mKeyAlias = keyAlias;
return this;
}
+ @Override
+ @Nullable
public String getKeyPassword() {
return mKeyPassword;
}
- public SigningConfig setKeyPassword(String keyPassword) {
+ @NonNull
+ public DefaultSigningConfig setKeyPassword(String keyPassword) {
mKeyPassword = keyPassword;
return this;
}
+ @Override
+ @Nullable
public String getStoreType() {
return mStoreType;
}
- public void SetStoreType(String storeType) {
+ @NonNull
+ public DefaultSigningConfig setStoreType(String storeType) {
mStoreType = storeType;
+ return this;
}
+ @Override
public boolean isSigningReady() {
return mStoreFile != null &&
mStorePassword != null &&
@@ -112,7 +141,7 @@ public class SigningConfig {
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
- SigningConfig that = (SigningConfig) o;
+ DefaultSigningConfig that = (DefaultSigningConfig) o;
if (mKeyAlias != null ?
!mKeyAlias.equals(that.mKeyAlias) :
diff --git a/builder/src/main/java/com/android/builder/signing/KeystoreHelper.java b/builder/src/main/java/com/android/builder/signing/KeystoreHelper.java
index fc92bf9..0847840 100644
--- a/builder/src/main/java/com/android/builder/signing/KeystoreHelper.java
+++ b/builder/src/main/java/com/android/builder/signing/KeystoreHelper.java
@@ -18,6 +18,7 @@ package com.android.builder.signing;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
+import com.android.builder.model.SigningConfig;
import com.android.prefs.AndroidLocation;
import com.android.prefs.AndroidLocation.AndroidLocationException;
import com.android.sdklib.util.GrabProcessOutput;
@@ -193,7 +194,7 @@ public final class KeystoreHelper {
* @throws KeytoolException
* @throws FileNotFoundException
*/
- public static CertificateInfo getCertificateInfo(SigningConfig signingConfig)
+ public static CertificateInfo getCertificateInfo(@NonNull SigningConfig signingConfig)
throws KeytoolException, FileNotFoundException {
try {
@@ -202,11 +203,15 @@ public final class KeystoreHelper {
signingConfig.getStoreType() : KeyStore.getDefaultType());
FileInputStream fis = new FileInputStream(signingConfig.getStoreFile());
+ //noinspection ConstantConditions
keyStore.load(fis, signingConfig.getStorePassword().toCharArray());
fis.close();
+
+ //noinspection ConstantConditions
+ char[] keyPassword = signingConfig.getKeyPassword().toCharArray();
PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry)keyStore.getEntry(
signingConfig.getKeyAlias(),
- new KeyStore.PasswordProtection(signingConfig.getKeyPassword().toCharArray()));
+ new KeyStore.PasswordProtection(keyPassword));
if (entry != null) {
return new CertificateInfo(entry.getPrivateKey(),
diff --git a/builder/src/main/java/com/android/builder/testing/TestData.java b/builder/src/main/java/com/android/builder/testing/TestData.java
index 234ae93..2495659 100644
--- a/builder/src/main/java/com/android/builder/testing/TestData.java
+++ b/builder/src/main/java/com/android/builder/testing/TestData.java
@@ -25,9 +25,19 @@ import java.util.Set;
*/
public interface TestData {
- @Nullable
+ /**
+ * Returns the package name.
+ *
+ * @return the package name
+ */
+ @NonNull
String getPackageName();
+ /**
+ * Returns the tested package name. This can be empty if the test package is self-contained.
+ *
+ * @return the package name or null.
+ */
@Nullable
String getTestedPackageName();
diff --git a/builder/src/main/java/com/android/builder/testing/TestRunner.java b/builder/src/main/java/com/android/builder/testing/TestRunner.java
index c2f46e0..e0dc29c 100644
--- a/builder/src/main/java/com/android/builder/testing/TestRunner.java
+++ b/builder/src/main/java/com/android/builder/testing/TestRunner.java
@@ -45,7 +45,8 @@ public interface TestRunner {
* @param timeout
* @param resultsDir
* @param logger
- * @return
+ * @return true if the test succeed
+ *
* @throws TestException
* @throws InterruptedException
*/
diff --git a/builder/src/test/java/com/android/builder/VariantConfigurationTest.java b/builder/src/test/java/com/android/builder/VariantConfigurationTest.java
index 81c8b3d..6d244ac 100644
--- a/builder/src/test/java/com/android/builder/VariantConfigurationTest.java
+++ b/builder/src/test/java/com/android/builder/VariantConfigurationTest.java
@@ -17,6 +17,7 @@
package com.android.builder;
import com.android.annotations.NonNull;
+import com.android.annotations.Nullable;
import junit.framework.TestCase;
import java.io.File;
@@ -35,8 +36,9 @@ public class VariantConfigurationTest extends TestCase {
mPackageName = packageName;
}
+ @Nullable
@Override
- public String getPackage(File manifestFile) {
+ public String getPackage(@NonNull File manifestFile) {
return mPackageName;
}
@@ -50,8 +52,9 @@ public class VariantConfigurationTest extends TestCase {
return -1;
}
+ @Nullable
@Override
- public String getVersionName(File manifestFile) {
+ public String getVersionName(@NonNull File manifestFile) {
return "1.0";
}
}
diff --git a/builder/src/test/java/com/android/builder/signing/KeyStoreHelperTest.java b/builder/src/test/java/com/android/builder/signing/KeyStoreHelperTest.java
index b889951..453230c 100755
--- a/builder/src/test/java/com/android/builder/signing/KeyStoreHelperTest.java
+++ b/builder/src/test/java/com/android/builder/signing/KeyStoreHelperTest.java
@@ -37,7 +37,7 @@ public class KeyStoreHelperTest extends TestCase {
FakeLogger fakeLogger = new FakeLogger();
// create a default signing Config.
- SigningConfig signingConfig = new SigningConfig();
+ DefaultSigningConfig signingConfig = new DefaultSigningConfig("");
signingConfig.initDebug();
signingConfig.setStoreFile(keystoreFile);