diff options
author | Wing Lam <lamwing@google.com> | 2013-08-20 16:38:23 -0700 |
---|---|---|
committer | Wing Lam <lamwing@google.com> | 2013-08-21 11:09:36 -0700 |
commit | c4986e7a0c8022817df8f6dabbab4e8a87bd0477 (patch) | |
tree | ba80b3f6c7fb5c15e6c44769790967fccf4462e2 /tests/libProguardLibDep | |
parent | 263c42c75f782fae79f029287b5cf3e12c19039e (diff) | |
download | build-c4986e7a0c8022817df8f6dabbab4e8a87bd0477.tar.gz |
ProGuard support for libraries.
Change-Id: I38069666a4cc9f84c07337f26bd6dcdb0b253548
Diffstat (limited to 'tests/libProguardLibDep')
19 files changed, 291 insertions, 0 deletions
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 Binary files differnew file mode 100644 index 0000000..a07c69f --- /dev/null +++ b/tests/libProguardLibDep/app/src/main/res/drawable/icon.png 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' |