From c4986e7a0c8022817df8f6dabbab4e8a87bd0477 Mon Sep 17 00:00:00 2001 From: Wing Lam Date: Tue, 20 Aug 2013 16:38:23 -0700 Subject: ProGuard support for libraries. Change-Id: I38069666a4cc9f84c07337f26bd6dcdb0b253548 --- tests/libProguard/build.gradle | 26 ++++++++++ tests/libProguard/config.pro | 3 ++ tests/libProguard/src/main/AndroidManifest.xml | 4 ++ .../com/android/tests/basic/StringProvider.java | 11 +++++ tests/libProguardConsumerFiles/A.txt | 1 + tests/libProguardConsumerFiles/B.txt | 1 + tests/libProguardConsumerFiles/C.txt | 1 + tests/libProguardConsumerFiles/build.gradle | 32 ++++++++++++ tests/libProguardConsumerFiles/config.pro | 3 ++ .../src/main/AndroidManifest.xml | 4 ++ .../com/android/tests/basic/StringProvider.java | 11 +++++ tests/libProguardJarDep/app/build.gradle | 35 +++++++++++++ tests/libProguardJarDep/app/config.pro | 2 + .../java/com/android/tests/basic/MainTest.java | 42 ++++++++++++++++ .../app/src/main/AndroidManifest.xml | 30 ++++++++++++ .../main/java/com/android/tests/basic/Main.java | 31 ++++++++++++ .../app/src/main/res/drawable/icon.png | Bin 0 -> 2574 bytes .../app/src/main/res/layout/main.xml | 20 ++++++++ .../app/src/main/res/values/strings.xml | 4 ++ tests/libProguardJarDep/build.gradle | 8 +++ tests/libProguardJarDep/lib/build.gradle | 30 ++++++++++++ tests/libProguardJarDep/lib/config.pro | 3 ++ tests/libProguardJarDep/lib/libs/util-1.0.jar | Bin 0 -> 1997 bytes .../lib/src/main/AndroidManifest.xml | 5 ++ .../java/com/android/tests/basic/StringGetter.java | 23 +++++++++ tests/libProguardJarDep/settings.gradle | 2 + tests/libProguardJarDep/util/build.gradle | 8 +++ .../android/multiproject/person/People.java | 10 ++++ .../android/multiproject/person/Person.java | 13 +++++ tests/libProguardLibDep/app/build.gradle | 31 ++++++++++++ tests/libProguardLibDep/app/config.pro | 3 ++ .../java/com/android/tests/basic/MainTest.java | 54 +++++++++++++++++++++ .../app/src/main/AndroidManifest.xml | 30 ++++++++++++ .../main/java/com/android/tests/basic/Main.java | 46 ++++++++++++++++++ .../app/src/main/res/drawable/icon.png | Bin 0 -> 2574 bytes .../app/src/main/res/layout/main.xml | 20 ++++++++ .../app/src/main/res/values/strings.xml | 4 ++ tests/libProguardLibDep/build.gradle | 8 +++ tests/libProguardLibDep/lib/build.gradle | 22 +++++++++ tests/libProguardLibDep/lib/config.pro | 3 ++ tests/libProguardLibDep/lib/consumerRules.pro | 6 +++ .../lib/src/main/AndroidManifest.xml | 5 ++ .../java/com/android/tests/basic/StringGetter.java | 23 +++++++++ tests/libProguardLibDep/lib2/build.gradle | 18 +++++++ tests/libProguardLibDep/lib2/config.pro | 3 ++ .../lib2/src/main/AndroidManifest.xml | 4 ++ .../com/android/tests/basic/StringProvider.java | 8 +++ tests/libProguardLibDep/settings.gradle | 3 ++ tests/proguardLib/lib/build.gradle | 4 +- 49 files changed, 656 insertions(+), 2 deletions(-) create mode 100644 tests/libProguard/build.gradle create mode 100644 tests/libProguard/config.pro create mode 100644 tests/libProguard/src/main/AndroidManifest.xml create mode 100644 tests/libProguard/src/main/java/com/android/tests/basic/StringProvider.java create mode 100644 tests/libProguardConsumerFiles/A.txt create mode 100644 tests/libProguardConsumerFiles/B.txt create mode 100644 tests/libProguardConsumerFiles/C.txt create mode 100644 tests/libProguardConsumerFiles/build.gradle create mode 100644 tests/libProguardConsumerFiles/config.pro create mode 100644 tests/libProguardConsumerFiles/src/main/AndroidManifest.xml create mode 100644 tests/libProguardConsumerFiles/src/main/java/com/android/tests/basic/StringProvider.java create mode 100644 tests/libProguardJarDep/app/build.gradle create mode 100644 tests/libProguardJarDep/app/config.pro create mode 100644 tests/libProguardJarDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java create mode 100644 tests/libProguardJarDep/app/src/main/AndroidManifest.xml create mode 100644 tests/libProguardJarDep/app/src/main/java/com/android/tests/basic/Main.java create mode 100644 tests/libProguardJarDep/app/src/main/res/drawable/icon.png create mode 100644 tests/libProguardJarDep/app/src/main/res/layout/main.xml create mode 100644 tests/libProguardJarDep/app/src/main/res/values/strings.xml create mode 100644 tests/libProguardJarDep/build.gradle create mode 100644 tests/libProguardJarDep/lib/build.gradle create mode 100644 tests/libProguardJarDep/lib/config.pro create mode 100644 tests/libProguardJarDep/lib/libs/util-1.0.jar create mode 100644 tests/libProguardJarDep/lib/src/main/AndroidManifest.xml create mode 100644 tests/libProguardJarDep/lib/src/main/java/com/android/tests/basic/StringGetter.java create mode 100644 tests/libProguardJarDep/settings.gradle create mode 100644 tests/libProguardJarDep/util/build.gradle create mode 100644 tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/People.java create mode 100644 tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/Person.java create mode 100644 tests/libProguardLibDep/app/build.gradle create mode 100644 tests/libProguardLibDep/app/config.pro create mode 100644 tests/libProguardLibDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java create mode 100644 tests/libProguardLibDep/app/src/main/AndroidManifest.xml create mode 100644 tests/libProguardLibDep/app/src/main/java/com/android/tests/basic/Main.java create mode 100644 tests/libProguardLibDep/app/src/main/res/drawable/icon.png create mode 100644 tests/libProguardLibDep/app/src/main/res/layout/main.xml create mode 100644 tests/libProguardLibDep/app/src/main/res/values/strings.xml create mode 100644 tests/libProguardLibDep/build.gradle create mode 100644 tests/libProguardLibDep/lib/build.gradle create mode 100644 tests/libProguardLibDep/lib/config.pro create mode 100644 tests/libProguardLibDep/lib/consumerRules.pro create mode 100644 tests/libProguardLibDep/lib/src/main/AndroidManifest.xml create mode 100644 tests/libProguardLibDep/lib/src/main/java/com/android/tests/basic/StringGetter.java create mode 100644 tests/libProguardLibDep/lib2/build.gradle create mode 100644 tests/libProguardLibDep/lib2/config.pro create mode 100644 tests/libProguardLibDep/lib2/src/main/AndroidManifest.xml create mode 100644 tests/libProguardLibDep/lib2/src/main/java/com/android/tests/basic/StringProvider.java create mode 100644 tests/libProguardLibDep/settings.gradle (limited to 'tests') diff --git a/tests/libProguard/build.gradle b/tests/libProguard/build.gradle new file mode 100644 index 0000000..6a522ee --- /dev/null +++ b/tests/libProguard/build.gradle @@ -0,0 +1,26 @@ +buildscript { + repositories { + maven { url '../../../../out/host/gradle/repo' } + } + dependencies { + classpath 'com.android.tools.build:gradle:0.5.0-SNAPSHOT' + } +} + +apply plugin: 'android-library' + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + proguardFile 'config.pro' + } + release { + runProguard true + } +} diff --git a/tests/libProguard/config.pro b/tests/libProguard/config.pro new file mode 100644 index 0000000..3664f87 --- /dev/null +++ b/tests/libProguard/config.pro @@ -0,0 +1,3 @@ +-keep public class com.android.tests.basic.StringProvider { + public static java.lang.String getString(int); +} diff --git a/tests/libProguard/src/main/AndroidManifest.xml b/tests/libProguard/src/main/AndroidManifest.xml new file mode 100644 index 0000000..593a287 --- /dev/null +++ b/tests/libProguard/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + diff --git a/tests/libProguard/src/main/java/com/android/tests/basic/StringProvider.java b/tests/libProguard/src/main/java/com/android/tests/basic/StringProvider.java new file mode 100644 index 0000000..18fe927 --- /dev/null +++ b/tests/libProguard/src/main/java/com/android/tests/basic/StringProvider.java @@ -0,0 +1,11 @@ +package com.android.tests.basic; + +import java.lang.Integer; + +public class StringProvider { + private static int proguardInt = 5; + + public static String getString(int foo) { + return Integer.toString(foo + proguardInt); + } +} diff --git a/tests/libProguardConsumerFiles/A.txt b/tests/libProguardConsumerFiles/A.txt new file mode 100644 index 0000000..f70f10e --- /dev/null +++ b/tests/libProguardConsumerFiles/A.txt @@ -0,0 +1 @@ +A diff --git a/tests/libProguardConsumerFiles/B.txt b/tests/libProguardConsumerFiles/B.txt new file mode 100644 index 0000000..223b783 --- /dev/null +++ b/tests/libProguardConsumerFiles/B.txt @@ -0,0 +1 @@ +B diff --git a/tests/libProguardConsumerFiles/C.txt b/tests/libProguardConsumerFiles/C.txt new file mode 100644 index 0000000..3cc58df --- /dev/null +++ b/tests/libProguardConsumerFiles/C.txt @@ -0,0 +1 @@ +C diff --git a/tests/libProguardConsumerFiles/build.gradle b/tests/libProguardConsumerFiles/build.gradle new file mode 100644 index 0000000..fbefef8 --- /dev/null +++ b/tests/libProguardConsumerFiles/build.gradle @@ -0,0 +1,32 @@ +buildscript { + repositories { + maven { url '../../../../out/host/gradle/repo' } + } + dependencies { + classpath 'com.android.tools.build:gradle:0.5.0-SNAPSHOT' + } +} + +apply plugin: 'android-library' + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + proguardFile 'config.pro' + consumerProguardFiles 'A.txt' + } + + debug { + } + + release { + runProguard true + consumerProguardFiles 'B.txt', 'C.txt' + } +} diff --git a/tests/libProguardConsumerFiles/config.pro b/tests/libProguardConsumerFiles/config.pro new file mode 100644 index 0000000..3664f87 --- /dev/null +++ b/tests/libProguardConsumerFiles/config.pro @@ -0,0 +1,3 @@ +-keep public class com.android.tests.basic.StringProvider { + public static java.lang.String getString(int); +} diff --git a/tests/libProguardConsumerFiles/src/main/AndroidManifest.xml b/tests/libProguardConsumerFiles/src/main/AndroidManifest.xml new file mode 100644 index 0000000..593a287 --- /dev/null +++ b/tests/libProguardConsumerFiles/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + diff --git a/tests/libProguardConsumerFiles/src/main/java/com/android/tests/basic/StringProvider.java b/tests/libProguardConsumerFiles/src/main/java/com/android/tests/basic/StringProvider.java new file mode 100644 index 0000000..18fe927 --- /dev/null +++ b/tests/libProguardConsumerFiles/src/main/java/com/android/tests/basic/StringProvider.java @@ -0,0 +1,11 @@ +package com.android.tests.basic; + +import java.lang.Integer; + +public class StringProvider { + private static int proguardInt = 5; + + public static String getString(int foo) { + return Integer.toString(foo + proguardInt); + } +} diff --git a/tests/libProguardJarDep/app/build.gradle b/tests/libProguardJarDep/app/build.gradle new file mode 100644 index 0000000..8166bf8 --- /dev/null +++ b/tests/libProguardJarDep/app/build.gradle @@ -0,0 +1,35 @@ +apply plugin: 'android' + +repositories { + mavenCentral() +} + +dependencies { + compile project(':lib') +} + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + testBuildType "proguard" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + } + + buildTypes { + proguard.initWith(buildTypes.debug) + proguard { + runProguard true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'config.pro' + } + } + + dexOptions { + incremental false + } +} diff --git a/tests/libProguardJarDep/app/config.pro b/tests/libProguardJarDep/app/config.pro new file mode 100644 index 0000000..4321975 --- /dev/null +++ b/tests/libProguardJarDep/app/config.pro @@ -0,0 +1,2 @@ +-keep class com.google.** +-dontwarn com.google.** diff --git a/tests/libProguardJarDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java b/tests/libProguardJarDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java new file mode 100644 index 0000000..6b3ff36 --- /dev/null +++ b/tests/libProguardJarDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java @@ -0,0 +1,42 @@ +package com.android.tests.basic; + +import android.test.ActivityInstrumentationTestCase2; +import android.test.suitebuilder.annotation.MediumTest; +import android.widget.TextView; + +public class MainTest extends ActivityInstrumentationTestCase2
{ + + private TextView mTextView; + + /** + * Creates an {@link ActivityInstrumentationTestCase2} that tests the {@link Main} activity. + */ + public MainTest() { + super(Main.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + final Main a = getActivity(); + // ensure a valid handle to the activity has been returned + assertNotNull(a); + mTextView = (TextView) a.findViewById(R.id.dateText); + } + + /** + * The name 'test preconditions' is a convention to signal that if this + * test doesn't pass, the test case was not set up properly and it might + * explain any and all failures in other tests. This is not guaranteed + * to run before other tests, as junit uses reflection to find the tests. + */ + @MediumTest + public void testPreconditions() { + assertNotNull(mTextView); + } + + public void testTextViewContent() { + assertEquals("FredBarney", mTextView.getText()); + } +} + diff --git a/tests/libProguardJarDep/app/src/main/AndroidManifest.xml b/tests/libProguardJarDep/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4f8d570 --- /dev/null +++ b/tests/libProguardJarDep/app/src/main/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/libProguardJarDep/app/src/main/java/com/android/tests/basic/Main.java b/tests/libProguardJarDep/app/src/main/java/com/android/tests/basic/Main.java new file mode 100644 index 0000000..f5a6953 --- /dev/null +++ b/tests/libProguardJarDep/app/src/main/java/com/android/tests/basic/Main.java @@ -0,0 +1,31 @@ +package com.android.tests.basic; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.TextView; +import java.lang.reflect.Method; + +public class Main extends Activity +{ + + private int foo = 1234; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + TextView tv = (TextView) findViewById(R.id.dateText); + + try { + // use reflection to make sure the class wasn't obfuscated + Class theClass = Class.forName("com.android.tests.basic.StringGetter"); + Method method = theClass.getDeclaredMethod("getString"); + tv.setText((String) method.invoke(null)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/tests/libProguardJarDep/app/src/main/res/drawable/icon.png b/tests/libProguardJarDep/app/src/main/res/drawable/icon.png new file mode 100644 index 0000000..a07c69f Binary files /dev/null and b/tests/libProguardJarDep/app/src/main/res/drawable/icon.png differ diff --git a/tests/libProguardJarDep/app/src/main/res/layout/main.xml b/tests/libProguardJarDep/app/src/main/res/layout/main.xml new file mode 100644 index 0000000..89ab091 --- /dev/null +++ b/tests/libProguardJarDep/app/src/main/res/layout/main.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/tests/libProguardJarDep/app/src/main/res/values/strings.xml b/tests/libProguardJarDep/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..60ea2d0 --- /dev/null +++ b/tests/libProguardJarDep/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + _Test-Basic + diff --git a/tests/libProguardJarDep/build.gradle b/tests/libProguardJarDep/build.gradle new file mode 100644 index 0000000..62a4405 --- /dev/null +++ b/tests/libProguardJarDep/build.gradle @@ -0,0 +1,8 @@ +buildscript { + repositories { + maven { url '../../../../out/host/gradle/repo' } + } + dependencies { + classpath 'com.android.tools.build:gradle:0.5.0-SNAPSHOT' + } +} diff --git a/tests/libProguardJarDep/lib/build.gradle b/tests/libProguardJarDep/lib/build.gradle new file mode 100644 index 0000000..40cb840 --- /dev/null +++ b/tests/libProguardJarDep/lib/build.gradle @@ -0,0 +1,30 @@ +apply plugin: 'android-library' + +repositories { + mavenCentral() +} + +dependencies { + compile 'com.google.guava:guava:11.0.2' + compile fileTree(dir: 'libs', include: '*.jar') +} + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + proguardFile 'config.pro' + consumerProguardFiles 'config.pro' + } + debug { + runProguard true + } + release { + runProguard true + } +} diff --git a/tests/libProguardJarDep/lib/config.pro b/tests/libProguardJarDep/lib/config.pro new file mode 100644 index 0000000..c3fd7bd --- /dev/null +++ b/tests/libProguardJarDep/lib/config.pro @@ -0,0 +1,3 @@ +-keep public class com.android.tests.basic.StringGetter { + public static java.lang.String getString(); +} diff --git a/tests/libProguardJarDep/lib/libs/util-1.0.jar b/tests/libProguardJarDep/lib/libs/util-1.0.jar new file mode 100644 index 0000000..55471dc Binary files /dev/null and b/tests/libProguardJarDep/lib/libs/util-1.0.jar differ diff --git a/tests/libProguardJarDep/lib/src/main/AndroidManifest.xml b/tests/libProguardJarDep/lib/src/main/AndroidManifest.xml new file mode 100644 index 0000000..950a35a --- /dev/null +++ b/tests/libProguardJarDep/lib/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/tests/libProguardJarDep/lib/src/main/java/com/android/tests/basic/StringGetter.java b/tests/libProguardJarDep/lib/src/main/java/com/android/tests/basic/StringGetter.java new file mode 100644 index 0000000..e9e5e76 --- /dev/null +++ b/tests/libProguardJarDep/lib/src/main/java/com/android/tests/basic/StringGetter.java @@ -0,0 +1,23 @@ +package com.android.tests.basic; + +import java.lang.String; +import java.lang.StringBuffer; +import com.example.android.multiproject.person.People; +import com.example.android.multiproject.person.Person; + +public class StringGetter{ + + public static String getString() { + return getStringInternal(); + } + + private static String getStringInternal() { + StringBuffer sb = new StringBuffer(); + + Iterable people = new People(); + for (Person person : people) { + sb.append(person.getName()); + } + return sb.toString(); + } +} diff --git a/tests/libProguardJarDep/settings.gradle b/tests/libProguardJarDep/settings.gradle new file mode 100644 index 0000000..eedb2a1 --- /dev/null +++ b/tests/libProguardJarDep/settings.gradle @@ -0,0 +1,2 @@ +include 'app' +include 'lib' diff --git a/tests/libProguardJarDep/util/build.gradle b/tests/libProguardJarDep/util/build.gradle new file mode 100644 index 0000000..dff7725 --- /dev/null +++ b/tests/libProguardJarDep/util/build.gradle @@ -0,0 +1,8 @@ +apply plugin: 'java' + +dependencies { + compile 'com.google.guava:guava:11.0.2' +} + +sourceCompatibility = "1.6" +targetCompatibility = "1.6" diff --git a/tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/People.java b/tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/People.java new file mode 100644 index 0000000..8b99248 --- /dev/null +++ b/tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/People.java @@ -0,0 +1,10 @@ +package com.example.android.multiproject.person; + +import java.util.Iterator; +import com.google.common.collect.Lists; + +public class People implements Iterable { + public Iterator iterator() { + return Lists.newArrayList(new Person("Fred"), new Person("Barney")).iterator(); + } +} diff --git a/tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/Person.java b/tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/Person.java new file mode 100644 index 0000000..2f4aa9f --- /dev/null +++ b/tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/Person.java @@ -0,0 +1,13 @@ +package com.example.android.multiproject.person; + +public class Person { + private final String name; + + public Person(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/tests/libProguardLibDep/app/build.gradle b/tests/libProguardLibDep/app/build.gradle new file mode 100644 index 0000000..c52309a --- /dev/null +++ b/tests/libProguardLibDep/app/build.gradle @@ -0,0 +1,31 @@ +apply plugin: 'android' + +dependencies { + compile project(':lib') +} + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + testBuildType "proguard" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + } + + buildTypes { + proguard.initWith(buildTypes.debug) + proguard { + runProguard true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'config.pro' + } + } + + dexOptions { + incremental false + } +} diff --git a/tests/libProguardLibDep/app/config.pro b/tests/libProguardLibDep/app/config.pro new file mode 100644 index 0000000..e4aadb9 --- /dev/null +++ b/tests/libProguardLibDep/app/config.pro @@ -0,0 +1,3 @@ +-keep public class com.android.tests.basic.Main { + public void getObfuscatedMethod(); +} diff --git a/tests/libProguardLibDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java b/tests/libProguardLibDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java new file mode 100644 index 0000000..f7289d1 --- /dev/null +++ b/tests/libProguardLibDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java @@ -0,0 +1,54 @@ +package com.android.tests.basic; + +import android.test.ActivityInstrumentationTestCase2; +import android.test.suitebuilder.annotation.MediumTest; +import android.widget.TextView; + +import java.lang.NoSuchMethodException; + +public class MainTest extends ActivityInstrumentationTestCase2
{ + + private TextView mTextView; + + /** + * Creates an {@link ActivityInstrumentationTestCase2} that tests the {@link Main} activity. + */ + public MainTest() { + super(Main.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + final Main a = getActivity(); + // ensure a valid handle to the activity has been returned + assertNotNull(a); + mTextView = (TextView) a.findViewById(R.id.dateText); + } + + /** + * The name 'test preconditions' is a convention to signal that if this + * test doesn't pass, the test case was not set up properly and it might + * explain any and all failures in other tests. This is not guaranteed + * to run before other tests, as junit uses reflection to find the tests. + */ + @MediumTest + public void testPreconditions() { + assertNotNull(mTextView); + } + + public void testTextViewContent() { + assertEquals("1234", mTextView.getText()); + } + + public void testConsumerProguardRules() { + try { + final Main a = getActivity(); + a.getObfuscatedMethod(); + fail("Excepted NoSuchMethodError"); + } catch (NoSuchMethodException e) { + // test passed + } + } +} + diff --git a/tests/libProguardLibDep/app/src/main/AndroidManifest.xml b/tests/libProguardLibDep/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..4f8d570 --- /dev/null +++ b/tests/libProguardLibDep/app/src/main/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/libProguardLibDep/app/src/main/java/com/android/tests/basic/Main.java b/tests/libProguardLibDep/app/src/main/java/com/android/tests/basic/Main.java new file mode 100644 index 0000000..8faebcd --- /dev/null +++ b/tests/libProguardLibDep/app/src/main/java/com/android/tests/basic/Main.java @@ -0,0 +1,46 @@ +package com.android.tests.basic; + +import android.app.Activity; +import android.os.Bundle; +import android.widget.TextView; + +import java.lang.ClassNotFoundException; +import java.lang.NoSuchMethodException; +import java.lang.reflect.Method; + +public class Main extends Activity +{ + + private int foo = 1234; + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + TextView tv = (TextView) findViewById(R.id.dateText); + + try { + // use reflection to make sure the class wasn't obfuscated + Class theClass = Class.forName("com.android.tests.basic.StringGetter"); + Method method = theClass.getDeclaredMethod("getString", int.class); + tv.setText((String) method.invoke(null, foo)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * use reflection to get a method that should be obfuscated + */ + public void getObfuscatedMethod() throws NoSuchMethodException{ + try { + Class theClass = Class.forName("com.android.tests.basic.StringGetter"); + Method method = theClass.getDeclaredMethod("getStringInternal", int.class); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } +} diff --git a/tests/libProguardLibDep/app/src/main/res/drawable/icon.png b/tests/libProguardLibDep/app/src/main/res/drawable/icon.png new file mode 100644 index 0000000..a07c69f Binary files /dev/null and b/tests/libProguardLibDep/app/src/main/res/drawable/icon.png differ diff --git a/tests/libProguardLibDep/app/src/main/res/layout/main.xml b/tests/libProguardLibDep/app/src/main/res/layout/main.xml new file mode 100644 index 0000000..89ab091 --- /dev/null +++ b/tests/libProguardLibDep/app/src/main/res/layout/main.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/tests/libProguardLibDep/app/src/main/res/values/strings.xml b/tests/libProguardLibDep/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..60ea2d0 --- /dev/null +++ b/tests/libProguardLibDep/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + _Test-Basic + diff --git a/tests/libProguardLibDep/build.gradle b/tests/libProguardLibDep/build.gradle new file mode 100644 index 0000000..62a4405 --- /dev/null +++ b/tests/libProguardLibDep/build.gradle @@ -0,0 +1,8 @@ +buildscript { + repositories { + maven { url '../../../../out/host/gradle/repo' } + } + dependencies { + classpath 'com.android.tools.build:gradle:0.5.0-SNAPSHOT' + } +} diff --git a/tests/libProguardLibDep/lib/build.gradle b/tests/libProguardLibDep/lib/build.gradle new file mode 100644 index 0000000..ce3ccf6 --- /dev/null +++ b/tests/libProguardLibDep/lib/build.gradle @@ -0,0 +1,22 @@ +apply plugin: 'android-library' + +dependencies { + compile project(':lib2') +} + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + proguardFile 'config.pro' + consumerProguardFiles 'consumerRules.pro' + } + release { + runProguard true + } +} diff --git a/tests/libProguardLibDep/lib/config.pro b/tests/libProguardLibDep/lib/config.pro new file mode 100644 index 0000000..4cf7cba --- /dev/null +++ b/tests/libProguardLibDep/lib/config.pro @@ -0,0 +1,3 @@ +-keep public class com.android.tests.basic.StringGetter { + public static java.lang.String getString(int); +} diff --git a/tests/libProguardLibDep/lib/consumerRules.pro b/tests/libProguardLibDep/lib/consumerRules.pro new file mode 100644 index 0000000..d09be16 --- /dev/null +++ b/tests/libProguardLibDep/lib/consumerRules.pro @@ -0,0 +1,6 @@ +-keep public class com.android.tests.basic.StringGetter { + public static java.lang.String getString(int); +} +-keep public class com.android.tests.basic.StringGetter { + public static java.lang.String getStringInternal(int); +} diff --git a/tests/libProguardLibDep/lib/src/main/AndroidManifest.xml b/tests/libProguardLibDep/lib/src/main/AndroidManifest.xml new file mode 100644 index 0000000..950a35a --- /dev/null +++ b/tests/libProguardLibDep/lib/src/main/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + diff --git a/tests/libProguardLibDep/lib/src/main/java/com/android/tests/basic/StringGetter.java b/tests/libProguardLibDep/lib/src/main/java/com/android/tests/basic/StringGetter.java new file mode 100644 index 0000000..159f359 --- /dev/null +++ b/tests/libProguardLibDep/lib/src/main/java/com/android/tests/basic/StringGetter.java @@ -0,0 +1,23 @@ +package com.android.tests.basic; + +import java.lang.RuntimeException; +import java.lang.String; +import java.lang.reflect.Method; + +public class StringGetter{ + + public static String getString(int foo) { + return getStringInternal(foo); + } + + public static String getStringInternal(int foo) { + try { + // use reflection to make sure the class wasn't obfuscated + Class theClass = Class.forName("com.android.tests.basic.StringProvider"); + Method method = theClass.getDeclaredMethod("getString", int.class); + return (String) method.invoke(null, foo); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/tests/libProguardLibDep/lib2/build.gradle b/tests/libProguardLibDep/lib2/build.gradle new file mode 100644 index 0000000..78da4d4 --- /dev/null +++ b/tests/libProguardLibDep/lib2/build.gradle @@ -0,0 +1,18 @@ +apply plugin: 'android-library' + +android { + compileSdkVersion 15 + buildToolsVersion "18.0.1" + + defaultConfig { + versionCode 12 + versionName "2.0" + minSdkVersion 16 + targetSdkVersion 16 + proguardFile 'config.pro' + consumerProguardFiles 'config.pro' + } + release { + runProguard true + } +} diff --git a/tests/libProguardLibDep/lib2/config.pro b/tests/libProguardLibDep/lib2/config.pro new file mode 100644 index 0000000..3664f87 --- /dev/null +++ b/tests/libProguardLibDep/lib2/config.pro @@ -0,0 +1,3 @@ +-keep public class com.android.tests.basic.StringProvider { + public static java.lang.String getString(int); +} diff --git a/tests/libProguardLibDep/lib2/src/main/AndroidManifest.xml b/tests/libProguardLibDep/lib2/src/main/AndroidManifest.xml new file mode 100644 index 0000000..593a287 --- /dev/null +++ b/tests/libProguardLibDep/lib2/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + diff --git a/tests/libProguardLibDep/lib2/src/main/java/com/android/tests/basic/StringProvider.java b/tests/libProguardLibDep/lib2/src/main/java/com/android/tests/basic/StringProvider.java new file mode 100644 index 0000000..6d81901 --- /dev/null +++ b/tests/libProguardLibDep/lib2/src/main/java/com/android/tests/basic/StringProvider.java @@ -0,0 +1,8 @@ +package com.android.tests.basic; + +public class StringProvider { + + public static String getString(int foo) { + return Integer.toString(foo); + } +} diff --git a/tests/libProguardLibDep/settings.gradle b/tests/libProguardLibDep/settings.gradle new file mode 100644 index 0000000..d8ac2dc --- /dev/null +++ b/tests/libProguardLibDep/settings.gradle @@ -0,0 +1,3 @@ +include 'app' +include 'lib' +include 'lib2' diff --git a/tests/proguardLib/lib/build.gradle b/tests/proguardLib/lib/build.gradle index 3b209bf..efbffe6 100644 --- a/tests/proguardLib/lib/build.gradle +++ b/tests/proguardLib/lib/build.gradle @@ -9,6 +9,6 @@ android { versionName "2.0" minSdkVersion 16 targetSdkVersion 16 - proguardFile 'config.pro' + consumerProguardFiles 'config.pro' } -} \ No newline at end of file +} -- cgit v1.2.3