aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorWing Lam <lamwing@google.com>2013-08-20 16:38:23 -0700
committerWing Lam <lamwing@google.com>2013-08-21 11:09:36 -0700
commitc4986e7a0c8022817df8f6dabbab4e8a87bd0477 (patch)
treeba80b3f6c7fb5c15e6c44769790967fccf4462e2 /tests
parent263c42c75f782fae79f029287b5cf3e12c19039e (diff)
downloadbuild-c4986e7a0c8022817df8f6dabbab4e8a87bd0477.tar.gz
ProGuard support for libraries.
Change-Id: I38069666a4cc9f84c07337f26bd6dcdb0b253548
Diffstat (limited to 'tests')
-rw-r--r--tests/libProguard/build.gradle26
-rw-r--r--tests/libProguard/config.pro3
-rw-r--r--tests/libProguard/src/main/AndroidManifest.xml4
-rw-r--r--tests/libProguard/src/main/java/com/android/tests/basic/StringProvider.java11
-rw-r--r--tests/libProguardConsumerFiles/A.txt1
-rw-r--r--tests/libProguardConsumerFiles/B.txt1
-rw-r--r--tests/libProguardConsumerFiles/C.txt1
-rw-r--r--tests/libProguardConsumerFiles/build.gradle32
-rw-r--r--tests/libProguardConsumerFiles/config.pro3
-rw-r--r--tests/libProguardConsumerFiles/src/main/AndroidManifest.xml4
-rw-r--r--tests/libProguardConsumerFiles/src/main/java/com/android/tests/basic/StringProvider.java11
-rw-r--r--tests/libProguardJarDep/app/build.gradle35
-rw-r--r--tests/libProguardJarDep/app/config.pro2
-rw-r--r--tests/libProguardJarDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java42
-rw-r--r--tests/libProguardJarDep/app/src/main/AndroidManifest.xml30
-rw-r--r--tests/libProguardJarDep/app/src/main/java/com/android/tests/basic/Main.java31
-rw-r--r--tests/libProguardJarDep/app/src/main/res/drawable/icon.pngbin0 -> 2574 bytes
-rw-r--r--tests/libProguardJarDep/app/src/main/res/layout/main.xml20
-rw-r--r--tests/libProguardJarDep/app/src/main/res/values/strings.xml4
-rw-r--r--tests/libProguardJarDep/build.gradle8
-rw-r--r--tests/libProguardJarDep/lib/build.gradle30
-rw-r--r--tests/libProguardJarDep/lib/config.pro3
-rw-r--r--tests/libProguardJarDep/lib/libs/util-1.0.jarbin0 -> 1997 bytes
-rw-r--r--tests/libProguardJarDep/lib/src/main/AndroidManifest.xml5
-rw-r--r--tests/libProguardJarDep/lib/src/main/java/com/android/tests/basic/StringGetter.java23
-rw-r--r--tests/libProguardJarDep/settings.gradle2
-rw-r--r--tests/libProguardJarDep/util/build.gradle8
-rw-r--r--tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/People.java10
-rw-r--r--tests/libProguardJarDep/util/src/main/java/com/example/android/multiproject/person/Person.java13
-rw-r--r--tests/libProguardLibDep/app/build.gradle31
-rw-r--r--tests/libProguardLibDep/app/config.pro3
-rw-r--r--tests/libProguardLibDep/app/src/instrumentTest/java/com/android/tests/basic/MainTest.java54
-rw-r--r--tests/libProguardLibDep/app/src/main/AndroidManifest.xml30
-rw-r--r--tests/libProguardLibDep/app/src/main/java/com/android/tests/basic/Main.java46
-rw-r--r--tests/libProguardLibDep/app/src/main/res/drawable/icon.pngbin0 -> 2574 bytes
-rw-r--r--tests/libProguardLibDep/app/src/main/res/layout/main.xml20
-rw-r--r--tests/libProguardLibDep/app/src/main/res/values/strings.xml4
-rw-r--r--tests/libProguardLibDep/build.gradle8
-rw-r--r--tests/libProguardLibDep/lib/build.gradle22
-rw-r--r--tests/libProguardLibDep/lib/config.pro3
-rw-r--r--tests/libProguardLibDep/lib/consumerRules.pro6
-rw-r--r--tests/libProguardLibDep/lib/src/main/AndroidManifest.xml5
-rw-r--r--tests/libProguardLibDep/lib/src/main/java/com/android/tests/basic/StringGetter.java23
-rw-r--r--tests/libProguardLibDep/lib2/build.gradle18
-rw-r--r--tests/libProguardLibDep/lib2/config.pro3
-rw-r--r--tests/libProguardLibDep/lib2/src/main/AndroidManifest.xml4
-rw-r--r--tests/libProguardLibDep/lib2/src/main/java/com/android/tests/basic/StringProvider.java8
-rw-r--r--tests/libProguardLibDep/settings.gradle3
-rw-r--r--tests/proguardLib/lib/build.gradle4
49 files changed, 656 insertions, 2 deletions
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+</manifest>
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+</manifest>
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<Main> {
+
+ 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+ <application android:label="@string/app_name" android:icon="@drawable/icon">
+ <activity android:name=".Main"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+ <uses-permission android:name="com.blah" />
+
+ <permission-group android:name="foo.permission-group.COST_MONEY"
+ android:label="@string/app_name"
+ android:description="@string/app_name" />
+
+ <permission android:name="foo.permission.SEND_SMS"
+ android:permissionGroup="foo.permission-group.COST_MONEY"
+ android:label="@string/app_name"
+ android:description="@string/app_name" />
+
+ <permission android:name="foo.blah.SEND_SMS"
+ android:permissionGroup="foo.permission-group.COST_MONEY"
+ android:label="@string/app_name"
+ android:description="@string/app_name" />
+
+</manifest>
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
--- /dev/null
+++ b/tests/libProguardJarDep/app/src/main/res/drawable/icon.png
Binary files 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Test App - Basic"
+ android:id="@+id/text"
+ />
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text=""
+ android:id="@+id/dateText"
+ />
+</LinearLayout>
+
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">_Test-Basic</string>
+</resources>
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
--- /dev/null
+++ b/tests/libProguardJarDep/lib/libs/util-1.0.jar
Binary files 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+ <application />
+</manifest>
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<Person> 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<Person> {
+ public Iterator<Person> 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<Main> {
+
+ 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+ <application android:label="@string/app_name" android:icon="@drawable/icon">
+ <activity android:name=".Main"
+ android:label="@string/app_name">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ </application>
+
+ <uses-permission android:name="com.blah" />
+
+ <permission-group android:name="foo.permission-group.COST_MONEY"
+ android:label="@string/app_name"
+ android:description="@string/app_name" />
+
+ <permission android:name="foo.permission.SEND_SMS"
+ android:permissionGroup="foo.permission-group.COST_MONEY"
+ android:label="@string/app_name"
+ android:description="@string/app_name" />
+
+ <permission android:name="foo.blah.SEND_SMS"
+ android:permissionGroup="foo.permission-group.COST_MONEY"
+ android:label="@string/app_name"
+ android:description="@string/app_name" />
+
+</manifest>
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
--- /dev/null
+++ b/tests/libProguardLibDep/app/src/main/res/drawable/icon.png
Binary files 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text="Test App - Basic"
+ android:id="@+id/text"
+ />
+<TextView
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:text=""
+ android:id="@+id/dateText"
+ />
+</LinearLayout>
+
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="app_name">_Test-Basic</string>
+</resources>
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+ <application />
+</manifest>
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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.tests.basic">
+</manifest>
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
+}