From be35eed354b89bf8abc4b3fb36fd26cbc09e6aa7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Sor=C3=B3bka?= Date: Thu, 30 Jul 2015 14:55:40 +0200 Subject: [PATCH 1/2] implemented generation of main dex classes list for multi dex Change-Id: I32d76d8cc08d159f791e98ad75c780ca340ea0fb --- .../maven/plugins/android/AndroidSdk.java | 95 +++++++--- .../plugins/android/CommandExecutor.java | 2 +- .../plugins/android/configuration/Dex.java | 9 + .../phase08preparepackage/DexMojo.java | 151 +++++++++++----- .../android/sample/AbstractSampleIT.java | 58 ++++++ .../sample/HelloFlashLightSampleIT.java | 46 ++--- .../android/sample/MultiDexSampleIT.java | 43 +++++ src/test/projects/multidexsample/pom.xml | 166 ++++++++++++++++++ .../src/main/AndroidManifest.xml | 22 +++ .../MultiDexSampleActivity.java | 33 ++++ .../MultiDexSampleApplication.java | 33 ++++ .../src/main/res/drawable-hdpi/icon.png | Bin 0 -> 4147 bytes .../src/main/res/drawable-ldpi/icon.png | Bin 0 -> 1723 bytes .../src/main/res/drawable-mdpi/icon.png | Bin 0 -> 2574 bytes .../src/main/res/layout/main.xml | 11 ++ .../src/main/res/values/strings.xml | 5 + 16 files changed, 569 insertions(+), 105 deletions(-) create mode 100644 src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java create mode 100644 src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java create mode 100644 src/test/projects/multidexsample/pom.xml create mode 100644 src/test/projects/multidexsample/src/main/AndroidManifest.xml create mode 100644 src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleActivity.java create mode 100644 src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleApplication.java create mode 100644 src/test/projects/multidexsample/src/main/res/drawable-hdpi/icon.png create mode 100644 src/test/projects/multidexsample/src/main/res/drawable-ldpi/icon.png create mode 100644 src/test/projects/multidexsample/src/main/res/drawable-mdpi/icon.png create mode 100644 src/test/projects/multidexsample/src/main/res/layout/main.xml create mode 100644 src/test/projects/multidexsample/src/main/res/values/strings.xml diff --git a/src/main/java/com/simpligility/maven/plugins/android/AndroidSdk.java b/src/main/java/com/simpligility/maven/plugins/android/AndroidSdk.java index 47e3e98bc..ad837e312 100644 --- a/src/main/java/com/simpligility/maven/plugins/android/AndroidSdk.java +++ b/src/main/java/com/simpligility/maven/plugins/android/AndroidSdk.java @@ -30,7 +30,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; -import org.codehaus.plexus.interpolation.os.Os; /** * Represents an Android SDK. @@ -185,7 +184,76 @@ public String getDxJarPath() { return getPathForBuildTool( BuildToolInfo.PathId.DX_JAR ); } + + /** + * Get the path for proguard.jar + * @return + */ + public String getProguardJarPath() + { + File directory = new File( getToolsPath(), "proguard" + File.separator + "lib" + File.separator ); + File proguardJar = new File( directory, "proguard.jar" ); + if ( proguardJar.exists() ) + { + return proguardJar.getAbsolutePath(); + } + throw new InvalidSdkException( "Cannot find " + proguardJar ); + } + + /** + * Get the path for shrinkedAndroid.jar + * @return + */ + public String getShrinkedAndroidJarPath() + { + File shrinkedAndroidJar = new File( getBuildToolsLibDirectoryPath(), "shrinkedAndroid.jar" ); + if ( shrinkedAndroidJar.exists() ) + { + return shrinkedAndroidJar.getAbsolutePath(); + } + throw new InvalidSdkException( "Cannot find " + shrinkedAndroidJar ); + } + + /** + * Get the path for build-tools lib directory + * @return + */ + public String getBuildToolsLibDirectoryPath() + { + File buildToolsLib = new File( getBuildToolInfo().getLocation(), "lib" ); + if ( buildToolsLib.exists() ) + { + return buildToolsLib.getAbsolutePath(); + } + throw new InvalidSdkException( "Cannot find " + buildToolsLib ); + } + + /** + * Get the path for mainDexClasses.rules + * @return + */ + public String getMainDexClassesRulesPath() + { + File mainDexClassesRules = new File( getBuildToolInfo().getLocation(), + "mainDexClasses.rules" ); + if ( mainDexClassesRules.exists() ) + { + return mainDexClassesRules.getAbsolutePath(); + } + throw new InvalidSdkException( "Cannot find " + mainDexClassesRules ); + } + public void assertThatBuildToolsVersionIsAtLeast( String version, String feature ) + throws InvalidSdkException, NumberFormatException + { + if ( getBuildToolInfo().getRevision(). + compareTo( FullRevision.parseRevision( version ) ) < 0 ) + { + throw new InvalidSdkException( "Version of build tools must be at least " + + version + " for " + feature + " to work" ); + } + } + /** * Get the android debug tool path (adb). * @@ -328,31 +396,6 @@ public String getPathForFrameworkAidl() return androidTarget.getPath( IAndroidTarget.ANDROID_AIDL ); } - /** - * Returns the mainDexClasses script file, based on this SDK and OS. - * Assumes that the script is in build-tools\VERSION\ directory. - * - * NOTE: This file is found in version 21.1.1+ of build-tools. - * - * @return mainDexClasses file - * @throws MojoExecutionException when the file is not found - */ - public File getMainDexClasses() throws MojoExecutionException - { - final File location = getBuildToolInfo().getLocation(); - String mainDexClassesScript = "mainDexClasses"; - if ( Os.isFamily( Os.FAMILY_WINDOWS ) ) - { - mainDexClassesScript += ".bat"; - } - File mainDexClasses = new File( location, mainDexClassesScript ); - if ( !mainDexClasses.exists() ) - { - throw new MojoExecutionException( "No " + mainDexClassesScript + " found in " + location ); - } - return mainDexClasses; - } - /** * Resolves the android.jar from this SDK. * diff --git a/src/main/java/com/simpligility/maven/plugins/android/CommandExecutor.java b/src/main/java/com/simpligility/maven/plugins/android/CommandExecutor.java index da1b8b6b1..aaedc76e3 100644 --- a/src/main/java/com/simpligility/maven/plugins/android/CommandExecutor.java +++ b/src/main/java/com/simpligility/maven/plugins/android/CommandExecutor.java @@ -349,7 +349,7 @@ public void consumeLine( String line ) { if ( captureStdOut ) { - sb.append( line ); + sb.append( line ).append( '\n' ); } if ( logger != null ) { diff --git a/src/main/java/com/simpligility/maven/plugins/android/configuration/Dex.java b/src/main/java/com/simpligility/maven/plugins/android/configuration/Dex.java index 0808cd6e3..3d41efd75 100644 --- a/src/main/java/com/simpligility/maven/plugins/android/configuration/Dex.java +++ b/src/main/java/com/simpligility/maven/plugins/android/configuration/Dex.java @@ -53,6 +53,10 @@ public class Dex * Mirror of {@link com.simpligility.maven.plugins.android.phase08preparepackage.DexMojo#minimalMainDex} */ private Boolean minimalMainDex; + /** + * Mirror of {@link com.simpligility.maven.plugins.android.phase08preparepackage.DexMojo#generateMainDexList} + */ + private Boolean generateMainDexList; private String dexArguments; @@ -112,6 +116,11 @@ public Boolean isMinimalMainDex() return minimalMainDex; } + public Boolean isGenerateMainDexList() + { + return generateMainDexList; + } + public String getDexArguments() { return dexArguments; diff --git a/src/main/java/com/simpligility/maven/plugins/android/phase08preparepackage/DexMojo.java b/src/main/java/com/simpligility/maven/plugins/android/phase08preparepackage/DexMojo.java index 7e0f39ff4..441fa57fc 100644 --- a/src/main/java/com/simpligility/maven/plugins/android/phase08preparepackage/DexMojo.java +++ b/src/main/java/com/simpligility/maven/plugins/android/phase08preparepackage/DexMojo.java @@ -78,6 +78,7 @@ public class DexMojo extends AbstractAndroidMojo * <preDexLibLocation>path to predexed libraries, defaults to target/dexedLibs</preDexLibLocation> * <incremental>true|false</incremental> * <multiDex>true|false</multiDex> + * <generateMainDexList>true|false</generateMainDexList> * <mainDexList>path to class list file</mainDexList> * <minimalMainDex>true|false</minimalMainDex> * </dex> @@ -162,6 +163,16 @@ public class DexMojo extends AbstractAndroidMojo */ @Parameter( property = "android.dex.minimalmaindex", defaultValue = "false" ) private boolean dexMinimalMainDex; + + /** + * Decides whether to generate main dex list. + * Supported from build tools version 22.0.0+ + * + * Note: if set to true, dexMinimalMainDex is set to true, and dexMainDexList + * is set to generated main dex list. + */ + @Parameter( property = "android.dex.generatemaindexlist", defaultValue = "false" ) + private boolean dexGenerateMainDexList; /** * Additional command line parameters passed to dx. @@ -180,6 +191,7 @@ public class DexMojo extends AbstractAndroidMojo private boolean parsedMultiDex; private String parsedMainDexList; private boolean parsedMinimalMainDex; + private boolean parsedGenerateMainDexList; private String parsedDexArguments; /** @@ -189,15 +201,22 @@ public class DexMojo extends AbstractAndroidMojo @Override public void execute() throws MojoExecutionException, MojoFailureException { - CommandExecutor executor = CommandExecutor.Factory.createDefaultCommmandExecutor(); - executor.setLogger( this.getLog() ); + executor.setLogger( getLog() ); parseConfiguration(); File outputFile; if ( parsedMultiDex ) { outputFile = targetDirectory; + if ( parsedGenerateMainDexList ) + { + getAndroidSdk().assertThatBuildToolsVersionIsAtLeast( + "22.0.0", "generate main dex list" ); + File generatedMainDexClassesList = generateMainDexClassesList( executor ); + parsedMainDexList = generatedMainDexClassesList.getAbsolutePath(); + parsedMinimalMainDex = true; + } } else { @@ -381,6 +400,14 @@ private void parseConfiguration() { parsedMinimalMainDex = dex.isMinimalMainDex(); } + if ( dex.isGenerateMainDexList() == null ) + { + parsedGenerateMainDexList = dexGenerateMainDexList; + } + else + { + parsedGenerateMainDexList = dex.isGenerateMainDexList(); + } if ( dex.getDexArguments() == null ) { parsedDexArguments = dexArguments; @@ -404,6 +431,7 @@ private void parseConfiguration() parsedMultiDex = dexMultiDex; parsedMainDexList = dexMainDexList; parsedMinimalMainDex = dexMinimalMainDex; + parsedGenerateMainDexList = dexGenerateMainDexList; parsedDexArguments = dexArguments; } } @@ -427,20 +455,8 @@ private Set< File > preDex( CommandExecutor executor, Set< File > inputFiles ) t if ( !predexJar.isFile() || predexJar.lastModified() < inputFile.lastModified() ) { getLog().info( "Pre-dex ing jar: " + inputFile.getAbsolutePath() ); - - final String javaExecutable = getJavaExecutable().getAbsolutePath(); - getLog().debug( javaExecutable + " " + commands.toString() ); - try - { - executor.setCaptureStdOut( true ); - executor.executeCommand( javaExecutable, commands, project.getBasedir(), false ); - } - catch ( ExecutionException e ) - { - throw new MojoExecutionException( "", e ); - } + executeJava( commands, executor ); } - } else { @@ -460,8 +476,22 @@ private File predexJarPath( File inputFile ) private List< String > dexDefaultCommands() throws MojoExecutionException { + List< String > commands = jarDefaultCommands(); + commands.add( getAndroidSdk().getDxJarPath() ); + commands.add( "--dex" ); + return commands; + } + + private List jarDefaultCommands() + { + List< String > commands = javaDefaultCommands(); + commands.add( "-jar" ); + return commands; + } - List< String > commands = new ArrayList< String >(); + private List javaDefaultCommands() + { + List< String > commands = new ArrayList< String > (); if ( parsedJvmArguments != null ) { for ( String jvmArgument : parsedJvmArguments ) @@ -478,12 +508,7 @@ private List< String > dexDefaultCommands() throws MojoExecutionException commands.add( jvmArgument ); } } - commands.add( "-jar" ); - commands.add( getAndroidSdk().getDxJarPath() ); - commands.add( "--dex" ); - return commands; - } private void runDex( CommandExecutor executor, File outputFile ) @@ -519,13 +544,7 @@ private void runDex( CommandExecutor executor, File outputFile ) if ( parsedMultiDex ) { commands.add( "--multi-dex" ); - if ( parsedMainDexList == null ) - { - File generatedMainDexClasses = generateMainDexClassesFile(); - commands.add( "--main-dex-list=" + generatedMainDexClasses ); - parsedMinimalMainDex = true; - } - else + if ( parsedMainDexList != null ) { commands.add( "--main-dex-list=" + parsedMainDexList ); } @@ -544,13 +563,19 @@ private void runDex( CommandExecutor executor, File outputFile ) commands.add( inputFile.getAbsolutePath() ); } + getLog().info( "Convert classes to Dex : " + outputFile ); + executeJava( commands, executor ); + } + + private String executeJava( final List commands, CommandExecutor executor ) throws MojoExecutionException + { final String javaExecutable = getJavaExecutable().getAbsolutePath(); getLog().debug( javaExecutable + " " + commands.toString() ); - getLog().info( "Convert classes to Dex : " + outputFile ); try { executor.setCaptureStdOut( true ); executor.executeCommand( javaExecutable, commands, project.getBasedir(), false ); + return executor.getStandardOut(); } catch ( ExecutionException e ) { @@ -570,32 +595,70 @@ private static File getJavaExecutable() return new File( javaHome + slash + "bin" + slash + "java" ); } - private File generateMainDexClassesFile() throws MojoExecutionException + private File generateMainDexClassesJar( CommandExecutor executor ) throws MojoExecutionException { - CommandExecutor executor = CommandExecutor.Factory.createDefaultCommmandExecutor(); - executor.setLogger( getLog() ); - List< String> commands = new ArrayList< String>(); - commands.add( "--output" ); + List< String> commands = jarDefaultCommands(); + commands.add( getAndroidSdk().getProguardJarPath() ); + commands.add( "-dontnote" ); + commands.add( "-dontwarn" ); + commands.add( "-forceprocessing" ); + commands.add( "-dontoptimize" ); + commands.add( "-dontpreverify" ); + commands.add( "-dontobfuscate" ); + + Set< File> inputFiles = getDexInputFiles(); + for ( File inputFile : inputFiles ) + { + commands.add( "-injars" ); + commands.add( inputFile.getAbsolutePath() + "(!META-INF/**)" ); + } + + commands.add( "-libraryjars" ); + commands.add( getAndroidSdk().getShrinkedAndroidJarPath() ); + + commands.add( "-include" ); + commands.add( getAndroidSdk().getMainDexClassesRulesPath() ); + + commands.add( "-outjars" ); + File mainDexClassesJar = new File( targetDirectory, "mainDexClasses.jar" ); + commands.add( mainDexClassesJar.getAbsolutePath() ); + + getLog().info( "Generating main dex classes jar : " + mainDexClassesJar ); + executeJava( commands, executor ); + + return mainDexClassesJar; + } + + private File generateMainDexClassesList( CommandExecutor executor ) throws MojoExecutionException + { + File mainDexClassesJar = generateMainDexClassesJar( executor ); + List< String> commands = javaDefaultCommands(); - File mainDexClasses = new File( targetDirectory, "mainDexClasses.txt" ); - commands.add( mainDexClasses.getAbsolutePath() ); + commands.add( "-Djava.ext.dirs=" + getAndroidSdk().getBuildToolsLibDirectoryPath() ); + commands.add( "com.android.multidex.MainDexListBuilder" ); + commands.add( mainDexClassesJar.getAbsolutePath() ); Set< File> inputFiles = getDexInputFiles(); StringBuilder sb = new StringBuilder(); - sb.append( '"' ).append( StringUtils.join( inputFiles, File.pathSeparatorChar ) ).append( '"' ); + sb.append( StringUtils.join( inputFiles, File.pathSeparatorChar ) ); commands.add( sb.toString() ); - String executable = getAndroidSdk().getMainDexClasses().getAbsolutePath(); - try + File mainDexClassesList = new File( targetDirectory, "mainDexClasses.txt" ); + + getLog().info( "Generating main dex classes list : " + mainDexClassesList ); + + String output = executeJava( commands, executor ); + try { - executor.executeCommand( executable, commands, project.getBasedir(), false ); + FileUtils.writeStringToFile( mainDexClassesList, output ); } - catch ( ExecutionException ex ) + catch ( IOException ex ) { - throw new MojoExecutionException( "Failed to execute mainDexClasses", ex ); + throw new MojoExecutionException( "Failed to write command output with main dex classes list to " + + mainDexClassesList, ex ); } - return mainDexClasses; - } + return mainDexClassesList; + } /** * @return diff --git a/src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java b/src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java new file mode 100644 index 000000000..854efd6cc --- /dev/null +++ b/src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2014 simpligility technologies inc. + * Copyright (C) 2015 Piotr Soróbka + * + * 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.simpligility.maven.plugins.android.sample; + +import com.simpligility.maven.plugins.android.PluginInfo; +import io.takari.maven.testing.TestResources; +import io.takari.maven.testing.executor.MavenExecutionResult; +import io.takari.maven.testing.executor.MavenRuntime; +import io.takari.maven.testing.executor.MavenVersions; +import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; +import java.io.File; +import org.junit.Rule; +import org.junit.runner.RunWith; + +/** + * + * @author Piotr Soróbka + */ +@RunWith(MavenJUnitTestRunner.class) +@MavenVersions({"3.2.3"}) +public abstract class AbstractSampleIT { + + @Rule + public final TestResources resources = new TestResources(); + public final MavenRuntime mavenRuntime; + + public AbstractSampleIT(MavenRuntime.MavenRuntimeBuilder builder) throws Exception { + this.mavenRuntime = builder.build(); + } + + protected void buildDeployAndRun(String path, String packageName, String activityName) throws Exception { + File basedir = resources.getBasedir(path); + MavenExecutionResult result = mavenRuntime + .forProject(basedir) + .execute("clean", PluginInfo.getQualifiedGoal("undeploy"), + "install", PluginInfo.getQualifiedGoal("deploy"), + PluginInfo.getQualifiedGoal("run")); + + result.assertErrorFreeLog(); + result.assertLogText("Successfully installed"); + result.assertLogText("Attempting to start " + packageName + + "/" + activityName); + } +} diff --git a/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java b/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java index f2d1fbe8c..1dd1f8b54 100644 --- a/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java +++ b/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java @@ -15,46 +15,24 @@ */ package com.simpligility.maven.plugins.android.sample; -import io.takari.maven.testing.TestResources; -import io.takari.maven.testing.executor.MavenExecutionResult; -import io.takari.maven.testing.executor.MavenRuntime; import io.takari.maven.testing.executor.MavenVersions; import io.takari.maven.testing.executor.MavenRuntime.MavenRuntimeBuilder; import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; - -import java.io.File; - -import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import com.simpligility.maven.plugins.android.PluginInfo; - @RunWith(MavenJUnitTestRunner.class) @MavenVersions({"3.2.3"}) -public class HelloFlashLightSampleIT { - - @Rule - public final TestResources resources = new TestResources(); - - public final MavenRuntime mavenRuntime; - - public HelloFlashLightSampleIT(MavenRuntimeBuilder builder) throws Exception { - this.mavenRuntime = builder.build(); - } - - @Test - public void buildDeployAndRun() throws Exception { - File basedir = resources.getBasedir( "helloflashlight" ); - MavenExecutionResult result = mavenRuntime - .forProject(basedir) - .execute( "clean", PluginInfo.getQualifiedGoal( "undeploy" ), - "install", PluginInfo.getQualifiedGoal( "deploy" ), - PluginInfo.getQualifiedGoal( "run" ) ); - - result.assertErrorFreeLog(); - result.assertLogText( "Successfully installed" ); - result.assertLogText( "Attempting to start com.simpligility.android.helloflashlight/com.simpligility.android.helloflashlight.HelloFlashlight" ); - } +public class HelloFlashLightSampleIT extends AbstractSampleIT { + + public HelloFlashLightSampleIT(MavenRuntimeBuilder builder) throws Exception { + super(builder); + } + + @Test + public void buildDeployAndRun() throws Exception { + buildDeployAndRun("helloflashlight", "com.simpligility.android.helloflashlight", "com.simpligility.android.helloflashlight.HelloFlashlight"); + + } -} \ No newline at end of file +} diff --git a/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java b/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java new file mode 100644 index 000000000..738ef7e4b --- /dev/null +++ b/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2014 simpligility technologies inc. + * Copyright (C) 2015 Piotr Soróbka + * + * 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.simpligility.maven.plugins.android.sample; + +import io.takari.maven.testing.executor.MavenVersions; +import io.takari.maven.testing.executor.MavenRuntime.MavenRuntimeBuilder; +import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * + * @author Piotr Soróbka + */ +@RunWith(MavenJUnitTestRunner.class) +@MavenVersions({"3.2.3"}) +public class MultiDexSampleIT extends AbstractSampleIT { + + public MultiDexSampleIT(MavenRuntimeBuilder builder) throws Exception { + super(builder); + } + + @Test + public void buildDeployAndRun() throws Exception { + buildDeployAndRun("multidexsample", "com.simpligility.android.multidexsample", + "com.simpligility.android.multidexsample.MultiDexSampleActivity"); + } + +} diff --git a/src/test/projects/multidexsample/pom.xml b/src/test/projects/multidexsample/pom.xml new file mode 100644 index 000000000..815817d41 --- /dev/null +++ b/src/test/projects/multidexsample/pom.xml @@ -0,0 +1,166 @@ + + + 4.0.0 + com.simpligility.android + multidexsample + 1.0.0 + apk + MultiDexSample + + + + 4.3.0 + UTF-8 + UTF-8 + + + + + org.robolectric + android-all + 5.0.0_r2-robolectric-1 + provided + + + + com.android.support + multidex + 1.0.1 + aar + + + + com.squareup + otto + 1.3.8 + + + com.actionbarsherlock + actionbarsherlock + 4.4.0 + + + com.j256.ormlite + ormlite-android + 4.48 + + + org.roboguice + roboguice + 3.0.1 + + + org.roboguice + roboblender + 3.0.1 + provided + + + com.google.code.findbugs + jsr305 + 1.3.9 + + + com.thoughtworks.xstream + xstream + 1.4.7 + + + xpp3 + xpp3_min + + + xmlpull + xmlpull + + + + + com.google.guava + guava + 18.0 + + + com.google.code.gson + gson + 2.3.1 + + + org.bouncycastle + bcprov-jdk15on + 1.52 + + + + org.apache.commons + commons-collections4 + 4.0 + + + commons-io + commons-io + 2.4 + + + org.apache.commons + commons-lang3 + 3.4 + + + commons-codec + commons-codec + 1.10 + + + org.apache.commons + commons-compress + 1.9 + + + org.apache.commons + commons-math3 + 3.5 + + + + + + + + com.simpligility.maven.plugins + android-maven-plugin + ${it-plugin.version} + true + + + + + + com.simpligility.maven.plugins + android-maven-plugin + + + 19 + + true + true + + + -Xms1024m + -Xmx2048m + -XX:MaxPermSize=1024m + + + + + + + + + + local-android-repository + file://${env.ANDROID_HOME}/extras/android/m2repository + + + diff --git a/src/test/projects/multidexsample/src/main/AndroidManifest.xml b/src/test/projects/multidexsample/src/main/AndroidManifest.xml new file mode 100644 index 000000000..afebd4b16 --- /dev/null +++ b/src/test/projects/multidexsample/src/main/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + diff --git a/src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleActivity.java b/src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleActivity.java new file mode 100644 index 000000000..64e7797ad --- /dev/null +++ b/src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleActivity.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 Piotr Soróbka + * + * 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.simpligility.android.multidexsample; + +import android.os.Bundle; +import roboguice.activity.RoboActivity; +import roboguice.inject.ContentView; + +/** + * + * @author Piotr Soróbka + */ +@ContentView(R.layout.main) +public class MultiDexSampleActivity extends RoboActivity { + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } +} diff --git a/src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleApplication.java b/src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleApplication.java new file mode 100644 index 000000000..709a30f9c --- /dev/null +++ b/src/test/projects/multidexsample/src/main/java/com/simpligility/android/multidexsample/MultiDexSampleApplication.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 Piotr Soróbka + * + * 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.simpligility.android.multidexsample; + +import android.app.Application; +import android.content.Context; +import android.support.multidex.MultiDex; + +/** + * + * @author Piotr Soróbka + */ +public class MultiDexSampleApplication extends Application { + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + MultiDex.install(this); + } +} diff --git a/src/test/projects/multidexsample/src/main/res/drawable-hdpi/icon.png b/src/test/projects/multidexsample/src/main/res/drawable-hdpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8074c4c571b8cd19e27f4ee5545df367420686d7 GIT binary patch literal 4147 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 literal 0 HcmV?d00001 diff --git a/src/test/projects/multidexsample/src/main/res/drawable-ldpi/icon.png b/src/test/projects/multidexsample/src/main/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1095584ec21f71cd0afc9e0993aa2209671b590c GIT binary patch literal 1723 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 + + + + + diff --git a/src/test/projects/multidexsample/src/main/res/values/strings.xml b/src/test/projects/multidexsample/src/main/res/values/strings.xml new file mode 100644 index 000000000..bb3d5520b --- /dev/null +++ b/src/test/projects/multidexsample/src/main/res/values/strings.xml @@ -0,0 +1,5 @@ + + + MultiDexSample + Hello MultiDex! + From 47774b33b26dc53e59cc23e56544ac8816f43703 Mon Sep 17 00:00:00 2001 From: Justin Shapcott Date: Wed, 21 Dec 2016 15:00:44 -0700 Subject: [PATCH 2/2] Remove AbstractSampleIT per PR comment --- .../android/sample/AbstractSampleIT.java | 58 ------------------- .../sample/HelloFlashLightSampleIT.java | 28 ++++++++- .../android/sample/MultiDexSampleIT.java | 37 ++++++++---- 3 files changed, 52 insertions(+), 71 deletions(-) delete mode 100644 src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java diff --git a/src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java b/src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java deleted file mode 100644 index 854efd6cc..000000000 --- a/src/test/java/com/simpligility/maven/plugins/android/sample/AbstractSampleIT.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (C) 2014 simpligility technologies inc. - * Copyright (C) 2015 Piotr Soróbka - * - * 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.simpligility.maven.plugins.android.sample; - -import com.simpligility.maven.plugins.android.PluginInfo; -import io.takari.maven.testing.TestResources; -import io.takari.maven.testing.executor.MavenExecutionResult; -import io.takari.maven.testing.executor.MavenRuntime; -import io.takari.maven.testing.executor.MavenVersions; -import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; -import java.io.File; -import org.junit.Rule; -import org.junit.runner.RunWith; - -/** - * - * @author Piotr Soróbka - */ -@RunWith(MavenJUnitTestRunner.class) -@MavenVersions({"3.2.3"}) -public abstract class AbstractSampleIT { - - @Rule - public final TestResources resources = new TestResources(); - public final MavenRuntime mavenRuntime; - - public AbstractSampleIT(MavenRuntime.MavenRuntimeBuilder builder) throws Exception { - this.mavenRuntime = builder.build(); - } - - protected void buildDeployAndRun(String path, String packageName, String activityName) throws Exception { - File basedir = resources.getBasedir(path); - MavenExecutionResult result = mavenRuntime - .forProject(basedir) - .execute("clean", PluginInfo.getQualifiedGoal("undeploy"), - "install", PluginInfo.getQualifiedGoal("deploy"), - PluginInfo.getQualifiedGoal("run")); - - result.assertErrorFreeLog(); - result.assertLogText("Successfully installed"); - result.assertLogText("Attempting to start " + packageName - + "/" + activityName); - } -} diff --git a/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java b/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java index f8a64fcd8..b078d3c69 100644 --- a/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java +++ b/src/test/java/com/simpligility/maven/plugins/android/sample/HelloFlashLightSampleIT.java @@ -15,24 +15,46 @@ */ package com.simpligility.maven.plugins.android.sample; +import com.simpligility.maven.plugins.android.PluginInfo; +import io.takari.maven.testing.TestResources; +import io.takari.maven.testing.executor.MavenExecutionResult; +import io.takari.maven.testing.executor.MavenRuntime; import io.takari.maven.testing.executor.MavenVersions; import io.takari.maven.testing.executor.MavenRuntime.MavenRuntimeBuilder; import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; + +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.io.File; + @RunWith(MavenJUnitTestRunner.class) @MavenVersions({"3.0.5", "3.3.9"}) -public class HelloFlashLightSampleIT extends AbstractSampleIT { +public class HelloFlashLightSampleIT { + + @Rule + public final TestResources resources = new TestResources(); + + public final MavenRuntime mavenRuntime; public HelloFlashLightSampleIT(MavenRuntimeBuilder builder) throws Exception { - super(builder); + this.mavenRuntime = builder.build(); } @Test public void buildDeployAndRun() throws Exception { - buildDeployAndRun("helloflashlight", "com.simpligility.android.helloflashlight", "com.simpligility.android.helloflashlight.HelloFlashlight"); + File basedir = resources.getBasedir( "helloflashlight" ); + MavenExecutionResult result = mavenRuntime + .forProject(basedir) + .execute( "clean", PluginInfo.getQualifiedGoal( "undeploy" ), + "install", PluginInfo.getQualifiedGoal( "deploy" ), + PluginInfo.getQualifiedGoal( "run" ) ); + + result.assertErrorFreeLog(); + result.assertLogText( "Successfully installed" ); + result.assertLogText( "Attempting to start com.simpligility.android.helloflashlight/com.simpligility.android.helloflashlight.HelloFlashlight" ); } } diff --git a/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java b/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java index 738ef7e4b..e9cd44d54 100644 --- a/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java +++ b/src/test/java/com/simpligility/maven/plugins/android/sample/MultiDexSampleIT.java @@ -1,6 +1,5 @@ /* * Copyright (C) 2014 simpligility technologies inc. - * Copyright (C) 2015 Piotr Soróbka * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,28 +15,46 @@ */ package com.simpligility.maven.plugins.android.sample; +import com.simpligility.maven.plugins.android.PluginInfo; +import io.takari.maven.testing.TestResources; +import io.takari.maven.testing.executor.MavenExecutionResult; +import io.takari.maven.testing.executor.MavenRuntime; import io.takari.maven.testing.executor.MavenVersions; import io.takari.maven.testing.executor.MavenRuntime.MavenRuntimeBuilder; import io.takari.maven.testing.executor.junit.MavenJUnitTestRunner; + + +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -/** - * - * @author Piotr Soróbka - */ +import java.io.File; + @RunWith(MavenJUnitTestRunner.class) -@MavenVersions({"3.2.3"}) -public class MultiDexSampleIT extends AbstractSampleIT { +@MavenVersions({"3.0.5", "3.3.9"}) +public class MultiDexSampleIT { + + @Rule + public final TestResources resources = new TestResources(); + + public final MavenRuntime mavenRuntime; public MultiDexSampleIT(MavenRuntimeBuilder builder) throws Exception { - super(builder); + this.mavenRuntime = builder.build(); } @Test public void buildDeployAndRun() throws Exception { - buildDeployAndRun("multidexsample", "com.simpligility.android.multidexsample", - "com.simpligility.android.multidexsample.MultiDexSampleActivity"); + File basedir = resources.getBasedir( "multidexsample" ); + MavenExecutionResult result = mavenRuntime + .forProject(basedir) + .execute( "clean", PluginInfo.getQualifiedGoal( "undeploy" ), + "install", PluginInfo.getQualifiedGoal( "deploy" ), + PluginInfo.getQualifiedGoal( "run" ) ); + + result.assertErrorFreeLog(); + result.assertLogText( "Successfully installed" ); + result.assertLogText( "Attempting to start com.simpligility.android.multidexsample/com.simpligility.android.multidexsample.MultiDexSampleActivity" ); } }