Commits

Fred Grott committed 3461465

more org changes and now on rest of build logic of asserting correct
build env per project type, than its add the codeqa stuff, the mobileweb
obfuscation stuff and start testing things.

Comments (0)

Files changed (911)

 	<property name="ext-libs.testappcompile.dir" location="${ext-libs.dir}/testappcompile"/>
 	<property name="ext-libs.instrumentedtest.dir" location="${ext-libs.dir}/instrumented-test"/>
 	<property name="ext-libs.instrumentedruntime.dir" location="${ext-libs.dir}/instrumented-runtime"/>
-	
+	<property name="ext-libs.librarycompile.dir" location="${ext-libs.dir}/librarycompile"/>
 	<property name="ext-libs.doclet.dir" location="${ext-libs.dir}/doclet"/>
 	<property name="doclet.doclava.jar" location="${ext-libs.doclet.dir}/doclava.jar"/>
 	<property name="doclet.umlgraph.jar" location="${ext-libs.doclet.dir}/umlgraph.jar"/>
 	<!-- == project  types soft fail if not found which occurs            == -->
 	<!-- == only in a project type that is not using them.                    == -->
 	<!-- ================================================ -->
-	<path id="javacpp.path">
-	                 <fileset dir="${ext-libs.javacpp.dir}">
-		                           <include name="**.jar"/>
-	                 	</fileset>
-		</path>
+	
 	<path id="testappcompile.path">
 	             <fileset dir="${ext-libs.testappcompile.dir}" >
 		                   <include name="**.jar"/>
 	             	</fileset>
 		</path>
-	<path id="instrumented-test.path">
+	<path id="instrumentedtest.path">
 		               <fileset dir="${ext-libs.instrumentedtest.dir}">
 		                               <include name="**.jar"/>
 		              </fileset>
 		</path>
-	<path id="instrumented-runtime.path">
+	<path id="instrumentedruntime.path">
 	                   <fileset dir="${ext-libs.instrumentedruntime.dir}">
 		                              <include name="**.jar"/>
 		          </fileset>
 	</path>
-	<path id="ant.task.libs">
+	<path id="ant.path">
 		
 	          <fileset dir="${ext-libs.ant.dir}">
 	          	          <include name="**.jar"/>
 	          	</fileset>
 	</path>
-	<path id="apt.factory">
+	<path id="aptfactory.path">
 	           <fileset dir="${ext-libs.aptfactory.dir}">
 		                    <include name="**.jar"/>
 	           	</fileset>
 		                        <include name="**.jar"/>
 		      	</fileset>
 	</path>
-	<path id="nativedriver.server.path">
-	                  <fileset dir="${ext-libs.appcompile.dir}">
-	                  	           <include name="server-standalone.jar"/>
-	                  	           
-		            </fileset>
-		<fileset dir="${ext-libs.testappcompile.dir}">
-		                     <include name="server-standalone.jar"/>
-		        </fileset>
-		</path>
-	<path id="nativedriver.client.path">
-	               <fileset dir="${ext-libs.instrumentedtest.dir}">
-		               <include name="client-standalone.jar"/>
+	<path id="librarycompile.path">
+	             <fileset dir="${ext-libs.librarycompile.dir}">
+		                     <include name="**.jar"/>
 		</fileset>
 	</path>
+	
 	<path id="webdriver.path">
 	           <fileset dir="${sdk.dir}/tools/lib">
 		                <include name="guava-**.jar"/>
 		                                         <include name="**.jar"/>
 		               	</fileset>
 	</path>
-	<!-- annotations from sdk/lib -->
-	<path id="annotations.jar.path">
-		             <fileset dir="${sdk.dir}/tools/support">
-		             	           <include name="**.jar"/>
-		             	</fileset>
-	</path>
+	
 	
 	<!-- android support jars, use trick to correct libs on path when executing
 	      from an IDE that synchronizes the classpath and libs folder-->
 		                            <include name="**.jar"/>
 		          </fileset>
 	</path>
-	<property name="androidlint.exec" location="${sdk.dir}/tools/lint"/>
+	
 	<property name="android.checkstyle" location="${project.root.dir}/android.eclipse.checkstyle.xml"/>
 	<property name="android.pmd" location="${project.root.dir}/android.pmd.ruleset.xml"/>
 	<property name="sdkcontroller.apk" location="${sdk.dir}/tools/apps/SdkController/bin/SdkControllerApp.apk"/>
 	<property name="isAdmobAds" value=""/>
 	<property name="isAnalytics" value=""/>
 	<property name="isGCM" value=""/>
-	<property name="isAnnotations" value=""/>
+	
+	
+	
 	
 	<!--************************************************** -->
 	<!-- ** Beginning of build.xml from sdk                            ** -->
 	<!-- == is set to project type                                                                == -->
 	<!-- ================================================ -->
 	<!-- tallysets for ant.path -->
-	<oja:tallyset name="tally.ant.classycle.libs">
+	<oja:tallyset name="tally.ant.common.libs">
 		<oja:isclasss classname="classycle.Analyser" classpatheref="ant.path"/>
-	</oja:tallyset>
-	<oja:tallyset name="tally.ant.checkstyle.libs">
-	      <oja:isclass classname="com.puppycrawl.tools.checkstyle.Checker" classpathref="ant.path"/>
-     </oja:tallyset>
-	 <oja:tallyset name="tally.ant.zutubi.libs">
-	 	  <oja:isclass classname="com.zutubi.android.ant.LintTask" classpathref="ant.path"/>
-	 </oja:tallyset>
-	<oja:tallyset name="tally.ant.javancss.libs">
-	           <oja:isclass classname="ccl.Main" classpathref="ant.path"/>
-		       <oja:isclass classname="org.javacc.version" classpathref="ant.path"/>
-		       <oja:isclass classname="javancss.Javancss" classpathref="ant.path"/>
-		       <oja:isclass classname="com.sun.java.help.impl.Tag" classpathref="ant.path"/>
-		       <oja:isclass classname="net.jernigan.javancss2ant.JavaNCSS" classpathref="ant.path"/>
-	</oja:tallyset>
-	<oja:tallyset name="tally.ant.yuicompressor.libs">
-	    <oja:isclass classname="net.noha.tools.ant.yuicompressor.tasks.YuiCompressorTask" classpathref="ant.path"/>
-		<oja:isclass classname="jargs.gnu.CmdLineParser" classpathref="ant.path"/>
-		<oja:isclass classname="org.mozilla.javascript.Arguments" classpathref="ant.path"/>
-		<oja:isclass classname="com.yahoo.platform.yui.compressor.Bootstrap" classpathref="ant.path"/>
-	</oja:tallyset>
-	<oja:tallyset name="tally.ant.pmd.libs">
+		<oja:isclass classname="com.puppycrawl.tools.checkstyle.Checker" classpathref="ant.path"/>
+		<oja:isclass classname="com.zutubi.android.ant.LintTask" classpathref="ant.path"/>
+		<oja:isclass classname="ccl.Main" classpathref="ant.path"/>
+		 <oja:isclass classname="org.javacc.version" classpathref="ant.path"/>
+		 <oja:isclass classname="javancss.Javancss" classpathref="ant.path"/>
+		   <oja:isclass classname="com.sun.java.help.impl.Tag" classpathref="ant.path"/>
+		  <oja:isclass classname="net.jernigan.javancss2ant.JavaNCSS" classpathref="ant.path"/>
+		<oja:isclass classname="net.noha.tools.ant.yuicompressor.tasks.YuiCompressorTask" classpathref="ant.path"/>
+		        <oja:isclass classname="jargs.gnu.CmdLineParser" classpathref="ant.path"/>
+		        <oja:isclass classname="org.mozilla.javascript.Arguments" classpathref="ant.path"/>
+		        <oja:isclass classname="com.yahoo.platform.yui.compressor.Bootstrap" classpathref="ant.path"/>
 		<oja:isclass classname="org.objectweb.asm.Attribute" classpathref="ant.path"/>
-		<oja:isclass classname="org.jaxen.Context" classpathref="ant.path"/>
-		<oja:isclass classname="junit.framework.Assert" classpathref="ant.path"/>
-		<oja:isclass classname="net.sourceforge.pmd.PMD" classpathref="ant.path"/>
-	</oja:tallyset>
-	<oja:tallyset name="tally.ant.jsdoc.libs">
-	                  <oja:isclass classname="uk.co.darrenhurley.ant.tasks.JsDocToolkit" classpathref="ant.path"/>
+		        <oja:isclass classname="org.jaxen.Context" classpathref="ant.path"/>
+		        <oja:isclass classname="junit.framework.Assert" classpathref="ant.path"/>
+		        <oja:isclass classname="net.sourceforge.pmd.PMD" classpathref="ant.path"/>
+		<oja:isclass classname="uk.co.darrenhurley.ant.tasks.JsDocToolkit" classpathref="ant.path"/>
+		<oja:isclass classname="org.doxygen.tools.DoxygenTask" classpathref="ant.path"/>
 	</oja:tallyset>
+	
 	<!-- tallysets for appcompile,
 	       we use androidannotations instead of roboguice/guice_noaop in apps -->
 	<oja:tallyset name="tally.appcompileandaptfactory.androidannotations.libs">
 		   <oja:isclass classanme="org.mockito.Mockito" classpathref="instrumentedtest.path"/>
 		</oja:tallyset>
 	<oja:tallyset name="tally.instrumentedtestandruntime.androidmock.libs">
-		             <oja:isclass classname="com.google.android.testing.mocking.AndroidMock" classpathref="instrumentedtest.path"/>
+		             <oja:isclass classname="com.google.android.testing.mocking.AndroidMock" classpathref="aptfactory.path"/>
 		              <oja:isclass classname="com.google.android.testing.mocking.MockObject" classpathref="instrumentedruntime.path"/>
     </oja:tallyset>
 	
 		          <oja:isdirectory filepath="${buildsys.dir}/app.projectdocs"/>
 		          <oja:isdirectory filepath="${buildsys.dir}/codeqa"/>
 	              <oja:isdirectory filepath="${buildsys.dir}/guitar.projectdocs"/>
+		          <oja:isdirectory filepath="${buildsys.dir}/cucumber.projectdocs"/>
+		         <oja:isdirectory filepath="${buildsys.dir}/javamonkey.projectdocs"/>
+		         <oja:isdirectory filepath="${buildsys.dir}/jsdoc-toolkit"/>
+		         <oja:isdirectoyr filepath="${buildsys.dir}/monkeyrunner.projectdocs"/>
+		         <oja:isdirectory filepath="${buildsys.dir}/test.projectdocs"/>
+		         <oja:isdierctoiry filepath="${buildsys.dir}/testapp.projectdocs"/>
 	</oja:tallyset>
 	
 	
 	
 	<!-- ================================================ -->
 	<!-- ========= Our GWSAntDroid Tallys =================== -->
+	<!-- == We go from global-non-specifc to local-specific as           == -->
+	<!-- == these tallies do not stop builds but only set properties == -->
+	<!-- == for later build logic in certain targets. In other words,     ==  -->
+	<!-- == these are executed top to bottom with their property   == -->
+	<!-- == set true or false.                                                                            == -->
 	<!-- ================================================= -->
-	<oja:tally trueproperty="appnativec.env.present" all="yes">
-		                 <oja:tallyset refid="tally.javacpp"/>
-		                  <oja:isdirectory filepath="${basedir}/obj"/>
-		                  <oja:isfile filepath="${basedir}/jni/Android.mk"/>
-		                  <oja:tallyset refid="tally.doxygen.anttasks.lib"/>
-		</oja:tally>
-	<oja:tally trueproperty="appcompile.env.present" all="yes">
-	                <oja:tallyset refid="tally.appcompile.guice.libs"/>
-		             <oja:tallyset refid="tally.appcompile.actionbarsherlock.lib"/>
-		             <oja:tallyset refid="tally.appcompile.androidbinding.libs"/>
-		              <oja:tallyset ref="tally.appcompile.androidannotations.libs"/>
+	<!-- The reason I do it this way as tallies cannot have a nested 
+	        tallly refid so I define a tallyset that gets reused in all the 
+	        local specific tallies thus we have a logic chain from 
+	        global-non-specific to local-specific. -->
+	<oja:tally trueproperty="common.build.env.present" all="yes">
+	               <oja:tallyset refid="tally.common.buildsystemstuff"/>
+		           <oja:tallyset refid="tally.ant.common.libs"/>
 	</oja:tally>
-	<oja:tally trueproperty="appdebug.dynamictestreporting.env.present" all="yes">
-	             <oja:tallyset refid="tally.app.nativedriver.lib"/>
+	
+	<oja:tally trueproperty="nativec.build.env.present" all="yes">
+		                 <oja:tallyset refid="tally.common.buildsystemstuff"/>
+		                   <oja:tallyset refid="tally.ant.common.libs"/>
+		               <oja:tallyset refid="tally.appcompile.javacpp.libs" />
+		              <oja:isdirectory filepath="${project.root.dir}/obj"/>
+		               <oja:isidrectory filepath="${project.root.dir}/jni"/>
+	</oja:tally>
+	
+	<oja:tally trueproperty="appcompile.build.env.present" all="yes">
+		                        <oja:tallyset refid="tally.common.buildsystemstuff"/>
+		                           <oja:tallyset refid="tally.ant.common.libs"/>
+		                     <oja:tallyset refid="tally.appcompileandaptfactory.androidannotations.libs"/>
+		                     <oja:tallyset refid="tally.appcompile.androidbinding.libs"/>
+		                     <oja:tallyset refid="tally.appcompile.actionbarsherlock.libs"/>
 	</oja:tally>
-	<oja:tally trueproperty="testappdebug.dynamictestreporting.env.present" all="yes">
-		           <oja:tallyset  refid="tally.app.nativedriver.lib"/>
+	
+	<oja:tally trueproperty="appcompile.nativedriver.env.present" all="yes">
+		                 <oja:tallyset refid="tally.appcompile.nativedriver.libs"/>
+		</oja:tally>
+	
+	<oja:tally trueproperty="testappcompile.build.env.present" all="yes">
+		              <oja:tallyset refid="tally.common.buildsystemstuff"/>
+		              <oja:tallyset refid="tally.ant.common.libs"/>
+		              <oja:tallyset refid="tally.testappcompile.androidannotations.libs"/>
+		             <oja:tallyset refid="tally.testappcompile.androidbinding.libs"/>
+		             <oja:tallyset refid="tally.testappcompile.actionbarsherlock.libs"/>
 		</oja:tally>
-	<oja:tally trueproperty="testdebug.dynamictestreporting.env.present" all="yes">
-		        <oja:tallyset refid="tally.test.nativedriver.lib"/>
+		<!-- We need a nested tally that has logic set to or to pick up the 
+		        two mock frameworks and makes sure that one is present-->
+	<oja:tally trueproperty="testcompile.build.env.present" all="yes">
+		<oja:tally trueproperty="testcompile.mock.env.present" all="yes" logic="or">
+		         <oja:tallyset refid="tally.instrumentedtest.dexmakermockito.libs"/>
+		         <oja:tallyset refid="tally.instrumentedtestandruntime.androidmock.libs"/>
 		</oja:tally>
-	<oja:tally trueproperty="testappcompile.env.present" all="yes">
-	                    <oja:tallyset refid="tally.testappcompile.guice.libs"/>
-	                     <oja:tallyset refid="tally.testappcompile.actionbarsherlock.lib"/>
-	                     <oja:tallyset refid="tally.testappcompile.androidbinding.libs"/>
-	                      <oja:tallyset ref="tally.testappcompile.androidannotations.libs"/>
-	    </oja:tally>
-	<oja:tally trueproperty="testcompile.env.present" all="yes">
-	                 <oja:tallyset refid="tally.instrumented-test.androidmock.libs"/>
-		             <oja:tallyset refid="tally.instrumented-test.fest.libs"/>
-		             <oja:tallyset refid="tally.instrumented-test.hamcrest.libs"/>
-		              <oja:tallyset refid="tally.instrumented-test.marvin.libs"/>
-		               <oja:tallyset refid="tally.instrumented-test.robotium.libs"/>
-		               <oja:tallyset refid="tally.instrumented-test.technetium.libs"/>
+		<oja:tallyset refid="tally.common.buildsystemstuff"/>
+		<oja:tallyset refid="tally.ant.common.libs"/>
+		<oja:tallyset refid="tally.instrumentedtest.roboguiceguicerobotiumrobogherkhamcrestfest.libs"/>
+	</oja:tally>
+	<!-- required as we need to set androidmockruntime and androidmockgenerator to 
+	      correct locations.(check and make sure we put the correct androidmock 
+	      artifact to aptfactory as that is theIDE setting.-->
+	<oja:tally trueproperty="testcompile.androidmock.env.present" all="yes">
+	                 <oja:tallyset refid="tally.instrumentedtestandruntime.androidmock.libs"/>
+	</oja:tally>
+	
+	<oja:tally trueproperty="testcompile.nativedriver.build.env.present" all="yes">
+	               <oja:tallyset refid="tally.instrumentedtest.nativedriver.libs"/>
 	</oja:tally>
 	
 
 	    	      <copydir dest="${assets.temp.dir}" src="${asset.dir}"></copydir>
 	    	
 	    	      <!-- our asserts for the right minimum dev env for build go here -->
+	    	<assert istrue="" messageid="common.build.env.not.present"/>
+	    	<!-- Our conditional wrapper to assert per project build type -->
+	    	<if  >
+	    		<equals arg1="${gwsantdroid.project.type}" arg2="app" />
+	    		<then>
+	    		
+	    		</then>
+	    			
+	    	</if>
 	    	
+	    	<if  >
+	    	                <equals arg1="${gwsantdroid.project.type}" arg2="testapp" />
+	    	                <then>
+	    	                
+	    	                </then>
+	    	                    
+	    	            </if>
+	    	<if  >
+	    	                            <equals arg1="${gwsantdroid.project.type}" arg2="test" />
+	    	                            <then>
+	    	                            
+	    	                            </then>
+	    	                                
+	    	                        </if>
+	    	<if  >
+	    	                            <equals arg1="${gwsantdroid.project.type}" arg2="library" />
+	    	                            <then>
+	    	                            
+	    	                            </then>
+	    	                                
+	    	                        </if>
+	    	
+	    	<!-- If appcompile or testapp and nativedriver is flag set than we adjust the 
+	    	      androidmanifest permissions and upon -post-build target reset them 
+	    	      back to original androidmanifest using the zutubi ant task-->
 	    </target>
 
 	    <!-- Code Generation: compile resources (aapt -> R.java), aidl, renderscript -->
 	    <target name="-pre-compile">
 	    	             <!-- compute any special paths depending upon what projec type and 
 	    	                    what flags are set-->
-	    	
+	    	<if  >
+	    	                            <equals arg1="${gwsantdroid.project.type}" arg2="app" />
+	    	                            <then>
+	    	                            
+	    	                            </then>
+	    	                                
+	    	                        </if>
+	    	<if  >
+	    	                            <equals arg1="${gwsantdroid.project.type}" arg2="testapp" />
+	    	                            <then>
+	    	                            
+	    	                            </then>
+	    	                                
+	    	                        </if>
 	    	
 	                       <!-- codeqa stuff, one item first doclava than rest in 
 	                               a later target -->
 	            <path id="project.javac.classpath">
 	                <path refid="project.all.jars.path" />
 	                <path refid="tested.project.classpath" />
-	            	<fileset dir="${ext-libs.aptfactory.dir}" includes="*.jar"/>
+	            	<!-- aptfactory covers  project build types; app, testapp, test
+	            	       instrumentedruntime covers project build type test
+	            	-->
+	            	<path refid="aptfactory.path"/>
+	            	<path refid="instrumentedruntime.path"/>
+	            	<path refid="instrumentedtest.path"/>
+	            	<path refid="testappcompile.path"/>
+	            	<path refid="appcompile.path"/>
+	            	<path refid="librarycompile.path"/>
+	            	<!-- path is set in -pre-compile by conditional wrapper 
+	            	       by flag set and project type -->
+	            	<path refid="outlibs.from.sdk.by.flag.set.path"/>
 	            </path>
 	            <javac encoding="${java.encoding}"
 	                    source="${java.source}" target="${java.target}"
 	        </exec>
 	    </target>
 
+	<target name="-package-resources-mwobfuscated-production" depends="-crunch">
+	            <!-- only package resources if *not* a library project -->
+	            <do-only-if-not-library elseText="Library project: do not package resources..." >
+	                <aapt executable="${aapt}"
+	                        command="package"
+	                        versioncode="${version.code}"
+	                        versionname="${version.name}"
+	                        debug="${build.is.packaging.debug}"
+	                        manifest="${out.manifest.abs.file}"
+	                        assets="${asset.absolute.dir}"
+	                        androidjar="${project.target.android.jar}"
+	                        apkfolder="${out.absolute.dir}"
+	                        nocrunch="${build.packaging.nocrunch}"
+	                        resourcefilename="${resource.package.file.name}"
+	                        resourcefilter="${aapt.resource.filter}"
+	                        libraryResFolderPathRefid="project.library.res.folder.path"
+	                        libraryPackagesRefid="project.library.packages"
+	                        previousBuildType="${build.last.target}"
+	                        buildType="${build.target}"
+	                        ignoreAssets="${aapt.ignore.assets}">
+	                    <res path="${out.res.absolute.dir}" />
+	                    <res path="${resource.absolute.dir}" />
+	                    <!-- <nocompress /> forces no compression on any files in assets or res/raw -->
+	                    <!-- <nocompress extension="xml" /> forces no compression on specific file extensions in assets and res/raw -->
+	                </aapt>
+	            </do-only-if-not-library>
+	        </target>
+	
+	
+	
+	
+	
 	    <!-- Puts the project's resources into the output package file
 	         This actually can create multiple resource package in case
 	         Some custom apk with specific configuration have been
 	            </aapt>
 	        </do-only-if-not-library>
 	    </target>
+	<target name="-package-mwobfuscated-production" depends="-dex, -package-resources-mwobfuscated-production">
+	            <!-- only package apk if *not* a library project -->
+	            <do-only-if-not-library elseText="Library project: do not package apk..." >
+	                <if condition="${build.is.instrumented}">
+	                    <then>
+	                        <package-helper>
+	                            <extra-jars>
+	                                <!-- Injected from external file -->
+	                                <jarfile path="${emma.dir}/emma_device.jar" />
+	                            </extra-jars>
+	                        </package-helper>
+	                    </then>
+	                    <else>
+	                        <package-helper />
+	                    </else>
+	                </if>
+	            </do-only-if-not-library>
+	        </target>
 
 	    <!-- Packages the application. -->
 	    <target name="-package" depends="-dex, -package-resources">
 	                depends="-set-release-mode, -release-obfuscation-check, -package, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
 	                description="Builds the application in release mode.">
 	    </target>
+	
+	    <target name="mwobfuscated-production-release"
+	                    depends="-set-release-mode, -release-obfuscation-check, -package-mwobfuscated-production, -post-package, -release-prompt-for-password, -release-nosign, -release-sign, -post-build"
+	                    description="Builds the application in release mode.">
+	        </target>
 
 	    <!-- ******************************************************* -->
 	    <!-- ************ Instrumented specific targets ************ -->
 		    </wrap>
 		</timed>
 	</target>
+	<!-- Initializes project, ie gets dependenciese via ivy
+	       Your Eclipse lib classpath settings are handled by 
+	       having ivyDE plugin installed and than under project 
+	       settings java build libraries and add the ivyDE depedency 
+	       container under libraries you deselct all configs and choose 
+	       only the ones you need for the project libs purpose -->
+	<target name="project-init">
+		    <timed>
+		    	<wrap>
+		    		<body>
+		    			
+		    			</body>
+		    			</wrap>
+		    		</timed>
+		</target>
 	
 </project>

buildsys/app.projectdocs/htmldir/androidbuildlog.jd

+codeqa=true
+@jd:body
+
+<h2>Android Build Log</h2>
+
+<p>Android build log will show javadoc syntax errors from doclava, thus the log becomes
+a todo list as far as cleaning up javadoc.</p>
+<iframe src="./log.txt" style="width:1400px; height:1400px;"></iframe>

buildsys/app.projectdocs/htmldir/androidcheckstyle.jd

+codeqa=true
+@jd:body
+
+<img src="{@docRoot}assets/images/checkstylelogo.png"/>
+<h2>Checkstyle</h2>
+
+<p>With android projects we check a subset of java coding style rules that apply to the
+android application development process.</p>
+
+<!-- iframe goes here -->
+<iframe src="./checkstyle.html" style="width:1400px; height:1400px;"></iframe>

buildsys/app.projectdocs/htmldir/androidclassycle.jd

+codeqa=true
+@jd:body
+
+<img src="{@docRoot}assets/images/classyclelogo.png"/>
+<h2>Classycle</h2>
+
+<p>Cyclic dependencies tend to break applications and libraries during development 
+and maintenance as the component increases in complexity it is difficult to keep
+the details at the front of one's mind while making changes./p>
+<p>Problems also crop up during testing as to produce tests that do not break during
+project iteration you have to have interfaces which one of the end results of reducing 
+cyclic complexities in code.  Classycle measures the cyclic dependencies between classes 
+and packages.</p>
+<p>In Classycle results you generally want to decrease the best fragmenter size down
+to 1 if possible, with classes it usually accomplished by adding an interface and with packages 
+it usually involves grouping together strong units of classes into one package.</p>
+<p>For UI projects it is important to understand that effective TDD can only be used if the 
+best fragmenter size shown in a Classycle report is somewhere close to 1 as otherwise you are
+constantly changing TDD Unit Testing classes during each project iteration.</p>
+<!-- iframe goes here -->
+<iframe src="./classycle.html" style="width:1400px; height:1400px;"></iframe>

buildsys/app.projectdocs/htmldir/androidjavancss.jd

+codeqa=true
+@jd:body
+
+<img src="{@docRoot}assets/images/javancsslogo.png"/>
+<h2>JavaNCSS</h2>
+<p>JavaNCSS measures source code metrics such as the amount of commented code 
+compared to non-commented code.</p>
+
+<iframe src="./javancss.html" style="width: 1500px; height: 1500px;"></iframe>

buildsys/app.projectdocs/htmldir/androidjdepend.jd

+codeqa=true
+@jd:body
+
+<img src="{@docRoot}assets/images/jdependlogo.png"/>
+<h2>JDepend</h2>
+<p>While Classycle is focused on measuring cyclic dependencies, JDepnd measures some 
+overall OOP design metrics to allow developers to loosely couple packages and invert
+package dependencies so that low abstract packages depend upon high abstract 
+packages.</p>
+<p>The results of striving for these OOP design principles is that less development 
+time is used when involving more than one developer on the same project. The other 
+benefit is that when testing those projects that lack a pattern-interface focus it
+reduces the development time writing unit tests and re-writing unit tests during 
+each project iteration.</p>
+<!-- iframe goes here -->
+<iframe src="./jdepend.html" style="width:1400px; height:1400px;"></iframe>

buildsys/app.projectdocs/htmldir/androidlint.jd

+codeqa=true
+@jd:body
+
+<h2>Android Lint</h2>
+<p>Android Lint replaces the PMD Android Rules with a more extensive set of 
+checks. The general idea is this report should show no errors or in most 
+cases fail the build if there is an error.</p>
+<!-- iframe goes here -->
+<iframe src="./lintreport.html" style="width:1400px; height:1400px;"></iframe>

buildsys/app.projectdocs/htmldir/androidpmd.jd

+codeqa=true
+@jd:body
+
+<img src="{@docRoot}assets/images/pmdlogo.png"/>
+<h2>PMD</h2>
+<p>A subset of PMD rules is used to check grammar and syntax of java used in the project.  
+Obviously the less warnings the better code quality in the areas of java syntax and grammar. 
+Checking java grammar and syntax for our android context is handled by the android lint 
+checks.</p>
+<!-- iframe goes here-->
+<iframe src="./pmd.html" style="width: 1400px; height: 1400px;"></iframe>

buildsys/app.projectdocs/htmldir/androiduml.jd

+codeqa=true
+@jd:body
+
+<h2>UML</h2>
+
+<p>UML diagrams in svg format.</p>
+<iframe src="./uml/graph.svg" ></iframe>

buildsys/app.projectdocs/htmldir/codeqa.jd

+codeqa=true
+@jd:body
+
+<h2>CodeQA</h2>
+<p>CodeQA involves checking for coding syntax, grammar, style, and OOP correctness to assist in
+the development of a better application.  Over at the left-hand menu you can find links to codeQA 
+reports on the ActiveWallpaper project.</p>

buildsys/app.projectdocs/htmldir/credits.jd

+credits=true
+@jd:body
+
+<h2>Credits</h2>
+  <p>Code was incorporated from the following projects:</p>
+  <ul>
+  <li><a href="http://android.com">Android Open Source Project</a> both source code and
+  code from the SDK samples</li>
+  </ul>

buildsys/app.projectdocs/htmldir/guide.jd

+projectguide=true
+@jd:body
+
+ <h2>Guide</h2>
+  <p>ActiveWallpaper is an Android Project Library and over on the left-hand 
+  menu you will find directions on how to set it up and use this library.</p>

buildsys/app.projectdocs/htmldir/guidesetup.jd

+projectguide=true
+@jd:body
+
+<h2>ActiveWallpaper Set-Up</h2>
+  <p>To use the ActiveWallpaper Android Project Library import it into your IDE
+  project workspace and than link your parent project to that library.</p>

buildsys/app.projectdocs/htmldir/guideusage.jd

+projectguide=true
+@jd:body
+
+ <h2>Usage</h2>

buildsys/app.projectdocs/htmldir/index.jd

+home=true
+@jd:body
+
+<div id="mainBodyFluid">
+<div id="mainBodyLeft">
+<h2><i class="icon-qrcode"></i>Project</h2>
+<p><i>ActiveWallpaper</i> is an Android Project Library to help developers develop
+                    Android LiveWallpaper Applications. It is meant to be self contained android
+                    project library. </p>
+</div><!-- end mainBodyLeft -->
+<div id="mainBodyRight">
+<h2><i class="icon-bold"></i>Quick Set-Up and use</h2>
+<p>It is set up as an android project library so if using a modern IDE you can just import 
+the project and start to use after linking it your main project.</p>
+</div><!-- end mainBodyRight -->
+<div id="mainBodyLeft">
+<h2><i class="icon-star"></i>Starting Points</h2>
+<p>The main points of entry for this project is the app package and the 
+                    view package.  In the app package you will extend the AppHelper class
+                    for your own Application class that sets up the core global stuff. In the
+                    view package you will extend the GLWallpaperService or CanvasWallpaperService
+                    classes to code your Live Wallpaper.</p>
+</div><!-- end mainBodyLeft -->
+<div id="mainBodyRight">
+<h2><i class="icon-list"></i>Project Using ActiveWallpaper</h2>
+<p></p>
+</div><!-- end mainBodyRight -->
+</div><!-- end mainBodyFluid -->
+<

buildsys/app.projectdocs/htmldir/license.jd

+credits=true
+@jd:body
+
+<p align="center">
+Apache License<br>
+Version 2.0, January 2004<br>
+<a href="http://www.apache.org/licenses/">http://www.apache.org/licenses/</a>
+</p>
+<p>
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+</p>
+<p><b><a name="definitions">1. Definitions</a></b>.</p>
+<p>
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+</p>
+<p>
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+</p>
+<p>
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+</p>
+<p>
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+</p>
+<p>
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+</p>
+<p>
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+</p>
+<p>
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+</p>
+<p>
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+</p>
+<p>
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+</p>
+<p>
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+</p>
+<p><b><a name="copyright">2. Grant of Copyright License</a></b>.
+Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+</p>
+<p><b><a name="patent">3. Grant of Patent License</a></b>.
+Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a