Converted the Android client and the test app to use the Android 1.5 SDK, and to use a more efficient preview frame mechanism too. We now require devices to be running Cupcake or a newer version of the platform. This change temporarily removes the Proguard step, which Sean is going to add back.

git-svn-id: https://zxing.googlecode.com/svn/trunk@1023 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
dswitkin 2009-07-21 19:33:25 +00:00
parent 9f475ac33e
commit d71c099313
10 changed files with 420 additions and 507 deletions

View file

@ -22,7 +22,7 @@ versionName is 2.31, 2.4, or 3.0. -->
package="com.google.zxing.client.android" package="com.google.zxing.client.android"
android:versionName="2.9" android:versionName="2.9"
android:versionCode="23"> android:versionCode="23">
<uses-sdk android:minSdkVersion="1"/> <uses-sdk android:minSdkVersion="3"/>
<application android:icon="@drawable/launcher_icon" <application android:icon="@drawable/launcher_icon"
android:label="@string/app_name"> android:label="@string/app_name">
<activity android:name=".CaptureActivity" <activity android:name=".CaptureActivity"

15
android/build.properties Normal file
View file

@ -0,0 +1,15 @@
# This file is used to override default values used by the Ant build system.
#
# This file must be checked in Version Control Systems, as it is
# integral to the build system of your project.
# The name of your application package as defined in the manifest.
# Used by the 'uninstall' rule.
application-package=com.google.zxing.client.android
# The name of the source folder.
#source-folder=src
# The name of the output folder.
#out-folder=bin

View file

@ -14,109 +14,130 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<project name="BarcodeScanner" default="debug-optimized"> <project name="BarcodeScanner" default="debug">
<!-- SDK Locations -->
<!-- Normally the Android build system looks for a local.properties. Since that's only used
to find the SDK location, I've removed it and pointed us at the global ZXing build.properties. -->
<property file="../build.properties"/> <property file="../build.properties"/>
<property name="sdk-folder" value="${android-home}"/> <!-- Parts of the Android build system insist on the name 'sdk-location', so alias it. -->
<property name="android-tools" value="${sdk-folder}/tools"/> <property name="sdk-location" value="${android-home}"/>
<!-- Application Package Name --> <!-- The build.properties file can be created by you and is never touched
<property name="application-package" value="com.google.zxing.client.android" /> by the 'android' tool. This is the place to change some of the default property values
used by the Ant rules.
Here are some properties you may want to change/update:
<!-- The intermediates directory --> application-package
<!-- Eclipse uses "bin" for its own output, so we do the same. --> the name of your application package as defined in the manifest. Used by the
<property name="outdir" value="bin" /> 'uninstall' rule.
source-folder
the name of the source folder. Default is 'src'.
out-folder
the name of the output folder. Default is 'bin'.
<!-- ************************************************************************************* --> Properties related to the SDK location or the project target should be updated
<!-- No user servicable parts below. --> using the 'android' tool with the 'update' action.
<property name="android-framework" value="${android-tools}/lib/framework.aidl" /> This file is an integral part of the build system for your application and
should be checked in in Version Control Systems.
-->
<!--<property file="build.properties"/>-->
<!-- The default.properties file is created and updated by the 'android' tool, as well as ADT.
This file is an integral part of the build system for your application and
should be checked in in Version Control Systems. -->
<property file="default.properties"/>
<!-- Custom Android task to deal with the project target, and import the proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
<pathelement path="${sdk-location}/tools/lib/anttasks.jar" />
<pathelement path="${sdk-location}/tools/lib/sdklib.jar" />
<pathelement path="${sdk-location}/tools/lib/androidprefs.jar" />
<pathelement path="${sdk-location}/tools/lib/apkbuilder.jar" />
<pathelement path="${sdk-location}/tools/lib/jarutils.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs"/>
<!-- Execute the Android Setup task that will setup some properties specific to the target,
and import the rules files.
To customize the rules, copy/paste them below the task, and disable import by setting
the import attribute to false:
<setup import="false" />
This will ensure that the properties are setup correctly but that your customized
targets are used.
-->
<setup import="false" />
<!-- Custom tasks -->
<taskdef name="aaptexec"
classname="com.android.ant.AaptExecLoopTask"
classpathref="android.antlibs"/>
<taskdef name="apkbuilder"
classname="com.android.ant.ApkBuilderTask"
classpathref="android.antlibs"/>
<!-- Properties -->
<property name="android-tools" value="${sdk-location}/tools" />
<!-- Input directories --> <!-- Input directories -->
<property name="resource-dir" value="res" /> <property name="source-folder" value="src" />
<property name="asset-dir" value="assets" /> <property name="gen-folder" value="gen" />
<property name="srcdir" value="src" /> <property name="resource-folder" value="res" />
<condition property="srcdir-ospath" <property name="asset-folder" value="assets" />
value="${basedir}\${srcdir}" <property name="source-location" value="${basedir}/${source-folder}" />
else="${basedir}/${srcdir}" >
<os family="windows"/>
</condition>
<property name="external-libs" value="../core" /> <!-- folder for the 3rd party java libraries -->
<condition property="external-libs-ospath" <property name="external-libs-folder" value="../core" />
value="${basedir}\${external-libs}"
else="${basedir}/${external-libs}" > <!-- folder for the native libraries -->
<os family="windows"/> <property name="native-libs-folder" value="libs" />
</condition>
<!-- Output directories --> <!-- Output directories -->
<property name="outdir-classes" value="${outdir}/classes" /> <property name="gen-folder" value="gen" />
<condition property="outdir-classes-ospath" <property name="out-folder" value="bin" />
value="${basedir}\${outdir-classes}" <property name="out-classes" value="${out-folder}/classes" />
else="${basedir}/${outdir-classes}" > <property name="out-classes-location" value="${basedir}/${out-classes}"/>
<os family="windows"/> <!-- out folders for a parent project if this project is an instrumentation project -->
</condition> <property name="main-out-folder" value="../${out-folder}" />
<property name="main-out-classes" value="${main-out-folder}/classes"/>
<!-- Create R.java in the source directory -->
<property name="outdir-r" value="src" />
<!-- Intermediate files --> <!-- Intermediate files -->
<property name="dex-file" value="classes.dex" /> <property name="dex-file" value="classes.dex" />
<property name="intermediate-dex" value="${outdir}/${dex-file}" /> <property name="intermediate-dex" value="${out-folder}/${dex-file}" />
<condition property="intermediate-dex-ospath" <!-- dx does not properly support incorrect / or \ based on the platform
and Ant cannot convert them because the parameter is not a valid path.
Because of this we have to compute different paths depending on the platform. -->
<condition property="intermediate-dex-location"
value="${basedir}\${intermediate-dex}" value="${basedir}\${intermediate-dex}"
else="${basedir}/${intermediate-dex}" > else="${basedir}/${intermediate-dex}" >
<os family="windows"/> <os family="windows"/>
</condition> </condition>
<!-- The final package file to generate --> <!-- The final package file to generate -->
<property name="resources-package" value="${outdir}/${ant.project.name}.ap_" /> <property name="out-debug-package" value="${out-folder}/${ant.project.name}-debug.apk"/>
<condition property="resources-package-ospath"
value="${basedir}\${resources-package}"
else="${basedir}/${resources-package}" >
<os family="windows"/>
</condition>
<property name="out-debug-package" value="${outdir}/${ant.project.name}-debug.apk" />
<condition property="out-debug-package-ospath"
value="${basedir}\${out-debug-package}"
else="${basedir}/${out-debug-package}" >
<os family="windows"/>
</condition>
<property name="out-unsigned-package" value="${outdir}/${ant.project.name}-unsigned.apk" />
<condition property="out-unsigned-package-ospath"
value="${basedir}\${out-unsigned-package}"
else="${basedir}/${out-unsigned-package}" >
<os family="windows"/>
</condition>
<!-- Tools --> <!-- Tools -->
<condition property="aapt" value="${android-tools}/aapt.exe" else="${android-tools}/aapt" > <condition property="exe" value=".exe" else=""><os family="windows"/></condition>
<os family="windows"/> <property name="adb" value="${android-tools}/adb${exe}"/>
</condition>
<condition property="aidl" value="${android-tools}/aidl.exe" else="${android-tools}/aidl" >
<os family="windows"/>
</condition>
<condition property="adb" value="${android-tools}/adb.exe" else="${android-tools}/adb" >
<os family="windows"/>
</condition>
<condition property="dx" value="${android-tools}/dx.bat" else="${android-tools}/dx" >
<os family="windows"/>
</condition>
<condition property="apk-builder" value="${android-tools}/apkbuilder.bat" else="${android-tools}/apkbuilder" >
<os family="windows"/>
</condition>
<property name="android-jar" value="${sdk-folder}/android.jar" /> <!-- rules -->
<!-- Rules -->
<!-- Create the output directories if they don't exist yet. --> <!-- Create the output directories if they don't exist yet. -->
<target name="dirs"> <target name="dirs">
<echo>Creating output directories if needed...</echo> <echo>Creating output directories if needed...</echo>
<mkdir dir="${outdir}" /> <mkdir dir="${resource-folder}" />
<mkdir dir="${outdir-classes}" /> <mkdir dir="${external-libs-folder}" />
<mkdir dir="${gen-folder}" />
<mkdir dir="${out-folder}" />
<mkdir dir="${out-classes}" />
</target> </target>
<!-- Generate the R.java file for this project's resources. --> <!-- Generate the R.java file for this project's resources. -->
@ -126,13 +147,13 @@ limitations under the License.
<arg value="package" /> <arg value="package" />
<arg value="-m" /> <arg value="-m" />
<arg value="-J" /> <arg value="-J" />
<arg value="${outdir-r}" /> <arg path="${gen-folder}" />
<arg value="-M" /> <arg value="-M" />
<arg value="AndroidManifest.xml" /> <arg path="AndroidManifest.xml" />
<arg value="-S" /> <arg value="-S" />
<arg value="${resource-dir}" /> <arg path="${resource-folder}" />
<arg value="-I" /> <arg value="-I" />
<arg value="${android-jar}" /> <arg path="${android-jar}" />
</exec> </exec>
</target> </target>
@ -140,217 +161,104 @@ limitations under the License.
<target name="aidl" depends="dirs"> <target name="aidl" depends="dirs">
<echo>Compiling aidl files into Java classes...</echo> <echo>Compiling aidl files into Java classes...</echo>
<apply executable="${aidl}" failonerror="true"> <apply executable="${aidl}" failonerror="true">
<arg value="-p${android-framework}" /> <arg value="-p${android-aidl}" />
<arg value="-I${srcdir}" /> <arg value="-I${source-folder}" />
<fileset dir="${srcdir}"> <arg value="-o${gen-folder}" />
<fileset dir="${source-folder}">
<include name="**/*.aidl"/> <include name="**/*.aidl"/>
</fileset> </fileset>
</apply> </apply>
</target> </target>
<!-- Compile this project's .java files into .class files. --> <!-- Compile this project's .java files into .class files. -->
<target name="compile" depends="clean, dirs, resource-src, aidl"> <target name="compile" depends="resource-src, aidl">
<javac encoding="ascii" target="1.5" debug="true" extdirs="" <javac encoding="ascii" target="1.5" debug="true" extdirs=""
srcdir="." destdir="${out-classes}"
destdir="${outdir-classes}" bootclasspathref="android.target.classpath">
bootclasspath="${android-jar}"> <src path="${source-folder}" />
<src path="${gen-folder}" />
<classpath> <classpath>
<fileset dir="${external-libs}" includes="*.jar"/> <fileset dir="${external-libs-folder}" includes="*.jar"/>
<pathelement path="${main-out-classes}"/>
</classpath> </classpath>
</javac> </javac>
</target> </target>
<target name="compile-release" depends="clean, dirs, resource-src, aidl">
<javac encoding="ascii" target="1.5" debug="off" extdirs=""
srcdir="."
destdir="${outdir-classes}"
bootclasspath="${android-jar}">
<classpath>
<fileset dir="${external-libs}" includes="*.jar"/>
</classpath>
</javac>
</target>
<!--
Getting an error like this?
[apply] UNEXPECTED TOP-LEVEL EXCEPTION:
[apply] com.android.dx.cf.code.SimException: local variable type
mismatch: attempt to set or access a value of type int using a local
variable of type com.google.zxing.qrcode.decoder.Version. This is
symptomatic of .class transformation tools that ignore local variable
information.
Build core/ with the 'build-no-debug' target. It's a long story.
-->
<target name="optimize" depends="compile-release">
<fail message="Please put proguard.jar in 'bin' under the WTK install directory">
<condition>
<not>
<available file="${WTK-home}/bin/proguard.jar" type="file"/>
</not>
</condition>
</fail>
<unzip src="../core/core.jar" dest="${outdir-classes}" overwrite="true"/>
<jar jarfile="temp.jar" basedir="${outdir-classes}"/>
<delete dir="${outdir-classes}"/>
<mkdir dir="${outdir-classes}"/>
<java jar="${WTK-home}/bin/proguard.jar" fork="true" failonerror="true">
<jvmarg value="-Dmaximum.inlined.code.length=32"/>
<arg value="-injars temp.jar"/>
<arg value="-outjars temp-optimized.jar"/>
<arg value="-libraryjars ${android-jar}"/>
<arg value="-keep class com.google.zxing.client.android.*Activity"/>
<arg value="-keep class com.google.zxing.client.android.ViewfinderView { public * ; }"/>
<arg value="-keep class com.google.zxing.client.android.SearchBookContents* { public * ; }"/>
<arg value="-target 5"/>
<arg value="-optimizationpasses 7"/>
<arg value="-dontshrink"/>
<arg value="-dontobfuscate"/>
<arg value="-dontskipnonpubliclibraryclasses"/>
<arg value="-verbose"/>
<arg value="-dump proguard-dump.txt"/>
</java>
<delete file="temp.jar"/>
<unzip src="temp-optimized.jar" dest="${outdir-classes}" overwrite="true"/>
<delete file="temp-optimized.jar"/>
</target>
<!-- Convert this project's .class files into .dex files. --> <!-- Convert this project's .class files into .dex files. -->
<target name="dex" depends="compile"> <target name="dex" depends="compile">
<echo>Converting compiled files and external libraries into ${outdir}/${dex-file}...</echo> <echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...</echo>
<echo>NOTE: This will fail unless you built core with build-no-debug.</echo>
<apply executable="${dx}" failonerror="true" parallel="true"> <apply executable="${dx}" failonerror="true" parallel="true">
<arg value="-JXmx256M"/>
<arg value="--dex" /> <arg value="--dex" />
<arg value="--output=${intermediate-dex-ospath}" /> <arg value="--output=${intermediate-dex-location}" />
<arg path="${outdir-classes-ospath}" /> <arg path="${out-classes-location}" />
<fileset dir="${external-libs}" includes="*.jar"/> <fileset dir="${external-libs-folder}" includes="*.jar"/>
</apply> </apply>
</target> </target>
<target name="dex-optimized" depends="compile-release,optimize"> <!-- Put the project's resources into the output package file
<echo>Converting compiled files and external libraries into ${outdir}/${dex-file}...</echo> This actually can create multiple resource package in case
<echo>NOTE: This will fail unless you built core with build-no-debug.</echo> Some custom apk with specific configuration have been
<apply executable="${dx}" failonerror="true" parallel="true"> declared in default.properties.
<arg value="--dex" /> -->
<arg value="--output=${intermediate-dex-ospath}" /> <target name="package-resources">
<arg path="${outdir-classes-ospath}" /> <echo>Packaging resources</echo>
<!-- workaround to appease 'apply'. Not really the right Ant task to use here. --> <aaptexec executable="${aapt}"
<fileset dir="." includes="nosuchfile.jar"/> command="package"
</apply> manifest="AndroidManifest.xml"
</target> resources="${resource-folder}"
assets="${asset-folder}"
<!-- Put the project's resources into the output package file. --> androidjar="${android-jar}"
<target name="package-res-and-assets"> outfolder="${out-folder}"
<echo>Packaging resources and assets...</echo> basename="${ant.project.name}" />
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-A" />
<arg value="${asset-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
<!-- Same as package-res-and-assets, but without "-A ${asset-dir}" -->
<target name="package-res-no-assets">
<echo>Packaging resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${resource-dir}" />
<!-- No assets directory -->
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
<!-- Invoke the proper target depending on whether or not an assets directory is present. -->
<target name="package-res">
<available file="${asset-dir}" type="dir"
property="res-target" value="and-assets" />
<property name="res-target" value="no-assets" />
<antcall target="package-res-${res-target}" />
</target> </target>
<!-- Package the application and sign it with a debug key. <!-- Package the application and sign it with a debug key.
This is the default target when building. It is used for debug. --> This is the default target when building. It is used for debug. -->
<target name="debug" depends="dex, package-res"> <target name="debug" depends="dex, package-resources">
<echo>Packaging ${out-debug-package}, and signing it with a debug key...</echo> <apkbuilder
<exec executable="${apk-builder}" failonerror="true"> outfolder="${out-folder}"
<arg value="${out-debug-package-ospath}" /> basename="${ant.project.name}"
<arg value="-z" /> signed="true"
<arg value="${resources-package-ospath}" /> verbose="false">
<arg value="-f" /> <file path="${intermediate-dex}" />
<arg value="${intermediate-dex-ospath}" /> <sourcefolder path="${source-folder}" />
<arg value="-rf" /> <jarfolder path="${external-libs-folder}" />
<arg value="${srcdir-ospath}" /> <nativefolder path="${native-libs-folder}" />
<arg value="-rj" /> </apkbuilder>
<arg value="${external-libs-ospath}" />
</exec>
</target>
<!-- Package the optimized application and sign it with a debug key. -->
<target name="debug-optimized" depends="dex-optimized, package-res">
<echo>Packaging ${out-debug-package}, and signing it with a debug key...</echo>
<exec executable="${apk-builder}" failonerror="true">
<arg value="${out-debug-package-ospath}" />
<arg value="-z" />
<arg value="${resources-package-ospath}" />
<arg value="-f" />
<arg value="${intermediate-dex-ospath}" />
<arg value="-rf" />
<arg value="${srcdir-ospath}" />
<arg value="-rj" />
<arg value="${external-libs-ospath}" />
</exec>
</target> </target>
<!-- Package the application without signing it. <!-- Package the application without signing it.
This allows for the application to be signed later with an official publishing key. --> This allows for the application to be signed later with an official publishing key. -->
<target name="release" depends="dex-optimized, package-res"> <target name="release" depends="dex, package-resources">
<echo>Packaging ${out-unsigned-package} for release...</echo> <apkbuilder
<exec executable="${apk-builder}" failonerror="true"> outfolder="${out-folder}"
<arg value="${out-unsigned-package-ospath}" /> basename="${ant.project.name}"
<arg value="-u" /> signed="false"
<arg value="-z" /> verbose="false">
<arg value="${resources-package-ospath}" /> <file path="${intermediate-dex}" />
<arg value="-f" /> <sourcefolder path="${source-folder}" />
<arg value="${intermediate-dex-ospath}" /> <jarfolder path="${external-libs-folder}" />
<arg value="-rf" /> <nativefolder path="${native-libs-folder}" />
<arg value="${srcdir-ospath}" /> </apkbuilder>
</exec> <echo>All generated packages need to be signed with jarsigner before they are published.</echo>
<echo>It will need to be signed with jarsigner before being published.</echo>
</target> </target>
<!-- Install the package on the default emulator --> <!-- Install the package on the default emulator -->
<target name="install"> <target name="install" depends="debug">
<echo>Installing ${out-debug-package} onto default emulator...</echo> <echo>Installing ${out-debug-package} onto default emulator...</echo>
<exec executable="${adb}" failonerror="true"> <exec executable="${adb}" failonerror="true">
<arg value="install" /> <arg value="install" />
<arg value="${out-debug-package}" /> <arg path="${out-debug-package}" />
</exec> </exec>
</target> </target>
<target name="reinstall"> <target name="reinstall" depends="debug">
<echo>Installing ${out-debug-package} onto default emulator...</echo> <echo>Installing ${out-debug-package} onto default emulator...</echo>
<exec executable="${adb}" failonerror="true"> <exec executable="${adb}" failonerror="true">
<arg value="install" /> <arg value="install" />
<arg value="-r" /> <arg value="-r" />
<arg value="${out-debug-package}" /> <arg path="${out-debug-package}" />
</exec> </exec>
</target> </target>
@ -359,13 +267,28 @@ limitations under the License.
<echo>Uninstalling ${application-package} from the default emulator...</echo> <echo>Uninstalling ${application-package} from the default emulator...</echo>
<exec executable="${adb}" failonerror="true"> <exec executable="${adb}" failonerror="true">
<arg value="uninstall" /> <arg value="uninstall" />
<arg value="${application-package}" /> <arg path="${application-package}" />
</exec> </exec>
</target> </target>
<target name="clean"> <target name="help">
<delete dir="${outdir}"/> <echo>Android Ant Build. Available targets:</echo>
<delete file="proguard-dump.txt"/> <echo> help: Displays this help.</echo>
<echo> debug: Builds the application and sign it with a debug key.</echo>
<echo> release: Builds the application. The generated apk file must be</echo>
<echo> signed before it is published.</echo>
<echo> install: Installs the debug package onto a running emulator or</echo>
<echo> device. This can only be used if the application has </echo>
<echo> not yet been installed.</echo>
<echo> reinstall: Installs the debug package on a running emulator or</echo>
<echo> device that already has the application.</echo>
<echo> The signatures must match.</echo>
<echo> uninstall: uninstall the application from a running emulator or</echo>
<echo> device.</echo>
</target> </target>
<target name="clean">
<delete dir="${out-folder}"/>
<delete dir="${gen-folder}"/>
</target>
</project> </project>

View file

@ -0,0 +1,11 @@
# 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 use,
# "build.properties", and override values to adapt the script to your
# project structure.
# Project target.
target=Google Inc.:Google APIs:3

View file

@ -16,6 +16,8 @@
package com.google.zxing.client.android; package com.google.zxing.client.android;
import com.google.zxing.ResultPoint;
import android.content.Context; import android.content.Context;
import android.graphics.Point; import android.graphics.Point;
import android.graphics.Rect; import android.graphics.Rect;
@ -26,7 +28,6 @@ import android.util.Log;
import android.view.Display; import android.view.Display;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import android.view.WindowManager; import android.view.WindowManager;
import com.google.zxing.ResultPoint;
import java.io.IOException; import java.io.IOException;
@ -118,7 +119,7 @@ final class CameraManager {
if (mCamera != null && mPreviewing) { if (mCamera != null && mPreviewing) {
mPreviewHandler = handler; mPreviewHandler = handler;
mPreviewMessage = message; mPreviewMessage = message;
mCamera.setPreviewCallback(previewCallback); mCamera.setOneShotPreviewCallback(previewCallback);
} }
} }
@ -175,7 +176,6 @@ final class CameraManager {
*/ */
private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() { private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) { public void onPreviewFrame(byte[] data, Camera camera) {
camera.setPreviewCallback(null);
if (mPreviewHandler != null) { if (mPreviewHandler != null) {
Message message = mPreviewHandler.obtainMessage(mPreviewMessage, mScreenResolution.x, Message message = mPreviewHandler.obtainMessage(mPreviewMessage, mScreenResolution.x,
mScreenResolution.y, data); mScreenResolution.y, data);

View file

@ -16,6 +16,7 @@
--> -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.zxing.client.androidtest"> package="com.google.zxing.client.androidtest">
<uses-sdk android:minSdkVersion="3"/>
<application android:label="@string/app_name" <application android:label="@string/app_name"
android:icon="@drawable/icon" android:icon="@drawable/icon"
android:debuggable="true"> android:debuggable="true">

View file

@ -0,0 +1,15 @@
# This file is used to override default values used by the Ant build system.
#
# This file must be checked in Version Control Systems, as it is
# integral to the build system of your project.
# The name of your application package as defined in the manifest.
# Used by the 'uninstall' rule.
application-package=com.google.zxing.client.androidtest
# The name of the source folder.
#source-folder=src
# The name of the output folder.
#out-folder=bin

View file

@ -14,109 +14,130 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
--> -->
<project name="ZXingTest" default="debug-optimized"> <project name="ZXingTest" default="debug">
<!-- SDK Locations -->
<!-- Normally the Android build system looks for a local.properties. Since that's only used
to find the SDK location, I've removed it and pointed us at the global ZXing build.properties. -->
<property file="../build.properties"/> <property file="../build.properties"/>
<property name="sdk-folder" value="${android-home}"/> <!-- Parts of the Android build system insist on the name 'sdk-location', so alias it. -->
<property name="android-tools" value="${sdk-folder}/tools"/> <property name="sdk-location" value="${android-home}"/>
<!-- Application Package Name --> <!-- The build.properties file can be created by you and is never touched
<property name="application-package" value="com.google.zxing.client.androidtest" /> by the 'android' tool. This is the place to change some of the default property values
used by the Ant rules.
Here are some properties you may want to change/update:
<!-- The intermediates directory --> application-package
<!-- Eclipse uses "bin" for its own output, so we do the same. --> the name of your application package as defined in the manifest. Used by the
<property name="outdir" value="bin" /> 'uninstall' rule.
source-folder
the name of the source folder. Default is 'src'.
out-folder
the name of the output folder. Default is 'bin'.
<!-- ************************************************************************************* --> Properties related to the SDK location or the project target should be updated
<!-- No user servicable parts below. --> using the 'android' tool with the 'update' action.
<property name="android-framework" value="${android-tools}/lib/framework.aidl" /> This file is an integral part of the build system for your application and
should be checked in in Version Control Systems.
-->
<!--<property file="build.properties"/>-->
<!-- The default.properties file is created and updated by the 'android' tool, as well as ADT.
This file is an integral part of the build system for your application and
should be checked in in Version Control Systems. -->
<property file="default.properties"/>
<!-- Custom Android task to deal with the project target, and import the proper rules.
This requires ant 1.6.0 or above. -->
<path id="android.antlibs">
<pathelement path="${sdk-location}/tools/lib/anttasks.jar" />
<pathelement path="${sdk-location}/tools/lib/sdklib.jar" />
<pathelement path="${sdk-location}/tools/lib/androidprefs.jar" />
<pathelement path="${sdk-location}/tools/lib/apkbuilder.jar" />
<pathelement path="${sdk-location}/tools/lib/jarutils.jar" />
</path>
<taskdef name="setup"
classname="com.android.ant.SetupTask"
classpathref="android.antlibs"/>
<!-- Execute the Android Setup task that will setup some properties specific to the target,
and import the rules files.
To customize the rules, copy/paste them below the task, and disable import by setting
the import attribute to false:
<setup import="false" />
This will ensure that the properties are setup correctly but that your customized
targets are used.
-->
<setup import="false" />
<!-- Custom tasks -->
<taskdef name="aaptexec"
classname="com.android.ant.AaptExecLoopTask"
classpathref="android.antlibs"/>
<taskdef name="apkbuilder"
classname="com.android.ant.ApkBuilderTask"
classpathref="android.antlibs"/>
<!-- Properties -->
<property name="android-tools" value="${sdk-location}/tools" />
<!-- Input directories --> <!-- Input directories -->
<property name="resource-dir" value="res" /> <property name="source-folder" value="src" />
<property name="asset-dir" value="assets" /> <property name="gen-folder" value="gen" />
<property name="srcdir" value="src" /> <property name="resource-folder" value="res" />
<condition property="srcdir-ospath" <property name="asset-folder" value="assets" />
value="${basedir}\${srcdir}" <property name="source-location" value="${basedir}/${source-folder}" />
else="${basedir}/${srcdir}" >
<os family="windows"/>
</condition>
<property name="external-libs" value="../core" /> <!-- folder for the 3rd party java libraries -->
<condition property="external-libs-ospath" <property name="external-libs-folder" value="../core" />
value="${basedir}\${external-libs}"
else="${basedir}/${external-libs}" > <!-- folder for the native libraries -->
<os family="windows"/> <property name="native-libs-folder" value="libs" />
</condition>
<!-- Output directories --> <!-- Output directories -->
<property name="outdir-classes" value="${outdir}/classes" /> <property name="gen-folder" value="gen" />
<condition property="outdir-classes-ospath" <property name="out-folder" value="bin" />
value="${basedir}\${outdir-classes}" <property name="out-classes" value="${out-folder}/classes" />
else="${basedir}/${outdir-classes}" > <property name="out-classes-location" value="${basedir}/${out-classes}"/>
<os family="windows"/> <!-- out folders for a parent project if this project is an instrumentation project -->
</condition> <property name="main-out-folder" value="../${out-folder}" />
<property name="main-out-classes" value="${main-out-folder}/classes"/>
<!-- Create R.java in the source directory -->
<property name="outdir-r" value="src" />
<!-- Intermediate files --> <!-- Intermediate files -->
<property name="dex-file" value="classes.dex" /> <property name="dex-file" value="classes.dex" />
<property name="intermediate-dex" value="${outdir}/${dex-file}" /> <property name="intermediate-dex" value="${out-folder}/${dex-file}" />
<condition property="intermediate-dex-ospath" <!-- dx does not properly support incorrect / or \ based on the platform
and Ant cannot convert them because the parameter is not a valid path.
Because of this we have to compute different paths depending on the platform. -->
<condition property="intermediate-dex-location"
value="${basedir}\${intermediate-dex}" value="${basedir}\${intermediate-dex}"
else="${basedir}/${intermediate-dex}" > else="${basedir}/${intermediate-dex}" >
<os family="windows"/> <os family="windows"/>
</condition> </condition>
<!-- The final package file to generate --> <!-- The final package file to generate -->
<property name="resources-package" value="${outdir}/${ant.project.name}.ap_" /> <property name="out-debug-package" value="${out-folder}/${ant.project.name}-debug.apk"/>
<condition property="resources-package-ospath"
value="${basedir}\${resources-package}"
else="${basedir}/${resources-package}" >
<os family="windows"/>
</condition>
<property name="out-debug-package" value="${outdir}/${ant.project.name}-debug.apk" />
<condition property="out-debug-package-ospath"
value="${basedir}\${out-debug-package}"
else="${basedir}/${out-debug-package}" >
<os family="windows"/>
</condition>
<property name="out-unsigned-package" value="${outdir}/${ant.project.name}-unsigned.apk" />
<condition property="out-unsigned-package-ospath"
value="${basedir}\${out-unsigned-package}"
else="${basedir}/${out-unsigned-package}" >
<os family="windows"/>
</condition>
<!-- Tools --> <!-- Tools -->
<condition property="aapt" value="${android-tools}/aapt.exe" else="${android-tools}/aapt" > <condition property="exe" value=".exe" else=""><os family="windows"/></condition>
<os family="windows"/> <property name="adb" value="${android-tools}/adb${exe}"/>
</condition>
<condition property="aidl" value="${android-tools}/aidl.exe" else="${android-tools}/aidl" >
<os family="windows"/>
</condition>
<condition property="adb" value="${android-tools}/adb.exe" else="${android-tools}/adb" >
<os family="windows"/>
</condition>
<condition property="dx" value="${android-tools}/dx.bat" else="${android-tools}/dx" >
<os family="windows"/>
</condition>
<condition property="apk-builder" value="${android-tools}/apkbuilder.bat" else="${android-tools}/apkbuilder" >
<os family="windows"/>
</condition>
<property name="android-jar" value="${sdk-folder}/android.jar" /> <!-- rules -->
<!-- Rules -->
<!-- Create the output directories if they don't exist yet. --> <!-- Create the output directories if they don't exist yet. -->
<target name="dirs"> <target name="dirs">
<echo>Creating output directories if needed...</echo> <echo>Creating output directories if needed...</echo>
<mkdir dir="${outdir}" /> <mkdir dir="${resource-folder}" />
<mkdir dir="${outdir-classes}" /> <mkdir dir="${external-libs-folder}" />
<mkdir dir="${gen-folder}" />
<mkdir dir="${out-folder}" />
<mkdir dir="${out-classes}" />
</target> </target>
<!-- Generate the R.java file for this project's resources. --> <!-- Generate the R.java file for this project's resources. -->
@ -126,13 +147,13 @@ limitations under the License.
<arg value="package" /> <arg value="package" />
<arg value="-m" /> <arg value="-m" />
<arg value="-J" /> <arg value="-J" />
<arg value="${outdir-r}" /> <arg path="${gen-folder}" />
<arg value="-M" /> <arg value="-M" />
<arg value="AndroidManifest.xml" /> <arg path="AndroidManifest.xml" />
<arg value="-S" /> <arg value="-S" />
<arg value="${resource-dir}" /> <arg path="${resource-folder}" />
<arg value="-I" /> <arg value="-I" />
<arg value="${android-jar}" /> <arg path="${android-jar}" />
</exec> </exec>
</target> </target>
@ -140,202 +161,104 @@ limitations under the License.
<target name="aidl" depends="dirs"> <target name="aidl" depends="dirs">
<echo>Compiling aidl files into Java classes...</echo> <echo>Compiling aidl files into Java classes...</echo>
<apply executable="${aidl}" failonerror="true"> <apply executable="${aidl}" failonerror="true">
<arg value="-p${android-framework}" /> <arg value="-p${android-aidl}" />
<arg value="-I${srcdir}" /> <arg value="-I${source-folder}" />
<fileset dir="${srcdir}"> <arg value="-o${gen-folder}" />
<fileset dir="${source-folder}">
<include name="**/*.aidl"/> <include name="**/*.aidl"/>
</fileset> </fileset>
</apply> </apply>
</target> </target>
<!-- Compile this project's .java files into .class files. --> <!-- Compile this project's .java files into .class files. -->
<target name="compile" depends="clean, dirs, resource-src, aidl"> <target name="compile" depends="resource-src, aidl">
<javac encoding="ascii" target="1.5" debug="true" extdirs="" <javac encoding="ascii" target="1.5" debug="true" extdirs=""
srcdir="." destdir="${out-classes}"
destdir="${outdir-classes}" bootclasspathref="android.target.classpath">
bootclasspath="${android-jar}"> <src path="${source-folder}" />
<src path="${gen-folder}" />
<classpath> <classpath>
<fileset dir="${external-libs}" includes="*.jar"/> <fileset dir="${external-libs-folder}" includes="*.jar"/>
<pathelement path="${main-out-classes}"/>
</classpath> </classpath>
</javac> </javac>
</target> </target>
<target name="compile-release" depends="clean, dirs, resource-src, aidl">
<javac encoding="ascii" target="1.5" debug="off" extdirs=""
srcdir="."
destdir="${outdir-classes}"
bootclasspath="${android-jar}">
<classpath>
<fileset dir="${external-libs}" includes="*.jar"/>
</classpath>
</javac>
</target>
<target name="optimize" depends="compile-release">
<fail message="Please put proguard.jar in 'bin' under the WTK install directory">
<condition>
<not>
<available file="${WTK-home}/bin/proguard.jar" type="file"/>
</not>
</condition>
</fail>
<unzip src="../core/core.jar" dest="${outdir-classes}" overwrite="true"/>
<jar jarfile="temp.jar" basedir="${outdir-classes}"/>
<delete dir="${outdir-classes}"/>
<mkdir dir="${outdir-classes}"/>
<java jar="${WTK-home}/bin/proguard.jar" fork="true" failonerror="true">
<jvmarg value="-Dmaximum.inlined.code.length=32"/>
<arg value="-injars temp.jar"/>
<arg value="-outjars temp-optimized.jar"/>
<arg value="-libraryjars ${android-jar}"/>
<arg value="-keepattributes Exceptions,InnerClasses,Signature,!LocalVariableTable,!LocalVariableTypeTable"/>
<arg value="-keep class com.google.zxing.client.androidtest.*Activity"/>
<arg value="-keep class com.google.zxing.client.androidtest.ViewfinderView { public * ; }"/>
<arg value="-target 5"/>
<arg value="-optimizationpasses 7"/>
<arg value="-dontshrink"/>
<arg value="-dontobfuscate"/>
<arg value="-dontskipnonpubliclibraryclasses"/>
<arg value="-verbose"/>
<arg value="-dump proguard-dump.txt"/>
</java>
<delete file="temp.jar"/>
<unzip src="temp-optimized.jar" dest="${outdir-classes}" overwrite="true"/>
<delete file="temp-optimized.jar"/>
</target>
<!-- Convert this project's .class files into .dex files. --> <!-- Convert this project's .class files into .dex files. -->
<target name="dex" depends="compile"> <target name="dex" depends="compile">
<echo>Converting compiled files and external libraries into ${outdir}/${dex-file}...</echo> <echo>Converting compiled files and external libraries into ${out-folder}/${dex-file}...</echo>
<apply executable="${dx}" failonerror="true" parallel="true"> <apply executable="${dx}" failonerror="true" parallel="true">
<arg value="-JXmx256M"/>
<arg value="--dex" /> <arg value="--dex" />
<arg value="--output=${intermediate-dex-ospath}" /> <arg value="--output=${intermediate-dex-location}" />
<arg path="${outdir-classes-ospath}" /> <arg path="${out-classes-location}" />
<fileset dir="${external-libs}" includes="*.jar"/> <fileset dir="${external-libs-folder}" includes="*.jar"/>
</apply> </apply>
</target> </target>
<target name="dex-optimized" depends="compile-release,optimize"> <!-- Put the project's resources into the output package file
<echo>Converting compiled files and external libraries into ${outdir}/${dex-file}...</echo> This actually can create multiple resource package in case
<apply executable="${dx}" failonerror="true" parallel="true"> Some custom apk with specific configuration have been
<arg value="--dex" /> declared in default.properties.
<arg value="--output=${intermediate-dex-ospath}" /> -->
<arg path="${outdir-classes-ospath}" /> <target name="package-resources">
<!-- workaround to appease 'apply'. Not really the right Ant task to use here. --> <echo>Packaging resources</echo>
<fileset dir="." includes="nosuchfile.jar"/> <aaptexec executable="${aapt}"
</apply> command="package"
</target> manifest="AndroidManifest.xml"
resources="${resource-folder}"
<!-- Put the project's resources into the output package file. --> assets="${asset-folder}"
<target name="package-res-and-assets"> androidjar="${android-jar}"
<echo>Packaging resources and assets...</echo> outfolder="${out-folder}"
<exec executable="${aapt}" failonerror="true"> basename="${ant.project.name}" />
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${resource-dir}" />
<arg value="-A" />
<arg value="${asset-dir}" />
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
<!-- Same as package-res-and-assets, but without "-A ${asset-dir}" -->
<target name="package-res-no-assets">
<echo>Packaging resources...</echo>
<exec executable="${aapt}" failonerror="true">
<arg value="package" />
<arg value="-f" />
<arg value="-M" />
<arg value="AndroidManifest.xml" />
<arg value="-S" />
<arg value="${resource-dir}" />
<!-- No assets directory -->
<arg value="-I" />
<arg value="${android-jar}" />
<arg value="-F" />
<arg value="${resources-package}" />
</exec>
</target>
<!-- Invoke the proper target depending on whether or not an assets directory is present. -->
<target name="package-res">
<available file="${asset-dir}" type="dir"
property="res-target" value="and-assets" />
<property name="res-target" value="no-assets" />
<antcall target="package-res-${res-target}" />
</target> </target>
<!-- Package the application and sign it with a debug key. <!-- Package the application and sign it with a debug key.
This is the default target when building. It is used for debug. --> This is the default target when building. It is used for debug. -->
<target name="debug" depends="dex, package-res"> <target name="debug" depends="dex, package-resources">
<echo>Packaging ${out-debug-package}, and signing it with a debug key...</echo> <apkbuilder
<exec executable="${apk-builder}" failonerror="true"> outfolder="${out-folder}"
<arg value="${out-debug-package-ospath}" /> basename="${ant.project.name}"
<arg value="-z" /> signed="true"
<arg value="${resources-package-ospath}" /> verbose="false">
<arg value="-f" /> <file path="${intermediate-dex}" />
<arg value="${intermediate-dex-ospath}" /> <sourcefolder path="${source-folder}" />
<arg value="-rf" /> <jarfolder path="${external-libs-folder}" />
<arg value="${srcdir-ospath}" /> <nativefolder path="${native-libs-folder}" />
<arg value="-rj" /> </apkbuilder>
<arg value="${external-libs-ospath}" />
</exec>
</target>
<!-- Package the optimized application and sign it with a debug key. -->
<target name="debug-optimized" depends="dex-optimized, package-res">
<echo>Packaging ${out-debug-package}, and signing it with a debug key...</echo>
<exec executable="${apk-builder}" failonerror="true">
<arg value="${out-debug-package-ospath}" />
<arg value="-z" />
<arg value="${resources-package-ospath}" />
<arg value="-f" />
<arg value="${intermediate-dex-ospath}" />
<arg value="-rf" />
<arg value="${srcdir-ospath}" />
<arg value="-rj" />
<arg value="${external-libs-ospath}" />
</exec>
</target> </target>
<!-- Package the application without signing it. <!-- Package the application without signing it.
This allows for the application to be signed later with an official publishing key. --> This allows for the application to be signed later with an official publishing key. -->
<target name="release" depends="dex-optimized, package-res"> <target name="release" depends="dex, package-resources">
<echo>Packaging ${out-unsigned-package} for release...</echo> <apkbuilder
<exec executable="${apk-builder}" failonerror="true"> outfolder="${out-folder}"
<arg value="${out-unsigned-package-ospath}" /> basename="${ant.project.name}"
<arg value="-u" /> signed="false"
<arg value="-z" /> verbose="false">
<arg value="${resources-package-ospath}" /> <file path="${intermediate-dex}" />
<arg value="-f" /> <sourcefolder path="${source-folder}" />
<arg value="${intermediate-dex-ospath}" /> <jarfolder path="${external-libs-folder}" />
<arg value="-rf" /> <nativefolder path="${native-libs-folder}" />
<arg value="${srcdir-ospath}" /> </apkbuilder>
</exec> <echo>All generated packages need to be signed with jarsigner before they are published.</echo>
<echo>It will need to be signed with jarsigner before being published.</echo>
</target> </target>
<!-- Install the package on the default emulator --> <!-- Install the package on the default emulator -->
<target name="install"> <target name="install" depends="debug">
<echo>Installing ${out-debug-package} onto default emulator...</echo> <echo>Installing ${out-debug-package} onto default emulator...</echo>
<exec executable="${adb}" failonerror="true"> <exec executable="${adb}" failonerror="true">
<arg value="install" /> <arg value="install" />
<arg value="${out-debug-package}" /> <arg path="${out-debug-package}" />
</exec> </exec>
</target> </target>
<target name="reinstall"> <target name="reinstall" depends="debug">
<echo>Installing ${out-debug-package} onto default emulator...</echo> <echo>Installing ${out-debug-package} onto default emulator...</echo>
<exec executable="${adb}" failonerror="true"> <exec executable="${adb}" failonerror="true">
<arg value="install" /> <arg value="install" />
<arg value="-r" /> <arg value="-r" />
<arg value="${out-debug-package}" /> <arg path="${out-debug-package}" />
</exec> </exec>
</target> </target>
@ -344,13 +267,28 @@ limitations under the License.
<echo>Uninstalling ${application-package} from the default emulator...</echo> <echo>Uninstalling ${application-package} from the default emulator...</echo>
<exec executable="${adb}" failonerror="true"> <exec executable="${adb}" failonerror="true">
<arg value="uninstall" /> <arg value="uninstall" />
<arg value="${application-package}" /> <arg path="${application-package}" />
</exec> </exec>
</target> </target>
<target name="clean"> <target name="help">
<delete dir="${outdir}"/> <echo>Android Ant Build. Available targets:</echo>
<delete file="proguard-dump.txt"/> <echo> help: Displays this help.</echo>
<echo> debug: Builds the application and sign it with a debug key.</echo>
<echo> release: Builds the application. The generated apk file must be</echo>
<echo> signed before it is published.</echo>
<echo> install: Installs the debug package onto a running emulator or</echo>
<echo> device. This can only be used if the application has </echo>
<echo> not yet been installed.</echo>
<echo> reinstall: Installs the debug package on a running emulator or</echo>
<echo> device that already has the application.</echo>
<echo> The signatures must match.</echo>
<echo> uninstall: uninstall the application from a running emulator or</echo>
<echo> device.</echo>
</target> </target>
<target name="clean">
<delete dir="${out-folder}"/>
<delete dir="${gen-folder}"/>
</target>
</project> </project>

View file

@ -0,0 +1,11 @@
# 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 use,
# "build.properties", and override values to adapt the script to your
# project structure.
# Project target.
target=Google Inc.:Google APIs:3

View file

@ -110,7 +110,7 @@ final class CameraManager {
if (mCamera != null && mPreviewing) { if (mCamera != null && mPreviewing) {
mPreviewHandler = handler; mPreviewHandler = handler;
mPreviewMessage = message; mPreviewMessage = message;
mCamera.setPreviewCallback(previewCallback); mCamera.setOneShotPreviewCallback(previewCallback);
} }
} }
@ -147,7 +147,6 @@ final class CameraManager {
*/ */
private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() { private final Camera.PreviewCallback previewCallback = new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) { public void onPreviewFrame(byte[] data, Camera camera) {
camera.setPreviewCallback(null);
if (mPreviewHandler != null) { if (mPreviewHandler != null) {
Message message = mPreviewHandler.obtainMessage(mPreviewMessage, Message message = mPreviewHandler.obtainMessage(mPreviewMessage,
mScreenResolution.x, mScreenResolution.y, data); mScreenResolution.x, mScreenResolution.y, data);