diff --git a/samples/AconfigDemo/Android.bp b/samples/AconfigDemo/Android.bp index a85aaef8e..c36ebf89d 100644 --- a/samples/AconfigDemo/Android.bp +++ b/samples/AconfigDemo/Android.bp @@ -2,8 +2,8 @@ package { default_applicable_licenses: ["Android-Apache-2.0"], } -android_app { - name: "AconfigDemoActivity", +java_defaults { + name: "AconfigDemoActivityDefault", manifest: "AndroidManifest.xml", srcs: [ "src/**/*.java" @@ -11,7 +11,6 @@ android_app { platform_apis: true, certificate: "platform", static_libs: [ - "ContentLibs", "dagger2", "jsr330", ], @@ -30,6 +29,14 @@ android_app { plugins: ["dagger2-compiler"] } +android_app { + name: "AconfigDemoActivity", + defaults: ["AconfigDemoActivityDefault"], + static_libs: [ + "ContentLibs", + ] +} + aconfig_declarations { name: "aconfig_demo_flags", package: "com.example.android.aconfig.demo.flags", @@ -49,18 +56,24 @@ filegroup { ], } -java_library { - name: "ContentLibs", +java_defaults { + name: "ContentLibsDefault", + sdk_version: "current", srcs: [ ":ContentLibsFile", ], - sdk_version: "current", + libs: ["jsr330"], +} + +java_library { + name: "ContentLibs", + defaults: ["ContentLibsDefault"], static_libs: [ "aconfig_demo_flags_java_lib", ], - libs: ["jsr330"], } + cc_aconfig_library { name: "aconfig_demo_flags_c_lib", aconfig_declarations: "aconfig_demo_flags", @@ -103,3 +116,96 @@ rust_ffi_shared { "libaconfig_demo_flags_rust", ] } + +// Test setup + +// Create test verion of the jave flag library +// It needs to use the same aconfig_declarations as +// the production one +java_aconfig_library { + name: "aconfig_demo_flags_java_lib_test", + aconfig_declarations: "aconfig_demo_flags", + // host_supported is set to true here for test running + // one host, in tests/unittests/Android.bp + host_supported: true, + test: true +} + + +// Option 1 +// Create a test version of the library under testing +// The test version of this library shares the common +// settings in a java_defaults target with the production +// version library. The test version library statically +// links to the test flag library, and the production +// version library links to the production version flag +// library. + +java_library { + name: "ContentLibsTest1", + defaults: ["ContentLibsDefault"], + static_libs: [ + "aconfig_demo_flags_java_lib_test", + ], +} + +// Create the test version of the android_app. This app is used +// for self-instrumentation test. This app uses the test version +// of the library which uses flags. +// Please check tests/unittests/Android.bp:AconfigDemoUnitTests1 +android_app { + name: "AconfigDemoActivityTest1", + defaults: ["AconfigDemoActivityDefault"], + optimize: { + enabled: false, + }, + static_libs: [ + "ContentLibsTest1", + ] +} + +// Option 2 +// Instead of creating two verions of the library containing flags, +// it could work that create one version of the library and dynamically +// link to the flag library. The flag library here just works as a stub +// library for the purpose of building. The real flag library should be +// statically linked in the final binary. + + +// This library is created to demonstrate dynamically linking to flag +// library +java_library { + name: "ContentLibs2", + defaults: ["ContentLibsDefault"], + sdk_version: "current", + libs: [ + // link the flag library for building purpose + "aconfig_demo_flags_java_lib", + ], +} + +// This app is created to demonstrate the production version of the app +// statically links to the production version of the flag library. +android_app { + name: "AconfigDemoActivity2", + defaults: ["AconfigDemoActivityDefault"], + static_libs: [ + "ContentLibs2", + "aconfig_demo_flags_java_lib", + ] +} + +// This app is created to demonstrate the test version of app uses the same +// ContentLibs2 library, but links to test version of the flag library. +// Please check tests/unittests/Android.bp:AconfigDemoUnitTests2 +android_app { + name: "AconfigDemoActivityTest2", + defaults: ["AconfigDemoActivityDefault"], + optimize: { + enabled: false, + }, + static_libs: [ + "ContentLibs2", + "aconfig_demo_flags_java_lib", + ] +} diff --git a/samples/AconfigDemo/tests/unittests/AconfigDemoUnitTests1.xml b/samples/AconfigDemo/tests/unittests/AconfigDemoUnitTests1.xml new file mode 100644 index 000000000..996f82563 --- /dev/null +++ b/samples/AconfigDemo/tests/unittests/AconfigDemoUnitTests1.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/AconfigDemo/tests/unittests/AconfigDemoUnitTests2.xml b/samples/AconfigDemo/tests/unittests/AconfigDemoUnitTests2.xml new file mode 100644 index 000000000..0fe257447 --- /dev/null +++ b/samples/AconfigDemo/tests/unittests/AconfigDemoUnitTests2.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/AconfigDemo/tests/unittests/Android.bp b/samples/AconfigDemo/tests/unittests/Android.bp index 627ea0456..ddd553edf 100644 --- a/samples/AconfigDemo/tests/unittests/Android.bp +++ b/samples/AconfigDemo/tests/unittests/Android.bp @@ -1,26 +1,19 @@ -java_aconfig_library { - name: "aconfig_demo_flags_lib_test", - aconfig_declarations: "aconfig_demo_flags", - host_supported: true, - test: true -} - java_library_host { - name: "ContentLibs_test", + name: "ContentLibsHost", srcs: [ ":ContentLibsFile", ], static_libs: [ - "aconfig_demo_flags_lib_test", + "aconfig_demo_flags_java_lib_test", ], libs: ["jsr330"], } java_test_host { - name: "ContentLibs_test_host", + name: "ContentLibsTestHost", srcs: ["*.java"], static_libs: [ - "ContentLibs_test", + "ContentLibsHost", "junit", "flag-junit-base", ], @@ -29,3 +22,35 @@ java_test_host { }, test_suites: ["general-tests"], } + +android_test { + name: "AconfigDemoUnitTests1", + srcs: ["*.java"], + certificate: "platform", + static_libs: [ + "junit", + "androidx.test.runner", + "flag-junit-base", + "platform-test-annotations", + ], + manifest: "AndroidManifest.xml", + test_config: "AconfigDemoUnitTests1.xml", + data: [":AconfigDemoActivityTest1"], + instrumentation_for: "AconfigDemoActivityTest1", +} + +android_test { + name: "AconfigDemoUnitTests2", + srcs: ["*.java"], + certificate: "platform", + static_libs: [ + "junit", + "androidx.test.runner", + "flag-junit-base", + "platform-test-annotations", + ], + manifest: "AndroidManifest.xml", + test_config: "AconfigDemoUnitTests2.xml", + data: [":AconfigDemoActivityTest2"], + instrumentation_for: "AconfigDemoActivityTest2", +} \ No newline at end of file diff --git a/samples/AconfigDemo/tests/unittests/AndroidManifest.xml b/samples/AconfigDemo/tests/unittests/AndroidManifest.xml new file mode 100644 index 000000000..6a59f639e --- /dev/null +++ b/samples/AconfigDemo/tests/unittests/AndroidManifest.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + +