diff options
author | Matthew Newhook <matthew@zeroc.com> | 2014-11-05 16:50:16 -0330 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2014-11-05 16:50:16 -0330 |
commit | c173e3a2c70e2624372095aff7b14cfe9e003ed7 (patch) | |
tree | 0df2bf5aca5615bdd31ff3fb200536e1538fa8c4 /android | |
parent | Fixed copyright header on a bunch of files (diff) | |
download | ice-c173e3a2c70e2624372095aff7b14cfe9e003ed7.tar.bz2 ice-c173e3a2c70e2624372095aff7b14cfe9e003ed7.tar.xz ice-c173e3a2c70e2624372095aff7b14cfe9e003ed7.zip |
Fixes for Android to correctly support Android studio and gradle builds.
Fix to the SSL plugin for Android.
Removed some unused code in the SSL transceiver.
Diffstat (limited to 'android')
38 files changed, 937 insertions, 551 deletions
diff --git a/android/.idea/codeStyleSettings.xml b/android/.idea/codeStyleSettings.xml index 29ab470ca5f..15d5d02a710 100644 --- a/android/.idea/codeStyleSettings.xml +++ b/android/.idea/codeStyleSettings.xml @@ -3,172 +3,32 @@ <component name="ProjectCodeStyleSettingsManager"> <option name="PER_PROJECT_SETTINGS"> <value> - <option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" /> - <option name="NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND" value="99" /> - <option name="PACKAGES_TO_USE_IMPORT_ON_DEMAND"> - <value /> - </option> - <option name="IMPORT_LAYOUT_TABLE"> - <value> - <package name="android" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="com" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="junit" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="net" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="org" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="java" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="javax" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="" withSubpackages="true" static="false" /> - <emptyLine /> - <package name="" withSubpackages="true" static="true" /> - <emptyLine /> - </value> - </option> - <option name="RIGHT_MARGIN" value="100" /> - <AndroidXmlCodeStyleSettings> - <option name="USE_CUSTOM_SETTINGS" value="true" /> - </AndroidXmlCodeStyleSettings> <XML> <option name="XML_LEGACY_SETTINGS_IMPORTED" value="true" /> </XML> - <codeStyleSettings language="XML"> - <option name="FORCE_REARRANGE_MODE" value="1" /> - <indentOptions> - <option name="CONTINUATION_INDENT_SIZE" value="4" /> - </indentOptions> - <arrangement> - <rules> - <rule> - <match> - <AND> - <NAME>xmlns:android</NAME> - <XML_NAMESPACE>Namespace:</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>xmlns:.*</NAME> - <XML_NAMESPACE>Namespace:</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - <rule> - <match> - <AND> - <NAME>.*:id</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>.*:name</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>name</NAME> - <XML_NAMESPACE>^$</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>style</NAME> - <XML_NAMESPACE>^$</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>.*</NAME> - <XML_NAMESPACE>^$</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - <rule> - <match> - <AND> - <NAME>.*:layout_width</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>.*:layout_height</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - </rule> - <rule> - <match> - <AND> - <NAME>.*:layout_.*</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - <rule> - <match> - <AND> - <NAME>.*:width</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - <rule> - <match> - <AND> - <NAME>.*:height</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - <rule> - <match> - <AND> - <NAME>.*</NAME> - <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - <rule> - <match> - <AND> - <NAME>.*</NAME> - <XML_NAMESPACE>.*</XML_NAMESPACE> - </AND> - </match> - <order>BY_NAME</order> - </rule> - </rules> - </arrangement> + <codeStyleSettings language="JAVA"> + <option name="BRACE_STYLE" value="2" /> + <option name="CLASS_BRACE_STYLE" value="2" /> + <option name="METHOD_BRACE_STYLE" value="2" /> + <option name="ELSE_ON_NEW_LINE" value="true" /> + <option name="WHILE_ON_NEW_LINE" value="true" /> + <option name="CATCH_ON_NEW_LINE" value="true" /> + <option name="FINALLY_ON_NEW_LINE" value="true" /> + <option name="SPACE_BEFORE_IF_PARENTHESES" value="false" /> + <option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" /> + <option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" /> + <option name="SPACE_BEFORE_TRY_PARENTHESES" value="false" /> + <option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" /> + <option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" /> + <option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="false" /> + <option name="IF_BRACE_FORCE" value="3" /> + <option name="DOWHILE_BRACE_FORCE" value="3" /> + <option name="WHILE_BRACE_FORCE" value="3" /> + <option name="FOR_BRACE_FORCE" value="3" /> </codeStyleSettings> </value> </option> - <option name="PREFERRED_PROJECT_CODE_STYLE" value="Default (1)" /> + <option name="USE_PER_PROJECT_SETTINGS" value="true" /> </component> </project> diff --git a/android/.idea/gradle.xml b/android/.idea/gradle.xml index ed08fa67f9a..2f43923293d 100644 --- a/android/.idea/gradle.xml +++ b/android/.idea/gradle.xml @@ -22,6 +22,49 @@ <option value="$PROJECT_DIR$/src/IceStorm" /> <option value="$PROJECT_DIR$/test" /> <option value="$PROJECT_DIR$/test/android" /> + <option value="$PROJECT_DIR$/test/plugins" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_acm" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_adapterDeactivation" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_admin" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_ami" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_background" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_binding" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_checksum" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_classLoader" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_custom" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_defaultServant" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_defaultValue" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_dispatcher" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_echo" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_enums" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_exceptions" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_facets" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_hash" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_hold" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_info" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_inheritance" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_interceptor" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_interrupt" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_invoke" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_location" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_networkProxy" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_objects" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_operations" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_optional" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_packagemd" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_plugin" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_properties" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_proxy" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_retry" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_seqMapping" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_serialize" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_servantLocator" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_slicing_exceptions" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_slicing_objects" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_stream" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_threadPoolPriority" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_timeout" /> + <option value="$PROJECT_DIR$/test/src/test_Ice_udp" /> </set> </option> </GradleProjectSettings> diff --git a/android/.idea/modules.xml b/android/.idea/modules.xml index c93f91c26d2..f532c8a12fd 100644 --- a/android/.idea/modules.xml +++ b/android/.idea/modules.xml @@ -16,6 +16,8 @@ <module fileurl="file://$PROJECT_DIR$/demo/library/library.iml" filepath="$PROJECT_DIR$/demo/library/library.iml" /> <module fileurl="file://$PROJECT_DIR$/test/test.iml" filepath="$PROJECT_DIR$/test/test.iml" /> <module fileurl="file://$PROJECT_DIR$/test/android/testApp.iml" filepath="$PROJECT_DIR$/test/android/testApp.iml" /> + <module fileurl="file://$PROJECT_DIR$/test/plugins/testPlugins.iml" filepath="$PROJECT_DIR$/test/plugins/testPlugins.iml" /> + <module fileurl="file://$PROJECT_DIR$/test/src/test_Ice_acm/test_Ice_acm.iml" filepath="$PROJECT_DIR$/test/src/test_Ice_acm/test_Ice_acm.iml" /> </modules> </component> </project> diff --git a/android/build.gradle b/android/build.gradle index 5e5ae489398..5fe204941cd 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -12,7 +12,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:0.12.2' + classpath 'com.android.tools.build:gradle:0.13.+' } } @@ -20,10 +20,10 @@ subprojects { apply plugin: 'idea' // The Android versions used by subprojects. - ext.ice_compileSdkVersion = 17 - ext.ice_buildToolsVersion = "21.0.1" - ext.ice_minSdkVersion = 17 - ext.ice_targetSdkVersion = 17 + ext.ice_compileSdkVersion = 21 + ext.ice_buildToolsVersion = "21.1.0" + ext.ice_minSdkVersion = 21 + ext.ice_targetSdkVersion = 21 repositories { maven { diff --git a/android/buildSrc/buildSrc.iml b/android/buildSrc/buildSrc.iml index 2f43c9e723a..bd7e184bff9 100644 --- a/android/buildSrc/buildSrc.iml +++ b/android/buildSrc/buildSrc.iml @@ -34,48 +34,33 @@ </content> <orderEntry type="inheritedJdk" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" exported="" name="gradle-core-1.12" level="project" /> - <orderEntry type="library" exported="" name="groovy-all-1.8.6" level="project" /> - <orderEntry type="library" exported="" name="asm-all-5.0_BETA" level="project" /> + <orderEntry type="library" exported="" name="gradle-core-2.1" level="project" /> + <orderEntry type="library" exported="" name="groovy-all-2.3.6" level="project" /> + <orderEntry type="library" exported="" name="asm-all-5.0.3" level="project" /> <orderEntry type="library" exported="" name="ant-1.9.3" level="project" /> <orderEntry type="library" exported="" name="commons-collections-3.2.1" level="project" /> <orderEntry type="library" exported="" name="commons-io-1.4" level="project" /> <orderEntry type="library" exported="" name="commons-lang-2.6" level="project" /> - <orderEntry type="library" exported="" name="ivy-2.2.0" level="project" /> <orderEntry type="library" exported="" name="logback-core-1.0.13" level="project" /> <orderEntry type="library" exported="" name="logback-classic-1.0.13" level="project" /> - <orderEntry type="library" exported="" name="guava-jdk5-14.0.1" level="project" /> + <orderEntry type="library" exported="" name="guava-jdk5-17.0" level="project" /> <orderEntry type="library" exported="" name="jcip-annotations-1.0" level="project" /> <orderEntry type="library" exported="" name="jul-to-slf4j-1.7.5" level="project" /> <orderEntry type="library" exported="" name="jarjar-1.3" level="project" /> <orderEntry type="library" exported="" name="javax.inject-1" level="project" /> - <orderEntry type="library" exported="" name="bintray-client-java-impl-0.1.0" level="project" /> - <orderEntry type="library" exported="" name="httpclient-4.2.2" level="project" /> <orderEntry type="library" exported="" name="slf4j-api-1.7.5" level="project" /> <orderEntry type="library" exported="" name="log4j-over-slf4j-1.7.5" level="project" /> <orderEntry type="library" exported="" name="jcl-over-slf4j-1.7.5" level="project" /> <orderEntry type="library" exported="" name="ant-launcher-1.9.3" level="project" /> - <orderEntry type="library" exported="" name="jsch-0.1.51" level="project" /> - <orderEntry type="library" exported="" name="joda-time-2.3" level="project" /> - <orderEntry type="library" exported="" name="bintray-client-java-api-0.1.0" level="project" /> - <orderEntry type="library" exported="" name="commons-logging-1.1.1" level="project" /> - <orderEntry type="library" exported="" name="commons-beanutils-1.8.0" level="project" /> - <orderEntry type="library" exported="" name="ezmorph-1.0.6" level="project" /> - <orderEntry type="library" exported="" name="json-lib-2.3-jdk15" level="project" /> - <orderEntry type="library" exported="" name="xml-resolver-1.2" level="project" /> - <orderEntry type="library" exported="" name="http-builder-0.6" level="project" /> - <orderEntry type="library" exported="" name="commons-codec-1.6" level="project" /> - <orderEntry type="library" exported="" name="httpcore-4.2.2" level="project" /> - <orderEntry type="library" exported="" name="jcifs-1.3.17" level="project" /> - <orderEntry type="library" exported="" name="gradle-docs-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-base-services-groovy-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-base-services-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-resources-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-cli-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-native-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-docs-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-model-core-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-base-services-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-model-groovy-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-base-services-groovy-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-cli-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-native-2.1" level="project" /> <orderEntry type="library" exported="" name="jna-3.2.7" level="project" /> <orderEntry type="library" exported="" name="native-platform-0.10" level="project" /> - <orderEntry type="library" exported="" name="jna-posix-1.0.3" level="project" /> <orderEntry type="library" exported="" name="jansi-1.2.1" level="project" /> <orderEntry type="library" exported="" name="native-platform-osx-i386-0.10" level="project" /> <orderEntry type="library" exported="" name="native-platform-osx-amd64-0.10" level="project" /> @@ -85,13 +70,13 @@ <orderEntry type="library" exported="" name="native-platform-windows-i386-0.10" level="project" /> <orderEntry type="library" exported="" name="native-platform-freebsd-i386-0.10" level="project" /> <orderEntry type="library" exported="" name="native-platform-freebsd-amd64-0.10" level="project" /> - <orderEntry type="library" exported="" name="gradle-messaging-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-messaging-2.1" level="project" /> <orderEntry type="library" exported="" name="kryo-2.20" level="project" /> - <orderEntry type="library" exported="" name="asm-4.0" level="project" /> <orderEntry type="library" exported="" name="reflectasm-1.07-shaded" level="project" /> <orderEntry type="library" exported="" name="minlog-1.2" level="project" /> <orderEntry type="library" exported="" name="objenesis-1.2" level="project" /> - <orderEntry type="library" exported="" name="gradle-core-impl-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-resources-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-core-impl-2.1" level="project" /> <orderEntry type="library" exported="" name="jarjar-maven-settings-3.0.4" level="project" /> <orderEntry type="library" exported="" name="jarjar-maven-repository-metadata-3.0.4" level="project" /> <orderEntry type="library" exported="" name="jarjar-plexus-container-default-1.5.5" level="project" /> @@ -117,13 +102,24 @@ <orderEntry type="library" exported="" name="jarjar-maven-artifact-3.0.4" level="project" /> <orderEntry type="library" exported="" name="jarjar-maven-model-3.0.4" level="project" /> <orderEntry type="library" exported="" name="jarjar-aether-impl-1.13.1" level="project" /> + <orderEntry type="library" exported="" name="ivy-2.2.0" level="project" /> <orderEntry type="library" exported="" name="maven-ant-tasks-2.1.3" level="project" /> - <orderEntry type="library" exported="" name="nekohtml-1.9.14" level="project" /> + <orderEntry type="library" exported="" name="jsch-0.1.51" level="project" /> + <orderEntry type="library" exported="" name="gson-2.2.4" level="project" /> <orderEntry type="library" exported="" name="xbean-reflect-3.4" level="project" /> + <orderEntry type="library" exported="" name="bcprov-jdk15-1.46" level="project" /> + <orderEntry type="library" exported="" name="gradle-resources-http-2.1" level="project" /> + <orderEntry type="library" exported="" name="httpclient-4.2.2" level="project" /> + <orderEntry type="library" exported="" name="nekohtml-1.9.14" level="project" /> + <orderEntry type="library" exported="" name="commons-codec-1.6" level="project" /> + <orderEntry type="library" exported="" name="httpcore-4.2.2" level="project" /> + <orderEntry type="library" exported="" name="jcifs-1.3.17" level="project" /> <orderEntry type="library" exported="" name="xml-apis-1.3.04" level="project" /> <orderEntry type="library" exported="" name="xercesImpl-2.9.1" level="project" /> - <orderEntry type="library" exported="" name="gradle-tooling-api-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-plugins-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-plugin-use-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-tooling-api-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-wrapper-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-plugins-2.1" level="project" /> <orderEntry type="library" exported="" name="junit-4.11" level="project" /> <orderEntry type="library" exported="" name="testng-6.3.1" level="project" /> <orderEntry type="library" exported="" name="commons-cli-1.2" level="project" /> @@ -131,8 +127,8 @@ <orderEntry type="library" exported="" name="jcommander-1.12" level="project" /> <orderEntry type="library" exported="" name="snakeyaml-1.6" level="project" /> <orderEntry type="library" exported="" name="hamcrest-core-1.3" level="project" /> - <orderEntry type="library" exported="" name="gradle-code-quality-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-jetty-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-code-quality-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-jetty-2.1" level="project" /> <orderEntry type="library" exported="" name="jetty-6.1.25" level="project" /> <orderEntry type="library" exported="" name="jetty-util-6.1.25" level="project" /> <orderEntry type="library" exported="" name="servlet-api-2.5-20081211" level="project" /> @@ -143,41 +139,39 @@ <orderEntry type="library" exported="" name="jetty-naming-6.1.25" level="project" /> <orderEntry type="library" exported="" name="core-3.1.1" level="project" /> <orderEntry type="library" exported="" name="jsp-api-2.1-6.1.14" level="project" /> - <orderEntry type="library" exported="" name="gradle-antlr-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-antlr-2.1" level="project" /> <orderEntry type="library" exported="" name="ant-antlr-1.9.3" level="project" /> <orderEntry type="library" exported="" name="antlr-2.7.7" level="project" /> - <orderEntry type="library" exported="" name="gradle-wrapper-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-osgi-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-osgi-2.1" level="project" /> <orderEntry type="library" exported="" name="bndlib-2.1.0" level="project" /> - <orderEntry type="library" exported="" name="gradle-maven-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-maven-2.1" level="project" /> <orderEntry type="library" exported="" name="pmaven-common-0.8-20100325" level="project" /> <orderEntry type="library" exported="" name="pmaven-groovy-0.8-20100325" level="project" /> <orderEntry type="library" exported="" name="plexus-component-annotations-1.5.2" level="project" /> - <orderEntry type="library" exported="" name="gradle-ide-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-announce-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-scala-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-sonar-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-ide-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-announce-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-scala-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-sonar-2.1" level="project" /> <orderEntry type="library" exported="" name="sonar-runner-2.0" level="project" /> <orderEntry type="library" exported="" name="sonar-batch-bootstrapper-2.9" level="project" /> - <orderEntry type="library" exported="" name="gradle-signing-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-signing-2.1" level="project" /> <orderEntry type="library" exported="" name="bcpg-jdk15-1.46" level="project" /> - <orderEntry type="library" exported="" name="bcprov-jdk15-1.46" level="project" /> - <orderEntry type="library" exported="" name="gradle-cpp-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-ear-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-javascript-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-cpp-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-ear-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-javascript-2.1" level="project" /> <orderEntry type="library" exported="" name="rhino-1.7R3" level="project" /> - <orderEntry type="library" exported="" name="gson-2.2.4" level="project" /> <orderEntry type="library" exported="" name="simple-4.1.21" level="project" /> - <orderEntry type="library" exported="" name="gradle-build-comparison-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-diagnostics-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-reporting-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-build-comparison-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-diagnostics-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-reporting-2.1" level="project" /> <orderEntry type="library" exported="" name="jatl-0.2.2" level="project" /> - <orderEntry type="library" exported="" name="gradle-publish-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-ivy-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-jacoco-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-build-init-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-language-jvm-1.12" level="project" /> - <orderEntry type="library" exported="" name="gradle-language-base-1.12" level="project" /> + <orderEntry type="library" exported="" name="gradle-publish-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-ivy-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-jacoco-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-build-init-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-language-jvm-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-language-base-2.1" level="project" /> + <orderEntry type="library" exported="" name="gradle-plugin-development-2.1" level="project" /> </component> </module> diff --git a/android/demo/chat/chat.iml b/android/demo/chat/chat.iml index 20560d268c1..d6a2b1593d9 100644 --- a/android/demo/chat/chat.iml +++ b/android/demo/chat/chat.iml @@ -10,7 +10,7 @@ <configuration> <option name="SELECTED_BUILD_VARIANT" value="debug" /> <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> - <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" /> + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" /> <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" /> <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" /> @@ -79,8 +79,9 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> + <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> - <orderEntry type="jdk" jdkName="Android API 17 Platform" jdkType="Android SDK" /> + <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" exported="" name="Ice" level="project" /> <orderEntry type="library" exported="" name="Glacier2" level="project" /> diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java b/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java index d52fd1fcf99..fcbe4de9b28 100644 --- a/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java +++ b/android/demo/chat/src/main/java/com/zeroc/chat/LoginActivity.java @@ -186,17 +186,6 @@ public class LoginActivity extends Activity super.onCreate(savedInstanceState); setContentView(R.layout.login); - if(VERSION.SDK_INT == 8) // android.os.Build.VERSION_CODES.FROYO (8) - { - // - // Workaround for a bug in Android 2.2 (Froyo). - // - // See http://code.google.com/p/android/issues/detail?id=9431 - // - java.lang.System.setProperty("java.net.preferIPv4Stack", "true"); - java.lang.System.setProperty("java.net.preferIPv6Addresses", "false"); - } - _login = (Button)findViewById(R.id.login); _login.setOnClickListener(new android.view.View.OnClickListener() { @@ -243,7 +232,7 @@ public class LoginActivity extends Activity _password = (EditText)findViewById(R.id.password); _secure = (CheckBox)findViewById(R.id.secure); - _secure.setEnabled(VERSION.SDK_INT >= 8); // android.os.Build.VERSION_CODES.FROYO (8) + _secure.setEnabled(true); _prefs = getPreferences(MODE_PRIVATE); diff --git a/android/demo/chat/src/main/java/com/zeroc/chat/service/AppSession.java b/android/demo/chat/src/main/java/com/zeroc/chat/service/AppSession.java index 28bf2e16d04..22edfec9862 100644 --- a/android/demo/chat/src/main/java/com/zeroc/chat/service/AppSession.java +++ b/android/demo/chat/src/main/java/com/zeroc/chat/service/AppSession.java @@ -15,6 +15,7 @@ import java.util.LinkedList; import java.util.List; import java.util.UUID; +import android.os.Build; import com.zeroc.chat.R; import android.content.res.Resources; @@ -56,6 +57,12 @@ public class AppSession initData.properties.setProperty("IceSSL.TruststoreType", "BKS"); initData.properties.setProperty("IceSSL.Password", "password"); + // SDK versions < 21 only support TLSv1 with SSLEngine. + if(Build.VERSION.SDK_INT < 21) + { + initData.properties.setProperty("IceSSL.Protocols", "tls1_0"); + } + _communicator = Ice.Util.initialize(initData); _hostname = hostname; diff --git a/android/demo/hello/hello.iml b/android/demo/hello/hello.iml index 7e3188ac8f1..4b44ac3ad2f 100644 --- a/android/demo/hello/hello.iml +++ b/android/demo/hello/hello.iml @@ -10,7 +10,7 @@ <configuration> <option name="SELECTED_BUILD_VARIANT" value="debug" /> <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> - <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" /> + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" /> <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" /> <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" /> @@ -79,8 +79,9 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> + <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> - <orderEntry type="jdk" jdkName="Android API 17 Platform" jdkType="Android SDK" /> + <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" exported="" name="Ice" level="project" /> </component> diff --git a/android/demo/hello/project.properties b/android/demo/hello/project.properties deleted file mode 100644 index a3ee5ab64f5..00000000000 --- a/android/demo/hello/project.properties +++ /dev/null @@ -1,14 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-17 diff --git a/android/demo/hello/src/main/java/com/zeroc/hello/.gitignore b/android/demo/hello/src/main/java/com/zeroc/hello/.gitignore deleted file mode 100644 index 48c0296968b..00000000000 --- a/android/demo/hello/src/main/java/com/zeroc/hello/.gitignore +++ /dev/null @@ -1 +0,0 @@ -R.java diff --git a/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java b/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java index 8923e84f28b..b53905d4502 100644 --- a/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java +++ b/android/demo/hello/src/main/java/com/zeroc/hello/HelloApp.java @@ -27,17 +27,6 @@ public class HelloApp extends Application { super.onCreate(); - if(VERSION.SDK_INT == 8) // android.os.Build.VERSION_CODES.FROYO (8) - { - // - // Workaround for a bug in Android 2.2 (Froyo). - // - // See http://code.google.com/p/android/issues/detail?id=9431 - // - java.lang.System.setProperty("java.net.preferIPv4Stack", "true"); - java.lang.System.setProperty("java.net.preferIPv6Addresses", "false"); - } - // SSL initialization can take some time. To avoid blocking the // calling thread, we perform the initialization in a separate thread. new Thread(new Runnable() @@ -96,35 +85,32 @@ public class HelloApp extends Application initData.properties = Ice.Util.createProperties(); initData.properties.setProperty("Ice.Trace.Network", "3"); - // - // Only configure IceSSL if we are using Froyo or later. - // - if(VERSION.SDK_INT >= 8) // android.os.Build.VERSION_CODES.FROYO (8) + initData.properties.setProperty("IceSSL.Trace.Security", "3"); + initData.properties.setProperty("IceSSL.KeystoreType", "BKS"); + initData.properties.setProperty("IceSSL.TruststoreType", "BKS"); + initData.properties.setProperty("IceSSL.Password", "password"); + initData.properties.setProperty("Ice.InitPlugins", "0"); + initData.properties.setProperty("Ice.Plugin.IceSSL", "IceSSL.PluginFactory"); + + // SDK versions < 21 only support TLSv1 with SSLEngine. + if(VERSION.SDK_INT < 21) { - initData.properties.setProperty("IceSSL.Trace.Security", "3"); - initData.properties.setProperty("IceSSL.KeystoreType", "BKS"); - initData.properties.setProperty("IceSSL.TruststoreType", "BKS"); - initData.properties.setProperty("IceSSL.Password", "password"); - initData.properties.setProperty("Ice.InitPlugins", "0"); - initData.properties.setProperty("Ice.Plugin.IceSSL", "IceSSL.PluginFactory"); + initData.properties.setProperty("IceSSL.Protocols", "tls1_0"); } communicator = Ice.Util.initialize(initData); - if(VERSION.SDK_INT >= 8) // android.os.Build.VERSION_CODES.FROYO (8) - { - IceSSL.Plugin plugin = (IceSSL.Plugin)communicator.getPluginManager().getPlugin("IceSSL"); - // - // Be sure to pass the same input stream to the SSL plug-in for - // both the keystore and the truststore. This makes startup a - // little faster since the plugin will not initialize - // two keystores. - // - java.io.InputStream certs = getResources().openRawResource(R.raw.client); - plugin.setKeystoreStream(certs); - plugin.setTruststoreStream(certs); - communicator.getPluginManager().initializePlugins(); - } + IceSSL.Plugin plugin = (IceSSL.Plugin)communicator.getPluginManager().getPlugin("IceSSL"); + // + // Be sure to pass the same input stream to the SSL plug-in for + // both the keystore and the truststore. This makes startup a + // little faster since the plugin will not initialize + // two keystores. + // + java.io.InputStream certs = getResources().openRawResource(R.raw.client); + plugin.setKeystoreStream(certs); + plugin.setTruststoreStream(certs); + communicator.getPluginManager().initializePlugins(); synchronized(this) { diff --git a/android/demo/library/library.iml b/android/demo/library/library.iml index c908958c7b6..dfad919a020 100644 --- a/android/demo/library/library.iml +++ b/android/demo/library/library.iml @@ -10,7 +10,7 @@ <configuration> <option name="SELECTED_BUILD_VARIANT" value="debug" /> <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> - <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" /> + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" /> <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" /> <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" /> @@ -79,8 +79,9 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> + <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> - <orderEntry type="jdk" jdkName="Android API 17 Platform" jdkType="Android SDK" /> + <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="library" exported="" name="Ice" level="project" /> <orderEntry type="library" exported="" name="Glacier2" level="project" /> diff --git a/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java b/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java index fea2265b217..4f3d3795f86 100644 --- a/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java +++ b/android/demo/library/src/main/java/com/zeroc/library/LoginActivity.java @@ -134,17 +134,6 @@ public class LoginActivity extends Activity super.onCreate(savedInstanceState); setContentView(R.layout.login); - if(VERSION.SDK_INT == 8) // android.os.Build.VERSION_CODES.FROYO (8) - { - // - // Workaround for a bug in Android 2.2 (Froyo). - // - // See http://code.google.com/p/android/issues/detail?id=9431 - // - java.lang.System.setProperty("java.net.preferIPv4Stack", "true"); - java.lang.System.setProperty("java.net.preferIPv6Addresses", "false"); - } - _login = (Button) findViewById(R.id.login); _login.setOnClickListener(new android.view.View.OnClickListener() { @@ -171,7 +160,7 @@ public class LoginActivity extends Activity }); _secure = (android.widget.CheckBox) findViewById(R.id.secure); - _secure.setEnabled(VERSION.SDK_INT >= 8); // android.os.Build.VERSION_CODES.FROYO (8) + _secure.setEnabled(true); _glacier2 = (android.widget.CheckBox) findViewById(R.id.glacier2); diff --git a/android/demo/library/src/main/java/com/zeroc/library/controller/LoginController.java b/android/demo/library/src/main/java/com/zeroc/library/controller/LoginController.java index a2bc3e304ea..36c93399063 100644 --- a/android/demo/library/src/main/java/com/zeroc/library/controller/LoginController.java +++ b/android/demo/library/src/main/java/com/zeroc/library/controller/LoginController.java @@ -9,6 +9,7 @@ package com.zeroc.library.controller; +import android.os.Build; import com.zeroc.library.R; import android.content.res.Resources; @@ -67,6 +68,13 @@ public class LoginController initData.properties.setProperty("IceSSL.Password", "password"); initData.properties.setProperty("Ice.InitPlugins", "0"); initData.properties.setProperty("Ice.Plugin.IceSSL", "IceSSL.PluginFactory"); + + // SDK versions < 21 only support TLSv1 with SSLEngine. + if(Build.VERSION.SDK_INT < 21) + { + initData.properties.setProperty("IceSSL.Protocols", "tls1_0"); + } + java.io.InputStream certStream; certStream = resources.openRawResource(R.raw.client); _communicator = Ice.Util.initialize(initData); diff --git a/android/gradle/dex.gradle b/android/gradle/dex.gradle new file mode 100644 index 00000000000..bd4513dec5f --- /dev/null +++ b/android/gradle/dex.gradle @@ -0,0 +1,24 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +import org.apache.tools.ant.taskdefs.condition.Os + +// Discover the Android SDK home. +// It either comes from the environment or from sdk.dir defined +// in local.properties at the root of the android project. +ext.androidSdkDir = System.env.ANDROID_HOME +if(ext.androidSdkDir == null) { + Properties localProps = new Properties() + localProps.load(new FileInputStream(file("$rootProject.projectDir/local.properties"))) + + ext.androidSdkDir = localProps['sdk.dir'] +} + +def cmdExt = Os.isFamily(Os.FAMILY_WINDOWS) ? '.bat' : '' +ext.dxCmd = "${androidSdkDir}/build-tools/${ice_buildToolsVersion}/dx${cmdExt}"
\ No newline at end of file diff --git a/android/gradle/tests.gradle b/android/gradle/tests.gradle new file mode 100644 index 00000000000..8a14a3b3eff --- /dev/null +++ b/android/gradle/tests.gradle @@ -0,0 +1,51 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +ext.tests = [ "acm", + "adapterDeactivation", + "admin", + "ami", + "background", + "binding", + "checksum", + "classLoader", + "custom", + "defaultServant", + "defaultValue", + "dispatcher", + "echo", + "enums", + "exceptions", + "facets", + "hash", + "hold", + "info", + "inheritance", + "interceptor", + "interrupt", + "invoke", + "location", + "networkProxy", + "objects", + "operations", + "optional", + "packagemd", + "plugin", + "properties", + "proxy", + "retry", + "seqMapping", + "serialize", + "servantLocator", + "slicing_exceptions", + "slicing_objects", + "stream", + "threadPoolPriority", + "timeout", + "udp" ] diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 1e61d1fd3a9..e5347d805ed 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 10 15:27:10 PDT 2013 +#Mon Nov 03 10:36:54 NST 2014 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.1-all.zip diff --git a/android/settings.gradle b/android/settings.gradle index 458743b4059..dc291e41619 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -7,8 +7,15 @@ // // ********************************************************************** +apply from: "$rootProject.projectDir/gradle/tests.gradle" + +tests.each { + include ":test_Ice_${it}" + project(":test_Ice_${it}").projectDir = new File("test/src/test_Ice_${it}") +} + // Main source -include ':hello', ':Ice', ':Glacier2', ':IceBox', ':IceDiscovery', ':IceGrid', ':IcePatch2', ':IceStorm', ':chat', ':library', ":test", ':testApp' +include ':hello', ':Ice', ':Glacier2', ':IceBox', ':IceDiscovery', ':IceGrid', ':IcePatch2', ':IceStorm', ':chat', ':library', ':test', ':testPlugins', ':testApp', ':test_Ice_acm' project(':Ice').projectDir = new File('src/Ice') project(':Glacier2').projectDir = new File('src/Glacier2') project(':IceBox').projectDir = new File('src/IceBox') @@ -20,4 +27,5 @@ project(':hello').projectDir = new File('demo/hello') project(':chat').projectDir = new File('demo/chat') project(':library').projectDir = new File('demo/library') project(':test').projectDir = new File('test') -project(':testApp').projectDir = new File('test/android')
\ No newline at end of file +project(':testPlugins').projectDir = new File('test/plugins') +project(':testApp').projectDir = new File('test/android') diff --git a/android/src/Glacier2/Glacier2.iml b/android/src/Glacier2/Glacier2.iml index c3d0e66fb20..6b6691c8110 100644 --- a/android/src/Glacier2/Glacier2.iml +++ b/android/src/Glacier2/Glacier2.iml @@ -25,6 +25,7 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/Glacier2/src/main/java"> diff --git a/android/src/Ice/Ice.iml b/android/src/Ice/Ice.iml index 457f010fe0f..f67164fd389 100644 --- a/android/src/Ice/Ice.iml +++ b/android/src/Ice/Ice.iml @@ -25,6 +25,8 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/nostream.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/stream.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/Ice/src/main/java"> diff --git a/android/src/IceBox/IceBox.iml b/android/src/IceBox/IceBox.iml index f8fe17041cf..7da3c706634 100644 --- a/android/src/IceBox/IceBox.iml +++ b/android/src/IceBox/IceBox.iml @@ -25,6 +25,7 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/IceBox/src/main/java"> diff --git a/android/src/IceDiscovery/IceDiscovery.iml b/android/src/IceDiscovery/IceDiscovery.iml index 79f6501f161..09988761e6f 100644 --- a/android/src/IceDiscovery/IceDiscovery.iml +++ b/android/src/IceDiscovery/IceDiscovery.iml @@ -25,6 +25,7 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/IceDiscovery/src/main/java"> diff --git a/android/src/IceGrid/IceGrid.iml b/android/src/IceGrid/IceGrid.iml index 8c615e2f7cb..225424f7823 100644 --- a/android/src/IceGrid/IceGrid.iml +++ b/android/src/IceGrid/IceGrid.iml @@ -25,6 +25,7 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/IceGrid/src/main/java"> diff --git a/android/src/IcePatch2/IcePatch2.iml b/android/src/IcePatch2/IcePatch2.iml index 19b888c38e8..5050de6d408 100644 --- a/android/src/IcePatch2/IcePatch2.iml +++ b/android/src/IcePatch2/IcePatch2.iml @@ -25,6 +25,7 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/IcePatch2/src/main/java"> diff --git a/android/src/IceStorm/IceStorm.iml b/android/src/IceStorm/IceStorm.iml index 8dde8b531bf..001e66daafd 100644 --- a/android/src/IceStorm/IceStorm.iml +++ b/android/src/IceStorm/IceStorm.iml @@ -25,6 +25,7 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../../java/src/IceStorm/src/main/java"> diff --git a/android/test/android/build.gradle b/android/test/android/build.gradle index e9b8193afde..c013be1c3df 100644 --- a/android/test/android/build.gradle +++ b/android/test/android/build.gradle @@ -9,6 +9,7 @@ apply plugin: 'com.android.application' apply from: "$rootProject.projectDir/../java/gradle/ice.gradle" +apply from: "$rootProject.projectDir/gradle/tests.gradle" android { compileSdkVersion ice_compileSdkVersion @@ -26,7 +27,7 @@ android { buildTypes { debug { - runProguard true + runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard.cfg' } @@ -37,11 +38,46 @@ android { } } +// Copy the IceTestPlugins.dex file into the android test assets +// directory. +// +// I don't like this approach very much. It would be preferable for +// the test app to extract the dex file from the jar file but I can't +// figure out how to do that. +task copyTask(type: Copy) { + from "${rootProject.projectDir}/test/plugins/build/classes/main/IceTestPlugins.dex" + into "src/main/assets" +} +preBuild.dependsOn(copyTask) +copyTask.dependsOn(':testPlugins:dexClasses') + +clean { + delete("src/main/assets/IceTestPlugins.dex") +} + idea.module { excludeDirs -= file(buildDir) buildDir.listFiles({d, f ->f != 'generated-src'} as FilenameFilter).each { excludeDirs += it } } +tests.each { + def name = it + def taskName = "copyTask-${name}" + def testName = ":test_Ice_${name}" + def dexName = "IceTest_${name}.dex" + task "${taskName}"(type: Copy, dependsOn: "${testName}:dexClasses") { + from "${rootProject.projectDir}/test/src/test_Ice_${name}/build/classes/main/${dexName}" + into "src/main/assets" + } + preBuild.dependsOn(tasks[taskName]) + + clean { + delete("src/main/assets/${dexName}") + } +} + dependencies { + compile project(':Ice') compile project(':test') + compile project(':testPlugins') } diff --git a/android/test/android/proguard.cfg b/android/test/android/proguard.cfg index b1feb1a51bd..4f1735013b0 100644 --- a/android/test/android/proguard.cfg +++ b/android/test/android/proguard.cfg @@ -67,6 +67,10 @@ *; } -keep interface test.Ice.** +-keep interface Ice.** +-keep interface IceInternal.** +-keep class Ice.** +-keep class IceInternal.** # For debugging. -keepattributes LocalVariableTable, LocalVariableTypeTable diff --git a/android/test/android/src/main/AndroidManifest.xml b/android/test/android/src/main/AndroidManifest.xml index 154b6e9a941..0809dd4a3f4 100644 --- a/android/test/android/src/main/AndroidManifest.xml +++ b/android/test/android/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ android:versionCode="1" android:versionName="1.0.0"> <uses-permission android:name="android.permission.INTERNET"></uses-permission> + <!-- http://developer.android.com/guide/topics/manifest/uses-sdk-element.html --> diff --git a/android/test/android/src/main/assets/.gitignore b/android/test/android/src/main/assets/.gitignore new file mode 100644 index 00000000000..2cbf86bc394 --- /dev/null +++ b/android/test/android/src/main/assets/.gitignore @@ -0,0 +1 @@ +*.dex diff --git a/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java b/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java index 811d8060f44..fa96d70976d 100644 --- a/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java +++ b/android/test/android/src/main/java/com/zeroc/testsuite/TestApp.java @@ -9,42 +9,99 @@ package com.zeroc.testsuite; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; +import java.io.*; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; +import java.util.*; + +import Ice.Logger; +import Ice.Communicator; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; -import test.Util.Application.CommunicatorListener; -import Ice.Communicator; +import dalvik.system.DexClassLoader; +import android.content.Context; +import android.util.Log; import android.app.Application; import android.os.Handler; import android.os.Build.VERSION; +import test.Util.Application.CommunicatorListener; + public class TestApp extends Application { - static private class TestSuiteEntry + private final String TAG = "TestApp"; + + private ClassLoader getDEXClassLoader(String classDir, ClassLoader parent) throws IOException { + if(parent == null) + { + parent = getClassLoader(); + } + + File dexInternalStoragePath = new java.io.File(getDir("dex", Context.MODE_PRIVATE), classDir); + + BufferedInputStream bis = new BufferedInputStream(getAssets().open(classDir)); + OutputStream dexWriter = new BufferedOutputStream(new FileOutputStream(dexInternalStoragePath)); + final int sz = 8 * 1024; + byte[] buf = new byte[sz]; + int len; + while((len = bis.read(buf, 0, sz)) > 0) + { + dexWriter.write(buf, 0, len); + } + dexWriter.close(); + bis.close(); + + // Internal storage where the DexClassLoader writes the optimized dex file to + final File optimizedDexOutputPath = getDir("outdex", Context.MODE_PRIVATE); + + return new DexClassLoader( + dexInternalStoragePath.getAbsolutePath(), + optimizedDexOutputPath.getAbsolutePath(), + null, + parent); + } + + static private class TestSuiteBundle { - TestSuiteEntry(String name, Class<? extends test.Util.Application> client, - Class<? extends test.Util.Application> server, - Class<? extends test.Util.Application> collocated) + TestSuiteBundle(String name, ClassLoader loader) { _name = name; - _client = client; - _server = server; - _collocated = collocated; + _loader = loader; + + String className = "test.Ice." + _name.replace('_', '.'); + try + { + _client = (Class<? extends test.Util.Application>)_loader.loadClass(className + ".Client"); + } + catch(ClassNotFoundException e) + { + } + try + { + _server = (Class<? extends test.Util.Application>)_loader.loadClass(className + ".Server"); + } + catch(ClassNotFoundException e) + { + } + try + { + _collocated = (Class<? extends test.Util.Application>)_loader.loadClass(className + ".Collocated"); + } + catch(ClassNotFoundException e) + { + } + } + + ClassLoader getClassLoader() + { + return _loader; } String getName() @@ -53,7 +110,7 @@ public class TestApp extends Application } test.Util.Application getClient() - throws IllegalAccessException, InstantiationException + throws IllegalAccessException, InstantiationException { if(_client == null) { @@ -63,7 +120,7 @@ public class TestApp extends Application } test.Util.Application getServer() - throws IllegalAccessException, InstantiationException + throws IllegalAccessException, InstantiationException { if(_server == null) { @@ -74,7 +131,7 @@ public class TestApp extends Application } test.Util.Application getCollocated() - throws IllegalAccessException, InstantiationException + throws IllegalAccessException, InstantiationException { if(_collocated == null) { @@ -85,121 +142,272 @@ public class TestApp extends Application } private String _name; + private ClassLoader _loader; private Class<? extends test.Util.Application> _client; private Class<? extends test.Util.Application> _server; private Class<? extends test.Util.Application> _collocated; } - static final private TestSuiteEntry[] _tests = + private Map<String, TestSuiteBundle> _bundles = new HashMap<String, TestSuiteBundle>(); + + static final private String _allTests[] = { - new TestSuiteEntry("adapterDeactivation", test.Ice.adapterDeactivation.Client.class, - test.Ice.adapterDeactivation.Server.class, test.Ice.adapterDeactivation.Collocated.class), - new TestSuiteEntry("admin", test.Ice.admin.Client.class, test.Ice.admin.Server.class, null), - new TestSuiteEntry("ami", test.Ice.ami.Client.class, test.Ice.ami.Server.class, null), - new TestSuiteEntry("binding", test.Ice.binding.Client.class, test.Ice.binding.Server.class, null), - new TestSuiteEntry("checksum", test.Ice.checksum.Client.class, test.Ice.checksum.Server.class, null), - new TestSuiteEntry("classLoader", test.Ice.classLoader.Client.class, test.Ice.classLoader.Server.class, null), - new TestSuiteEntry("custom", test.Ice.custom.Client.class, test.Ice.custom.Server.class, - test.Ice.custom.Collocated.class), - new TestSuiteEntry("defaultServant", test.Ice.defaultServant.Client.class, null, null), - new TestSuiteEntry("defaultValue", test.Ice.defaultValue.Client.class, null, null), - new TestSuiteEntry("dispatcher", test.Ice.dispatcher.Client.class, test.Ice.dispatcher.Server.class, null), - new TestSuiteEntry("enums", test.Ice.enums.Client.class, test.Ice.enums.Server.class, null), - new TestSuiteEntry("exceptions", test.Ice.exceptions.Client.class, test.Ice.exceptions.Server.class, - test.Ice.exceptions.Collocated.class), - new TestSuiteEntry("facets", test.Ice.facets.Client.class, test.Ice.facets.Server.class, - test.Ice.facets.Collocated.class), - // Require SSL - //new TestSuiteEntry("hash", test.Ice.hash.Client.class, null, null), - new TestSuiteEntry("hold", test.Ice.hold.Client.class, test.Ice.hold.Server.class, null), + "acm", + "adapterDeactivation", + "admin", + "ami", + "background", + "binding", + "checksum", + "classLoader", + "custom", + "defaultServant", + "defaultValue", + "dispatcher", + // Echo test is only for client side only mappings. + "enums", + "exceptions", + "facets", + // Fault tolerance test requires a special setup, so we don't support it. + // hash requires too much memory. + //"hash", + "hold", // The info test is not currently enabled - it relies on sockets to accurately return - // address and port information, which really only works in Android 2.3+. - //new TestSuiteEntry("info", test.Ice.info.Client.class, test.Ice.info.Server.class, null), - new TestSuiteEntry("inheritance", test.Ice.inheritance.Client.class, test.Ice.inheritance.Server.class, - test.Ice.inheritance.Collocated.class), - new TestSuiteEntry("interceptor", test.Ice.interceptor.Client.class, null, null), - new TestSuiteEntry("invoke", test.Ice.invoke.Client.class, test.Ice.invoke.Server.class, null), - new TestSuiteEntry("location", test.Ice.location.Client.class, test.Ice.location.Server.class, null), + // address and port information, which really only works jjin Android 2.3+. + //"info" + "inheritance", + "interceptor", + "interrupt", + "invoke", + "location", // The metrics test uses too much memory. - //new TestSuiteEntry("metrics", test.Ice.metrics.Client.class, test.Ice.metrics.Server.class, null), - new TestSuiteEntry("objects", test.Ice.objects.Client.class, test.Ice.objects.Server.class, - test.Ice.objects.Collocated.class), - new TestSuiteEntry("operations", test.Ice.operations.Client.class, test.Ice.operations.Server.class, - test.Ice.operations.Collocated.class), - new TestSuiteEntry("optional", test.Ice.optional.Client.class, test.Ice.optional.Server.class, null), - new TestSuiteEntry("packagemd", test.Ice.packagemd.Client.class, test.Ice.packagemd.Server.class, null), - new TestSuiteEntry("proxy", test.Ice.proxy.Client.class, test.Ice.proxy.Server.class, - test.Ice.proxy.Collocated.class), - new TestSuiteEntry("retry", test.Ice.retry.Client.class, test.Ice.retry.Server.class, null), - new TestSuiteEntry("seqMapping", test.Ice.seqMapping.Client.class, test.Ice.seqMapping.Server.class, - test.Ice.seqMapping.Collocated.class), - new TestSuiteEntry("serialize", test.Ice.serialize.Client.class, test.Ice.serialize.Server.class, null), - new TestSuiteEntry("servantLocator", test.Ice.servantLocator.Client.class, - test.Ice.servantLocator.Server.class, test.Ice.servantLocator.Collocated.class), - new TestSuiteEntry("slicing/exceptions", test.Ice.slicing.exceptions.Client.class, - test.Ice.slicing.exceptions.Server.class, null), - new TestSuiteEntry("slicing/objects", test.Ice.slicing.objects.Client.class, - test.Ice.slicing.objects.Server.class, null), - new TestSuiteEntry("stream", test.Ice.stream.Client.class, null, null), + //"metrics", + // networkProxy support isn't supported due to lack of SOCKS support. + // "networkProxy", + "objects", + "operations", + "optional", + "packagemd", + "plugin", + // Properties test isn't supported since it loads files. + "proxy", + "retry", + "seqMapping", + "serialize", + "servantLocator", + "slicing_exceptions", + "slicing_objects", + "stream", + "threadPoolPriority", // The throughput test uses too much memory. - //new TestSuiteEntry("throughput", test.Ice.throughput.Client.class, test.Ice.throughput.Server.class, null), - new TestSuiteEntry("timeout", test.Ice.timeout.Client.class, test.Ice.timeout.Server.class, null), + //"throughput", test.Ice.throughput.Client.class, test.Ice.throughput.Server.class, null), + "timeout", + "udp" }; - static final private TestSuiteEntry[] _ssltests = + static final private String _tcpUnsupportedTestsValues[] = { - new TestSuiteEntry("adapterDeactivation", test.Ice.adapterDeactivation.Client.class, - test.Ice.adapterDeactivation.Server.class, test.Ice.adapterDeactivation.Collocated.class), - new TestSuiteEntry("ami", test.Ice.ami.Client.class, test.Ice.ami.Server.class, null), - new TestSuiteEntry("binding", test.Ice.binding.Client.class, test.Ice.binding.Server.class, null), - new TestSuiteEntry("checksum", test.Ice.checksum.Client.class, test.Ice.checksum.Server.class, null), - new TestSuiteEntry("classLoader", test.Ice.classLoader.Client.class, test.Ice.classLoader.Server.class, null), - new TestSuiteEntry("custom", test.Ice.custom.Client.class, test.Ice.custom.Server.class, - test.Ice.custom.Collocated.class), - new TestSuiteEntry("defaultServant", test.Ice.defaultServant.Client.class, null, null), - new TestSuiteEntry("defaultValue", test.Ice.defaultValue.Client.class, null, null), - new TestSuiteEntry("dispatcher", test.Ice.dispatcher.Client.class, test.Ice.dispatcher.Server.class, null), - new TestSuiteEntry("enums", test.Ice.enums.Client.class, test.Ice.enums.Server.class, null), - new TestSuiteEntry("exceptions", test.Ice.exceptions.Client.class, test.Ice.exceptions.Server.class, - test.Ice.exceptions.Collocated.class), - new TestSuiteEntry("facets", test.Ice.facets.Client.class, test.Ice.facets.Server.class, - test.Ice.facets.Collocated.class), - // The hash test uses too much memory. - //new TestSuiteEntry("hash", test.Ice.hash.Client.class, null, null), - new TestSuiteEntry("hold", test.Ice.hold.Client.class, test.Ice.hold.Server.class, null), - // The info test is not currently enabled - it relies on sockets to accurately return - // address and port information, which really only works in Android 2.3+. - //new TestSuiteEntry("info", test.Ice.info.Client.class, test.Ice.info.Server.class, null), - new TestSuiteEntry("inheritance", test.Ice.inheritance.Client.class, test.Ice.inheritance.Server.class, - test.Ice.inheritance.Collocated.class), - new TestSuiteEntry("interceptor", test.Ice.interceptor.Client.class, null, null), - new TestSuiteEntry("invoke", test.Ice.invoke.Client.class, test.Ice.invoke.Server.class, null), - new TestSuiteEntry("location", test.Ice.location.Client.class, test.Ice.location.Server.class, null), - // The metrics test uses too much memory. - //new TestSuiteEntry("metrics", test.Ice.metrics.Client.class, test.Ice.metrics.Server.class, null), - new TestSuiteEntry("objects", test.Ice.objects.Client.class, test.Ice.objects.Server.class, - test.Ice.objects.Collocated.class), - new TestSuiteEntry("operations", test.Ice.operations.Client.class, test.Ice.operations.Server.class, - test.Ice.operations.Collocated.class), - new TestSuiteEntry("optional", test.Ice.optional.Client.class, test.Ice.optional.Server.class, null), - new TestSuiteEntry("packagemd", test.Ice.packagemd.Client.class, test.Ice.packagemd.Server.class, null), - new TestSuiteEntry("proxy", test.Ice.proxy.Client.class, test.Ice.proxy.Server.class, - test.Ice.proxy.Collocated.class), - new TestSuiteEntry("retry", test.Ice.retry.Client.class, test.Ice.retry.Server.class, null), - new TestSuiteEntry("serialize", test.Ice.serialize.Client.class, test.Ice.serialize.Server.class, null), - new TestSuiteEntry("seqMapping", test.Ice.seqMapping.Client.class, test.Ice.seqMapping.Server.class, - test.Ice.seqMapping.Collocated.class), - new TestSuiteEntry("servantLocator", test.Ice.servantLocator.Client.class, - test.Ice.servantLocator.Server.class, test.Ice.servantLocator.Collocated.class), - new TestSuiteEntry("slicing/exceptions", test.Ice.slicing.exceptions.Client.class, - test.Ice.slicing.exceptions.Server.class, null), - new TestSuiteEntry("slicing/objects", test.Ice.slicing.objects.Client.class, - test.Ice.slicing.objects.Server.class, null), - new TestSuiteEntry("stream", test.Ice.stream.Client.class, null, null), - new TestSuiteEntry("timeout", test.Ice.timeout.Client.class, test.Ice.timeout.Server.class, null), }; - private TestSuiteEntry[] _curtests = _tests; - + static final private Set<String> _tcpUnsupportedTests = new HashSet<String>(Arrays.asList(_tcpUnsupportedTestsValues)); + + static final private String _sslUnsupportedTestsValues[] = + { + "background", + "binding", + "plugin", + "timeout", + "udp" + }; + static final private Set<String> _sslUnsupportedTests = new HashSet<String>(Arrays.asList(_sslUnsupportedTestsValues)); + + private List<String> _tests = new ArrayList<String>(); + + class LogOutput + { + private BufferedWriter _writer; + + LogOutput() + { + reopen(); + } + + void reopen() + { + try + { + + if(_writer != null) + { + _writer.close(); + _writer = null; + } + File logFile = new File(getFilesDir(), "log.txt"); + if(!logFile.exists()) + { + logFile.createNewFile(); + } + _writer = new BufferedWriter(new FileWriter(logFile, false)); + } + catch (IOException e) + { + Log.i(TAG, "cannot open log file", e); + } + } + + void + write(StringBuilder message, boolean indent) + { + if(_writer == null) + { + return; + } + + if(indent) + { + int idx = 0; + while((idx = message.indexOf("\n", idx)) != -1) + { + message.insert(idx + 1, " "); + ++idx; + } + } + synchronized(this) + { + try + { + _writer.newLine(); + _writer.append(message.toString()); + _writer.flush(); + } + catch(java.io.IOException ex) + { + } + } + } + } + private LogOutput _logOutput; + + class AndroidLogger implements Ice.Logger + { + private final String _prefix; + private String _formattedPrefix = ""; + private final java.text.DateFormat _date = java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT); + private final java.text.SimpleDateFormat _time = new java.text.SimpleDateFormat(" HH:mm:ss:SSS"); + + AndroidLogger(String prefix) + { + _prefix = prefix; + if(prefix.length() > 0) + { + _formattedPrefix = prefix + ": "; + } + } + @Override + public void print(String message) + { + if(_logOutput != null) + { + StringBuilder s = new StringBuilder(256); + s.append("-- "); + synchronized(this) + { + s.append(_date.format(new java.util.Date())); + s.append(_time.format(new java.util.Date())); + } + s.append(' '); + s.append(_formattedPrefix); + s.append(message); + _logOutput.write(s, false); + } + + Log.d(TAG, message); + } + + @Override + public void trace(String category, String message) + { + if(_logOutput != null) + { + StringBuilder s = new StringBuilder(256); + s.append("-- "); + synchronized(this) + { + s.append(_date.format(new java.util.Date())); + s.append(_time.format(new java.util.Date())); + } + s.append(' '); + s.append(_formattedPrefix); + s.append(category); + s.append(": "); + s.append(message); + _logOutput.write(s, true); + } + + Log.v(category, message); + } + + @Override + public void warning(String message) + { + if(_logOutput != null) + { + + StringBuilder s = new StringBuilder(256); + s.append("-! "); + synchronized(this) + { + s.append(_date.format(new java.util.Date())); + s.append(_time.format(new java.util.Date())); + } + s.append(' '); + s.append(_formattedPrefix); + s.append("warning: "); + s.append(Thread.currentThread().getName()); + s.append(": "); + s.append(message); + _logOutput.write(s, true); + } + + Log.w(TAG, message); + } + + @Override + public void error(String message) + { + if(_logOutput != null) + { + StringBuilder s = new StringBuilder(256); + s.append("!! "); + synchronized(this) + { + s.append(_date.format(new java.util.Date())); + s.append(_time.format(new java.util.Date())); + } + s.append(' '); + s.append(_formattedPrefix); + s.append("error: "); + s.append(Thread.currentThread().getName()); + s.append(": "); + s.append(message); + _logOutput.write(s, true); + } + + Log.e(TAG, message); + } + + @Override + public String getPrefix() + { + return _prefix; + } + + @Override + public Logger cloneWithPrefix(String s) + { + return new AndroidLogger(s); + } + } + class MyWriter extends Writer { @Override @@ -251,20 +459,22 @@ public class TestApp extends Application private boolean _ssl = false; private boolean _sslInitialized = false; - private boolean _sslSupported = false; private boolean _ipv6 = false; private SSLContext _clientContext = null; private SSLContext _serverContext = null; - private SSLInitializationListener _ssllistener; + private SSLInitializationListener _sslListener; static abstract class TestThread extends Thread { + String _testName; test.Util.Application _app; protected int _status; - TestThread(test.Util.Application app) + TestThread(String testName, ClassLoader classLoader, test.Util.Application app) { + _testName = testName; _app = app; + _app.setClassLoader(classLoader); } public int getStatus() @@ -281,7 +491,7 @@ public class TestApp extends Application "--Ice.Default.Host=0:0:0:0:0:0:0:1", "--Ice.IPv4=1", "--Ice.IPv6=1", - "--Ice.PreferIPv6Address=1", + "--Ice.PreferIPv6Address=1" }; String[] nargs = new String[args.length + ipv6Args.length]; @@ -309,18 +519,18 @@ public class TestApp extends Application { String[] sslargs = { - "--Ice.Plugin.IceSSL=IceSSL.PluginFactory", "--Ice.Default.Protocol=ssl", "--Ice.InitPlugins=0" + "--Ice.Plugin.IceSSL=IceSSL.PluginFactory", + "--Ice.Default.Protocol=ssl", + "--Ice.InitPlugins=0", + "--Ice.Trace.Network=3", "--Ice.Trace.Protocol=3" }; - // - // Froyo apparently still suffers from Harmony bug 6047, requiring that we - // disable server-side verification of client certificates. - // - if(VERSION.SDK_INT == 8) // android.os.Build.VERSION_CODES.FROYO (8) + // SDK versions < 21 only support TLSv1 with SSLEngine. + if(VERSION.SDK_INT < 21) { String[] arr = new String[sslargs.length + 1]; System.arraycopy(sslargs, 0, arr, 0, sslargs.length); - arr[arr.length - 1] = "--IceSSL.VerifyPeer=0"; + arr[arr.length - 1] = "--IceSSL.Protocols=tls1_0"; sslargs = arr; } @@ -328,6 +538,7 @@ public class TestApp extends Application System.arraycopy(args, 0, nargs, 0, args.length); System.arraycopy(sslargs, 0, nargs, args.length, sslargs.length); args = nargs; + _app.setCommunicatorListener(new CommunicatorListener() { public void communicatorInitialized(Communicator c) @@ -345,9 +556,9 @@ public class TestApp extends Application { private test.Util.Application _server; - ClientThread(test.Util.Application c, test.Util.Application s) + ClientThread(String testName, ClassLoader classLoader, test.Util.Application c, test.Util.Application s) { - super(c); + super(testName, classLoader, c); _server = s; setName("ClientThread"); } @@ -356,11 +567,25 @@ public class TestApp extends Application { String[] args = { - "--Ice.NullHandleAbort=1", "--Ice.Warn.Connections=1" + "--Ice.NullHandleAbort=1", + "--Ice.Warn.Connections=1" }; args = setupAddress(args, _ipv6); - + + if(_testName == "plugin") + { + try + { + _app.setClassLoader(getDEXClassLoader("IceTestPlugins.dex", _app.getClassLoader())); + } + catch(IOException e) + { + // The plugin test will fail. + Log.e(TAG, "IOException loading IceTestPlugins.dex", e); + } + } + if(_ssl) { args = setupssl(args, _clientContext); @@ -379,9 +604,9 @@ public class TestApp extends Application private test.Util.Application _client; private ClientThread _clientThread; - ServerThread(test.Util.Application c, test.Util.Application s) + ServerThread(String testName, ClassLoader classLoader, test.Util.Application c, test.Util.Application s) { - super(s); + super(testName, classLoader, s); setName("ServerThread"); _client = c; } @@ -409,7 +634,7 @@ public class TestApp extends Application { if(_client != null) { - _clientThread = new ClientThread(_client, _app); + _clientThread = new ClientThread(_testName, _app.getClassLoader(), _client, _app); _clientThread.start(); } } @@ -438,9 +663,9 @@ public class TestApp extends Application class CollocatedThread extends TestThread { - CollocatedThread(test.Util.Application c) + CollocatedThread(String testName, ClassLoader classLoader, test.Util.Application c) { - super(c); + super(testName, classLoader, c); setName("CollocatedThread"); } @@ -545,9 +770,9 @@ public class TestApp extends Application _serverContext = serverContext; _sslInitialized = true; - if(_ssllistener != null) + if(_sslListener != null) { - final SSLInitializationListener listener = _ssllistener; + final SSLInitializationListener listener = _sslListener; if(_clientContext == null | _serverContext == null) { _handler.post(new Runnable() @@ -574,23 +799,11 @@ public class TestApp extends Application @Override public void onCreate() { + // By default we don't log to a file. + //_logOutput = new LogOutput(); + Ice.Util.setProcessLogger(new AndroidLogger("")); _handler = new Handler(); - - if(VERSION.SDK_INT == 8) // android.os.Build.VERSION_CODES.FROYO (8) - { - // - // Workaround for a bug in Android 2.2 (Froyo). - // - // See http://code.google.com/p/android/issues/detail?id=9431 - // - java.lang.System.setProperty("java.net.preferIPv4Stack", "true"); - java.lang.System.setProperty("java.net.preferIPv6Addresses", "false"); - } - - // - // The SSLEngine class only works properly in Froyo (or later). - // - _sslSupported = VERSION.SDK_INT >= 8; + configureTests(); } @Override @@ -598,14 +811,10 @@ public class TestApp extends Application { } + public List<String> getTestNames() { - List<String> s = new ArrayList<String>(); - for(TestSuiteEntry t : _curtests) - { - s.add(t.getName()); - } - return s; + return _tests; } synchronized public void setTestListener(TestListener listener) @@ -613,7 +822,7 @@ public class TestApp extends Application _listener = listener; if(_listener != null && _currentTest != -1) { - _listener.onStartTest(_curtests[_currentTest].getName()); + _listener.onStartTest(_tests.get(_currentTest)); for(String s : _strings) { _listener.onOutput(s); @@ -628,7 +837,7 @@ public class TestApp extends Application public void startNextTest() { assert _complete; - startTest((_currentTest + 1) % _curtests.length); + startTest((_currentTest + 1) % _tests.size()); } synchronized public void startTest(int position) @@ -641,63 +850,83 @@ public class TestApp extends Application _complete = false; _strings.clear(); - TestSuiteEntry entry = _curtests[position]; + String testName = _tests.get(position); + test.Util.Application client; test.Util.Application server; test.Util.Application collocated; - + ClassLoader classLoader; if(_listener != null) { - _listener.onStartTest(entry.getName()); + _listener.onStartTest(testName); } try { - client = entry.getClient(); - server = entry.getServer(); - collocated = entry.getCollocated(); + TestSuiteBundle bundle = _bundles.get(testName); + if(bundle == null) + { + bundle = new TestSuiteBundle(testName, getDEXClassLoader("IceTest_" + testName + ".dex", null)); + _bundles.put(testName, bundle); + } + classLoader = bundle.getClassLoader(); + client = bundle.getClient(); + server = bundle.getServer(); + collocated = bundle.getCollocated(); } catch(IllegalAccessException e) { - e.printStackTrace(pw); + Log.w(TAG, "IllegalAccessException: test " + testName, e); postOnComplete(-1); return; } catch(InstantiationException e) { - e.printStackTrace(pw); + Log.w(TAG, "InstantiationException: test " + testName, e); postOnComplete(-1); return; } + catch(IOException e) + { + Log.w(TAG, "IOException: test " + testName, e); + postOnComplete(-1); + return; + } + + // Uncomment this if you want to reopen the logfile for each test. + //if(_logOutput != null) + //{ + // _logOutput.reopen(); + //} List<TestThread> l = new ArrayList<TestThread>(); if(server != null) { + server.setLogger(new AndroidLogger(testName + "_server")); server.setWriter(new MyWriter()); // All servers must have a client. assert client != null; - client.setWriter(new MyWriter()); - l.add(new ServerThread(client, server)); + client.setWriter(new MyWriter()); + client.setLogger(new AndroidLogger(testName + "_client")); + l.add(new ServerThread(testName, classLoader, client, server)); if(collocated != null) { + collocated.setLogger(new AndroidLogger(testName + "_collocated")); collocated.setWriter(new MyWriter()); - l.add(new CollocatedThread(collocated)); + l.add(new CollocatedThread(testName, classLoader, collocated)); } } else { client.setWriter(new MyWriter()); - l.add(new ClientThread(client, null)); + client.setLogger(new AndroidLogger(testName + "_client")); + l.add(new ClientThread(testName, classLoader, client, null)); } TestRunner r = new TestRunner(l); r.setDaemon(true); r.start(); } - public boolean isSSLSupported() - { - return _sslSupported; - } public void setIPv6(boolean ipv6) { @@ -706,26 +935,18 @@ public class TestApp extends Application public void setSSL(boolean ssl) { - assert(!ssl || (ssl && _sslSupported)); _ssl = ssl; - if(_ssl) + configureTests(); + if(_currentTest > _tests.size()-1) { - _curtests = _ssltests; - } - else - { - _curtests = _tests; - } - if(_currentTest > _curtests.length-1) - { - _currentTest = _curtests.length-1; + _currentTest = _tests.size()-1; } if(_ssl && !_sslInitialized) { - if(_ssllistener != null) + if(_sslListener != null) { - _ssllistener.onWait(); + _sslListener.onWait(); } Runnable r = new Runnable() { @@ -760,7 +981,7 @@ public class TestApp extends Application } catch(Exception ex) { - ex.printStackTrace(); + Log.w(TAG, "Exception", ex); } sslContextInitialized(clientContext, serverContext); } @@ -773,9 +994,26 @@ public class TestApp extends Application } } + private void configureTests() + { + _tests.clear(); + for(String s : _allTests) + { + if(_ssl && _sslUnsupportedTests.contains(s)) + { + continue; + } + if(!_ssl && _tcpUnsupportedTests.contains(s)) + { + continue; + } + _tests.add(s); + } + } + synchronized public void setSSLInitializationListener(SSLInitializationListener listener) { - _ssllistener = listener; + _sslListener = listener; if(_ssl) { if(!_sslInitialized) diff --git a/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java b/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java index 0b0a1178d6f..a2577a5aa87 100644 --- a/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java +++ b/android/test/android/src/main/java/com/zeroc/testsuite/TestSuite.java @@ -72,24 +72,17 @@ public class TestSuite extends ListActivity } }); CheckBox secure = (CheckBox)findViewById(R.id.secure); - if(app.isSSLSupported()) + secure.setOnCheckedChangeListener(new OnCheckedChangeListener() { - secure.setOnCheckedChangeListener(new OnCheckedChangeListener() + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) - { - app.setSSL(isChecked); - _tests.clear(); - _tests.addAll(app.getTestNames()); - adapter.notifyDataSetChanged(); - } - }); - } - else - { - secure.setEnabled(false); - } - + app.setSSL(isChecked); + _tests.clear(); + _tests.addAll(app.getTestNames()); + adapter.notifyDataSetChanged(); + } + }); + CheckBox ipv6 = (CheckBox)findViewById(R.id.ipv6); ipv6.setOnCheckedChangeListener(new OnCheckedChangeListener() { diff --git a/android/test/android/testApp.iml b/android/test/android/testApp.iml index 829e330b6bc..bbcb89208ba 100644 --- a/android/test/android/testApp.iml +++ b/android/test/android/testApp.iml @@ -10,7 +10,7 @@ <configuration> <option name="SELECTED_BUILD_VARIANT" value="debug" /> <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" /> - <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" /> + <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" /> <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" /> <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" /> <option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" /> @@ -78,11 +78,13 @@ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" /> <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" /> <excludeFolder url="file://$MODULE_DIR$/build/outputs" /> + <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> - <orderEntry type="jdk" jdkName="Android API 17 Platform" jdkType="Android SDK" /> + <orderEntry type="jdk" jdkName="Android API 21 Platform" jdkType="Android SDK" /> <orderEntry type="sourceFolder" forTests="false" /> - <orderEntry type="library" exported="" name="IceTest" level="project" /> <orderEntry type="library" exported="" name="Ice" level="project" /> + <orderEntry type="module" module-name="test" exported="" /> + <orderEntry type="module" module-name="testPlugins" exported="" /> </component> </module> diff --git a/android/test/build.gradle b/android/test/build.gradle index b5bde9e83fa..8444ad17fff 100644 --- a/android/test/build.gradle +++ b/android/test/build.gradle @@ -12,32 +12,15 @@ apply from: "$rootProject.projectDir/../java/gradle/ice.gradle" ext.testDir = "$rootProject.projectDir/../java/test/src/main/java/test" apply from: "$rootProject.projectDir/../java/test/slice.gradle" - -sourceCompatibility = 1.7 -targetCompatibility = 1.7 +apply from: "$rootProject.projectDir/gradle/tests.gradle" +apply from: "$rootProject.projectDir/gradle/dex.gradle" sourceSets { main { java { srcDir "$rootProject.projectDir/../java/test/src/main/java" - exclude 'Ice/translator' - exclude 'Slice/generation' - exclude '**/lambda' - exclude 'ejb' - exclude '**/Freeze' - exclude '**/Glacier2' - exclude '**/IceBox' - exclude '**/IceDiscovery' - exclude '**/IceGrid' - exclude '**/Slice' - exclude '**/IceSSL' - exclude '**/Ice/faultTolerance' - exclude '**/Ice/hash' - exclude '**/Ice/metrics' - exclude '**/Ice/plugin' - exclude '**/Ice/properties' - exclude '**/Ice/threadPoolPriority' - exclude '**/Ice/throughput' + include 'test/Util/**' + exclude 'test/Ice/**/lambda' } } } @@ -51,11 +34,49 @@ dependencies { compile project(':Ice') } -jar { - archiveName = "IceTest.jar" - destinationDir = new File("$rootProject.projectDir/lib/") -} +tests.each { + + def name = it + def dirName = name.replace('_', '/') + project(":test_Ice_${name}") { + apply plugin: 'java' + apply from: "$rootProject.projectDir/../java/gradle/ice.gradle" + + sourceSets { + main { + java { + srcDir "$rootProject.projectDir/../java/test/src/main/java" + include "test/Ice/${dirName}/**" + exclude 'test/Ice/**/lambda' + srcDir "$rootProject.projectDir/test/build/generated-src/" + include "test/Ice/${dirName}/**" + } + } + } + + def dexName = "IceTest_${name}.dex" + task dexClasses { + inputs.dir "${buildDir}/classes/main" + outputs.file "${buildDir}/classes/main/${dexName}" + doLast { + exec { + commandLine "${dxCmd}", '--dex', + "--output=${buildDir}/classes/main/${dexName}", + "${buildDir}/classes/main" + } + } + } + + dexClasses.dependsOn('classes') + + configure(jar) { + include "${dexName}" + } + jar.dependsOn(dexClasses) -clean { - delete("$rootProject.projectDir/lib/IceTest.jar") + dependencies { + compile project(':test') + compile project(':Ice') + } + } } diff --git a/android/test/plugins/build.gradle b/android/test/plugins/build.gradle new file mode 100644 index 00000000000..a36daf037fb --- /dev/null +++ b/android/test/plugins/build.gradle @@ -0,0 +1,46 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +apply plugin: 'java' +apply from: "$rootProject.projectDir/../java/gradle/ice.gradle" +apply from: "$rootProject.projectDir/gradle/dex.gradle" + +sourceSets { + main { + java { + srcDir "$rootProject.projectDir/../java/test/plugins/src/main/java" + include 'test/Ice/plugin/plugins/**' + } + } +} + +task dexClasses << { + exec { + commandLine "${dxCmd}", '--dex', + "--output=${buildDir}/classes/main/IceTestPlugins.dex", + "${buildDir}/classes/main" + } +} + +dexClasses.dependsOn('classes') + +// The jar file should only include IceTestPlugins.dex +configure(jar) { + include 'IceTestPlugins.dex' +} +jar.dependsOn(dexClasses) + +idea.module { + excludeDirs -= file(buildDir) + buildDir.listFiles({d, f ->f != 'generated-src'} as FilenameFilter).each { excludeDirs += it } +} + +dependencies { + compile project(':Ice') +} diff --git a/android/test/plugins/testPlugins.iml b/android/test/plugins/testPlugins.iml new file mode 100644 index 00000000000..74e8501b7a5 --- /dev/null +++ b/android/test/plugins/testPlugins.iml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" external.system.module.group="android" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="android-gradle" name="Android-Gradle"> + <configuration> + <option name="GRADLE_PROJECT_PATH" value=":testPlugins" /> + </configuration> + </facet> + <facet type="java-gradle" name="Java-Gradle"> + <configuration> + <option name="BUILD_FOLDER_PATH" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" inherit-compiler-output="false"> + <output url="file://$MODULE_DIR$/build/classes/main" /> + <output-test url="file://$MODULE_DIR$/build/classes/test" /> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/build/generated-src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> + <excludeFolder url="file://$MODULE_DIR$/.gradle" /> + <excludeFolder url="file://$MODULE_DIR$/build/classes" /> + <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/libs" /> + <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> + </content> + <content url="file://$MODULE_DIR$/../../../java/test/plugins/src/main/java"> + <sourceFolder url="file://$MODULE_DIR$/../../../java/test/plugins/src/main/java" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="Ice" exported="" /> + </component> +</module> + diff --git a/android/test/src/test_Ice_acm/test_Ice_acm.iml b/android/test/src/test_Ice_acm/test_Ice_acm.iml new file mode 100644 index 00000000000..c655abc99cf --- /dev/null +++ b/android/test/src/test_Ice_acm/test_Ice_acm.iml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/../../.." external.system.id="GRADLE" external.system.module.group="android" external.system.module.version="unspecified" type="JAVA_MODULE" version="4"> + <component name="FacetManager"> + <facet type="android-gradle" name="Android-Gradle"> + <configuration> + <option name="GRADLE_PROJECT_PATH" value=":test_Ice_acm" /> + </configuration> + </facet> + <facet type="java-gradle" name="Java-Gradle"> + <configuration> + <option name="BUILD_FOLDER_PATH" /> + </configuration> + </facet> + </component> + <component name="NewModuleRootManager" inherit-compiler-output="false"> + <output url="file://$MODULE_DIR$/build/classes/main" /> + <output-test url="file://$MODULE_DIR$/build/classes/test" /> + <exclude-output /> + <content url="file://$MODULE_DIR$/../../build/generated-src"> + <sourceFolder url="file://$MODULE_DIR$/../../build/generated-src" isTestSource="false" /> + </content> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/build/generated-src" isTestSource="false" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> + <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> + <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /> + <excludeFolder url="file://$MODULE_DIR$/.gradle" /> + <excludeFolder url="file://$MODULE_DIR$/build" /> + </content> + <content url="file://$MODULE_DIR$/../../../../java/test/src/main/java"> + <sourceFolder url="file://$MODULE_DIR$/../../../../java/test/src/main/java" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + <orderEntry type="module" module-name="test" exported="" /> + <orderEntry type="module" module-name="Ice" exported="" /> + </component> +</module> + diff --git a/android/test/test.iml b/android/test/test.iml index ee8c862c3ce..a109c969e9c 100644 --- a/android/test/test.iml +++ b/android/test/test.iml @@ -25,6 +25,14 @@ <excludeFolder url="file://$MODULE_DIR$/.gradle" /> <excludeFolder url="file://$MODULE_DIR$/build/classes" /> <excludeFolder url="file://$MODULE_DIR$/build/dependency-cache" /> + <excludeFolder url="file://$MODULE_DIR$/build/libs" /> + <excludeFolder url="file://$MODULE_DIR$/build/set1.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/set2.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/set3.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/set4.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/set5.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/set6.d.xml" /> + <excludeFolder url="file://$MODULE_DIR$/build/slice2freezej.df.xml" /> <excludeFolder url="file://$MODULE_DIR$/build/tmp" /> </content> <content url="file://$MODULE_DIR$/../../java/test/src/main/java"> |