You need to download ant, proguard and configure them first.

Then you have to genarate a build.xml file use the following command:

$android update project --path

path is the full path of your android project, eg:~/code/workspace/ENotes

now you can see there's a build.xml file under ~/code/workspace/ENotes.

Then you have to configure your build.xml file. Including sign, optimize, align.

Here's my example build.xml file.

   1 <?xml version="1.0" encoding="UTF-8"?>   2    3 <project name="ENotes" default="help">   4    5    6    7     <!-- The local.properties file is created and updated by the 'android' tool.   8    9          It contains the path to the SDK. It should *NOT* be checked in in Version  10   11          Control Systems. -->  12   13     <property file="local.properties" />  14   15   16   17     <!-- The build.properties file can be created by you and is never touched  18   19          by the 'android' tool. This is the place to change some of the default property values  20   21          used by the Ant rules.  22   23          Here are some properties you may want to change/update:  24   25   26   27          application.package  28   29              the name of your application package as defined in the manifest. Used by the  30   31              'uninstall' rule.  32   33          source.dir  34   35              the name of the source directory. Default is 'src'.  36   37          out.dir  38   39              the name of the output directory. Default is 'bin'.  40   41   42   43          Properties related to the SDK location or the project target should be updated  44   45           using the 'android' tool with the 'update' action.  46   47   48   49          This file is an integral part of the build system for your application and  50   51          should be checked in in Version Control Systems.  52   53   54   55          -->  56   57     <property file="build.properties" />  58   59   60   61     <!-- The default.properties file is created and updated by the 'android' tool, as well  62   63          as ADT.  64   65          This file is an integral part of the build system for your application and  66   67          should be checked in in Version Control Systems. -->  68   69     <property file="default.properties" />  70   71   72   73     <!-- Custom Android task to deal with the project target, and import the proper rules.  74   75          This requires ant 1.6.0 or above. -->  76   77     <path id="android.antlibs">  78   79         <pathelement path="${sdk.dir}/tools/lib/anttasks.jar" />  80   81         <pathelement path="${sdk.dir}/tools/lib/sdklib.jar" />  82   83         <pathelement path="${sdk.dir}/tools/lib/androidprefs.jar" />  84   85         <pathelement path="${sdk.dir}/tools/lib/apkbuilder.jar" />  86   87         <pathelement path="${sdk.dir}/tools/lib/jarutils.jar" />  88   89     </path>  90   91   92   93     <taskdef name="setup"  94   95         classname="com.android.ant.SetupTask"  96   97         classpathref="android.antlibs" />  98   99  100  101     <!-- Execute the Android Setup task that will setup some properties specific to the target, 102  103          and import the build rules files. 104  105  106  107          The rules file is imported from 108  109             <SDK>/platforms/<target_platform>/templates/android_rules.xml 110  111  112  113          To customize some build steps for your project: 114  115          - copy the content of the main node <project> from android_rules.xml 116  117          - paste it in this build.xml below the <setup /> task. 118  119          - disable the import by changing the setup task below to <setup import="false" /> 120  121  122  123          This will ensure that the properties are setup correctly but that your customized 124  125          build steps are used. 126  127     --> 128  129     <setup import="false" /> 130  131  132  133       <!-- Custom tasks --> 134  135     <taskdef name="aaptexec" 136  137         classname="com.android.ant.AaptExecLoopTask" 138  139         classpathref="android.antlibs" /> 140  141  142  143     <taskdef name="apkbuilder" 144  145         classname="com.android.ant.ApkBuilderTask" 146  147         classpathref="android.antlibs" /> 148  149  150  151     <taskdef name="xpath" 152  153         classname="com.android.ant.XPathTask" 154  155         classpathref="android.antlibs" /> 156  157  158  159     <!-- Properties --> 160  161  162  163     <!-- Tells adb which device to target. You can change this from the command line 164  165          by invoking "ant -Dadb.device.arg=-d" for device "ant -Dadb.device.arg=-e" for 166  167          the emulator. --> 168  169     <property name="adb.device.arg" value="" /> 170  171  172  173     <property name="android.tools.dir" location="${sdk.dir}/tools" /> 174  175     <!-- Name of the application package extracted from manifest file --> 176  177     <xpath input="AndroidManifest.xml" expression="/manifest/@package" 178  179                 output="manifest.package" /> 180  181  182  183     <!-- Input directories --> 184  185     <property name="source.dir" value="src" /> 186  187     <property name="source.absolute.dir" location="${source.dir}" /> 188  189     <property name="gen.dir" value="gen" /> 190  191     <property name="gen.absolute.dir" location="${gen.dir}" /> 192  193     <property name="resource.dir" value="res" /> 194  195     <property name="resource.absolute.dir" location="${resource.dir}" /> 196  197     <property name="asset.dir" value="assets" /> 198  199     <property name="asset.absolute.dir" location="${asset.dir}" /> 200  201  202  203     <!-- Directory for the third party java libraries --> 204  205     <property name="external.libs.dir" value="libs" /> 206  207     <property name="external.libs.absolute.dir" location="${external.libs.dir}" /> 208  209  210  211     <!-- Directory for the native libraries --> 212  213     <property name="native.libs.dir" value="libs" /> 214  215     <property name="native.libs.absolute.dir" location="${native.libs.dir}" /> 216  217  218  219     <!-- Output directories --> 220  221     <property name="out.dir" value="bin" /> 222  223     <property name="out.absolute.dir" location="${out.dir}" /> 224  225     <property name="out.classes.dir" value="${out.absolute.dir}" /> 226  227     <property name="out.classes.absolute.dir" location="${out.classes.dir}" /> 228  229  230  231     <!-- Intermediate files --> 232  233     <property name="dex.file.name" value="classes.dex" /> 234  235     <property name="intermediate.dex.file" location="${out.absolute.dir}/${dex.file.name}" /> 236  237  238  239     <!-- The final package file to generate --> 240  241     <property name="out.debug.unaligned.package" 242  243                   location="${out.absolute.dir}/${ant.project.name}-debug-unaligned.apk" /> 244  245     <property name="out.debug.package" 246  247                   location="${out.absolute.dir}/${ant.project.name}-debug.apk" /> 248  249     <property name="out.unsigned.package" 250  251                   location="${out.absolute.dir}/${ant.project.name}-unsigned.apk" /> 252  253     <property name="out.unaligned.package" 254  255                   location="${out.absolute.dir}/${ant.project.name}-unaligned.apk" /> 256  257     <property name="out.release.package" 258  259                   location="${out.absolute.dir}/${ant.project.name}-release.apk" /> 260  261  262  263     <!-- Verbosity --> 264  265     <property name="verbose" value="false" /> 266  267     <!-- This is needed by emma as it uses multilevel verbosity instead of simple 'true' or 'false' 268  269          The property 'verbosity' is not user configurable and depends exclusively on 'verbose' 270  271          value.--> 272  273     <condition property="verbosity" value="verbose" else="quiet"> 274  275         <istrue value="${verbose}" /> 276  277     </condition> 278  279     <!-- This is needed to switch verbosity of zipalign and aapt. Depends exclusively on 'verbose' 280  281          --> 282  283     <condition property="v.option" value="-v" else=""> 284  285         <istrue value="${verbose}" /> 286  287     </condition> 288  289     <!-- This is needed to switch verbosity of dx. Depends exclusively on 'verbose' --> 290  291     <condition property="verbose.option" value="--verbose" else=""> 292  293         <istrue value="${verbose}" /> 294  295     </condition> 296  297  298  299     <!-- Tools --> 300  301     <condition property="exe" value=".exe" else=""><os family="windows" /></condition> 302  303     <property name="adb" location="${android.tools.dir}/adb${exe}" /> 304  305     <property name="zipalign" location="${android.tools.dir}/zipalign${exe}" /> 306  307  308  309     <!-- Emma configuration --> 310  311     <property name="emma.dir" value="${sdk.dir}/tools/lib" /> 312  313         <path id="emma.lib"> 314  315             <pathelement location="${emma.dir}/emma.jar" /> 316  317             <pathelement location="${emma.dir}/emma_ant.jar" /> 318  319         </path> 320  321     <taskdef resource="emma_ant.properties" classpathref="emma.lib" /> 322  323     <!-- End of emma configuration --> 324  325  326  327     <!-- Macros --> 328  329  330  331     <!-- Configurable macro, which allows to pass as parameters output directory, 332  333          output dex filename and external libraries to dex (optional) --> 334  335     <macrodef name="dex-helper"> 336  337        <element name="external-libs" optional="yes" /> 338  339        <element name="extra-parameters" optional="yes" /> 340  341        <sequential> 342  343          <echo>Converting compiled files and external libraries into ${intermediate.dex.file}... 344  345          </echo> 346  347          <apply executable="${dx}" failonerror="true" parallel="true"> 348  349              <arg value="--dex" /> 350  351              <arg value="--output=${intermediate.dex.file}" /> 352  353              <extra-parameters /> 354  355              <arg line="${verbose.option}" /> 356  357              <arg path="${out.classes.absolute.dir}" /> 358  359              <fileset dir="${external.libs.absolute.dir}" includes="*.jar" /> 360  361              <external-libs /> 362  363          </apply> 364  365        </sequential> 366  367     </macrodef> 368  369  370  371     <!-- This is macro that enable passing variable list of external jar files to ApkBuilder 372  373          Example of use: 374  375          <package-helper> 376  377              <extra-jars> 378  379                 <jarfolder path="my_jars" /> 380  381                 <jarfile path="foo/bar.jar" /> 382  383                 <jarfolder path="your_jars" /> 384  385              </extra-jars> 386  387          </package-helper> --> 388  389     <macrodef name="package-helper"> 390  391         <attribute name="sign.package" /> 392  393         <element name="extra-jars" optional="yes" /> 394  395         <sequential> 396  397             <apkbuilder 398  399                     outfolder="${out.absolute.dir}" 400  401                     basename="${ant.project.name}" 402  403                     signed="@{sign.package}" 404  405                     verbose="${verbose}"> 406  407                 <file path="${intermediate.dex.file}" /> 408  409                 <sourcefolder path="${source.absolute.dir}" /> 410  411                 <nativefolder path="${native.libs.absolute.dir}" /> 412  413                 <jarfolder path="${external.libs.absolute.dir}" /> 414  415                 <extra-jars/> 416  417             </apkbuilder> 418  419         </sequential> 420  421     </macrodef> 422  423  424  425     <!-- This is macro which zipaligns in.package and outputs it to out.package. Used by targets 426  427          debug, -debug-with-emma and release.--> 428  429     <macrodef name="zipalign-helper"> 430  431         <attribute name="in.package" /> 432  433         <attribute name="out.package" /> 434  435         <sequential> 436  437             <echo>Running zip align on final apk...</echo> 438  439             <exec executable="${zipalign}" failonerror="true"> 440  441                 <arg line="${v.option}" /> 442  443                 <arg value="-f" /> 444  445                 <arg value="4" /> 446  447                 <arg path="@{in.package}" /> 448  449                 <arg path="@{out.package}" /> 450  451             </exec> 452  453         </sequential> 454  455     </macrodef> 456  457  458  459     <!-- This is macro used only for sharing code among two targets, -install and 460  461          -install-with-emma which do exactly the same but differ in dependencies --> 462  463     <macrodef name="install-helper"> 464  465         <sequential> 466  467             <echo>Installing ${out.debug.package} onto default emulator or device...</echo> 468  469             <exec executable="${adb}" failonerror="true"> 470  471                 <arg line="${adb.device.arg}" /> 472  473                 <arg value="install" /> 474  475                 <arg value="-r" /> 476  477                 <arg path="${out.debug.package}" /> 478  479             </exec> 480  481         </sequential> 482  483     </macrodef> 484  485  486  487     <!-- Rules --> 488  489  490  491     <!-- Creates the output directories if they don't exist yet. --> 492  493     <target name="-dirs"> 494  495         <echo>Creating output directories if needed...</echo> 496  497         <mkdir dir="${resource.absolute.dir}" /> 498  499         <mkdir dir="${external.libs.absolute.dir}" /> 500  501         <mkdir dir="${gen.absolute.dir}" /> 502  503         <mkdir dir="${out.absolute.dir}" /> 504  505         <mkdir dir="${out.classes.absolute.dir}" /> 506  507     </target> 508  509      510  511     <property name="proguard-home" value="D:/proguard4.6/lib"/> 512  513  514  515      <target name="optimize" depends="compile"> 516  517      <echo>optimize files...</echo> 518  519      520  521          <jar basedir="${out.classes.absolute.dir}" destfile="temp.jar"/> 522  523                    <java jar="${proguard-home}/proguard.jar" fork="true" failonerror="true"> 524  525                          <jvmarg value="-Dmaximum.inlined.code.length=32"/> 526  527                          <arg value="-injars temp.jar"/> 528  529                          <arg value="-libraryjars ${android-jar}"/> 530  531                          <arg value="-outjars optimized.jar"/> 532  533                           534  535                          <!-- <arg value="-libraryjars ${library-jar}/some_lib_used.jar"/> --> 536  537                          <arg value="-dontpreverify"/> 538  539                          <arg value="-dontoptimize"/> 540  541                         542  543                          <arg value="-dontusemixedcaseclassnames"/> 544  545                          <arg value="-repackageclasses ''"/> 546  547                          <arg value="-allowaccessmodification"/> 548  549                           550  551                           552  553                          <arg value="-keep public class * extends android.app.Activity"/> 554  555                                                     <arg value="-keep public class * extends android.app.Application"/> 556  557                                                     <arg value="-keep public class * extends android.app.Service"/> 558  559                                                     <arg value="-keep public class * extends android.content.BroadcastReceiver"/> 560  561                                                     <arg value="-keep public class * extends android.content.ContentProvider"/> 562  563                                                     <arg value="-keep public class * extends android.app.backup.BackupAgentHelper"/> 564  565                                                     <arg value="-keep public class * extends android.preference.Preference"/> 566  567                                                     <arg value="-keep public class com.android.vending.licensing.ILicensingService"/> 568  569                                                      570  571                                              572  573                           574  575                                          <!-- <arg value="-keep public class com.just2me.obfapp.receiver.*"/> --> 576  577                                                  <arg value="-optimizationpasses 5"/> 578  579                         <arg value="-verbose"/> 580  581                          <arg value="-dontskipnonpubliclibraryclasses"/> 582  583                          <arg value="-dontskipnonpubliclibraryclassmembers"/> 584  585                  </java> 586  587                  <delete file="temp.jar"/> 588  589                  <delete dir="${out.classes.absolute.dir}"/> 590  591                  <mkdir dir="${out.classes.absolute.dir}"/> 592  593                  <unzip src="optimized.jar" dest="${out.classes.absolute.dir}"/> 594  595                  <delete file="optimized.jar"/> 596  597      </target> 598  599      600  601     <!-- Generate the version number to strings.xml --> 602  603     <target name="gen-ver-num" depends="-dirs"> 604  605         <echo>Generating SVN version number to resource string...</echo> 606  607         <!--<exec executable="./genVersionNum.sh" failonerror="true"></exec> --> 608  609         <exec executable="bash"> <arg value="genVersionNum.sh"/></exec> 610  611     </target> 612  613  614  615     <!-- Generates the R.java file for this project's resources. --> 616  617     <target name="-resource-src" depends="-dirs"> 618  619         <echo>Generating R.java / Manifest.java from the resources...</echo> 620  621         <exec executable="${aapt}" failonerror="true"> 622  623             <arg value="package" /> 624  625             <arg line="${v.option}" /> 626  627             <arg value="-m" /> 628  629             <arg value="-J" /> 630  631             <arg path="${gen.absolute.dir}" /> 632  633             <arg value="-M" /> 634  635             <arg path="AndroidManifest.xml" /> 636  637             <arg value="-S" /> 638  639             <arg path="${resource.absolute.dir}" /> 640  641             <arg value="-I" /> 642  643             <arg path="${android.jar}" /> 644  645         </exec> 646  647     </target> 648  649  650  651     <!-- Generates java classes from .aidl files. --> 652  653     <target name="-aidl" depends="-dirs"> 654  655         <echo>Compiling aidl files into Java classes...</echo> 656  657         <apply executable="${aidl}" failonerror="true"> 658  659             <arg value="-p${android.aidl}" /> 660  661             <arg value="-I${source.absolute.dir}" /> 662  663             <arg value="-o${gen.absolute.dir}" /> 664  665             <fileset dir="${source.absolute.dir}"> 666  667                 <include name="**/*.aidl" /> 668  669             </fileset> 670  671         </apply> 672  673     </target> 674  675  676  677     <path id="classpathref"> 678  679         <fileset dir="./lib/"> 680  681             <include name="*.jar" /> 682  683         </fileset> 684  685     </path> 686  687  688  689     <!-- Compiles this project's .java files into .class files. --> 690  691     <target name="compile" depends="-resource-src, -aidl" 692  693                 description="Compiles project's .java files into .class files"> 694  695         <!-- If android rules are used for a test project, its classpath should include 696  697              tested project's location --> 698  699         <condition property="extensible.classpath" 700  701                            value="${tested.project.absolute.dir}/bin" else="."> 702  703             <isset property="tested.project.absolute.dir" /> 704  705         </condition> 706  707         <javac encoding="ascii" target="1.5" debug="true" extdirs="" 708  709                          710  711                 destdir="${out.classes.absolute.dir}" 712  713                 bootclasspathref="android.target.classpath" 714  715                 716  717                 > 718  719             <src path="${source.absolute.dir}" /> 720  721             <src path="${gen.absolute.dir}" /> 722  723             <classpath> 724  725                 <fileset dir="${external.libs.absolute.dir}" includes="*.jar" /> 726  727             </classpath> 728  729         </javac> 730  731     </target> 732  733  734  735     <!-- Converts this project's .class files into .dex files --> 736  737     <target name="-dex" depends="compile,optimize"> 738  739         <dex-helper /> 740  741     </target> 742  743  744  745     <!-- Puts the project's resources into the output package file 746  747          This actually can create multiple resource package in case 748  749          Some custom apk with specific configuration have been 750  751          declared in default.properties. 752  753          --> 754  755     <target name="-package-resources"> 756  757         <echo>Packaging resources</echo> 758  759         <aaptexec executable="${aapt}" 760  761                 command="package" 762  763                 manifest="AndroidManifest.xml" 764  765                 resources="${resource.absolute.dir}" 766  767                 assets="${asset.absolute.dir}" 768  769                 androidjar="${android.jar}" 770  771                 outfolder="${out.absolute.dir}" 772  773                 basename="${ant.project.name}" /> 774  775     </target> 776  777  778  779     <!-- Packages the application and sign it with a debug key. --> 780  781     <target name="-package-debug-sign" depends="-dex, -package-resources"> 782  783         <package-helper sign.package="true" /> 784  785     </target> 786  787  788  789     <!-- Packages the application without signing it. --> 790  791     <target name="-package-no-sign" depends="-dex, -package-resources"> 792  793         <package-helper sign.package="false" /> 794  795     </target> 796  797  798  799     <target name="-compile-tested-if-test" if="tested.project.dir" unless="do.not.compile.again"> 800  801        <subant target="compile"> 802  803             <fileset dir="${tested.project.absolute.dir}" includes="build.xml" /> 804  805        </subant> 806  807     </target> 808  809  810  811     <!-- Builds debug output package, provided all the necessary files are already dexed --> 812  813     <target name="debug" depends="-compile-tested-if-test, -package-debug-sign" 814  815                 description="Builds the application and signs it with a debug key."> 816  817         <zipalign-helper in.package="${out.debug.unaligned.package}" 818  819                                    out.package="${out.debug.package}" /> 820  821         <echo>Debug Package: ${out.debug.package}</echo> 822  823     </target> 824  825  826  827     <target name="-release-check"> 828  829         <condition property="release.sign"> 830  831             <and> 832  833                 <isset property="key.store" /> 834  835                 <isset property="key.alias" /> 836  837             </and> 838  839         </condition> 840  841     </target> 842  843  844  845     <target name="-release-nosign" depends="-release-check" unless="release.sign"> 846  847         <echo>No key.store and key.alias properties found in build.properties.</echo> 848  849         <echo>Please sign ${out.unsigned.package} manually</echo> 850  851         <echo>and run zipalign from the Android SDK tools.</echo> 852  853     </target> 854  855  856  857         <target name="signapk"> 858  859         <echo>Signing apk...</echo> 860  861         <signjar 862  863                 jar="${out.unsigned.package}" 864  865                 signedjar="${out.unaligned.package}" 866  867                 keystore="${key.store}" 868  869                 storepass="${key.store.password}" 870  871                 alias="${key.alias}" 872  873                 keypass="${key.alias.password}" 874  875                 verbose="${verbose}" /> 876  877  878  879         <!-- Zip aligns the APK --> 880  881         <echo>Zipalign apk...</echo> 882  883         <zipalign-helper in.package="${out.unaligned.package}" out.package="${out.release.package}" /> 884  885         <echo>Release Package: ${out.release.package}</echo> 886  887  888  889         <delete file="${out.unsigned.package}"/> 890  891         <delete file="${out.unaligned.package}"/> 892  893     </target> 894  895          896  897     <target name="release" depends="-package-no-sign, -release-nosign" if="release.sign" 898  899                 description="Builds the application. The generated apk file must be signed before 900  901                             it is published."> 902  903         <!-- Gets passwords --> 904  905         <input 906  907                 message="Please enter keystore password (store:${key.store}):" 908  909                 addproperty="key.store.password" /> 910  911         <input 912  913                 message="Please enter password for alias '${key.alias}':" 914  915                 addproperty="key.alias.password" /> 916  917  918  919         <!-- Signs the APK --> 920  921         <echo>Signing final apk...</echo> 922  923         <signjar 924  925                 jar="${out.unsigned.package}" 926  927                 signedjar="${out.unaligned.package}" 928  929                 keystore="${key.store}" 930  931                 storepass="${key.store.password}" 932  933                 alias="${key.alias}" 934  935                 keypass="${key.alias.password}" 936  937                 verbose="${verbose}" /> 938  939  940  941         <!-- Zip aligns the APK --> 942  943         <zipalign-helper in.package="${out.unaligned.package}" 944  945                                    out.package="${out.release.package}" /> 946  947         <echo>Release Package: ${out.release.package}</echo> 948  949     </target> 950  951  952  953     <target name="install" depends="debug" 954  955                 description="Installs/reinstalls the debug package onto a running 956  957                             emulator or device. If the application was previously installed, 958  959                             the signatures must match." > 960  961         <install-helper /> 962  963     </target> 964  965  966  967     <target name="-uninstall-check"> 968  969         <condition property="uninstall.run"> 970  971            <isset property="manifest.package" /> 972  973         </condition> 974  975     </target> 976  977  978  979     <target name="-uninstall-error" depends="-uninstall-check" unless="uninstall.run"> 980  981         <echo>Unable to run 'ant uninstall', manifest.package property is not defined. 982  983         </echo> 984  985     </target> 986  987  988  989     <!-- Uninstalls the package from the default emulator/device --> 990  991     <target name="uninstall" depends="-uninstall-error" if="uninstall.run" 992  993                 description="Uninstalls the application from a running emulator or device."> 994  995         <echo>Uninstalling ${manifest.package} from the default emulator or device...</echo> 996  997         <exec executable="${adb}" failonerror="true"> 998  999             <arg line="${adb.device.arg}" />1000 1001             <arg value="uninstall" />1002 1003             <arg value="${manifest.package}" />1004 1005         </exec>1006 1007     </target>1008 1009 1010 1011     <target name="clean" description="Removes output files created by other targets.">1012 1013         <delete dir="${out.absolute.dir}" verbose="${verbose}" />1014 1015         <delete dir="${gen.absolute.dir}" verbose="${verbose}" />1016 1017     </target>1018 1019 1020 1021     <!-- Targets for code-coverage measurement purposes, invoked from external file -->1022 1023 1024 1025     <!-- Emma-instruments tested project classes (compiles the tested project if necessary)1026 1027              and writes instrumented classes to ${instrumentation.absolute.dir}/classes -->1028 1029     <target name="-emma-instrument" depends="compile">1030 1031         <echo>Instrumenting classes from ${out.absolute.dir}/classes...</echo>1032 1033         <!-- It only instruments class files, not any external libs -->1034 1035         <emma enabled="true">1036 1037             <instr verbosity="${verbosity}"1038 1039                    mode="overwrite"1040 1041                    instrpath="${out.absolute.dir}/classes"1042 1043                    outdir="${out.absolute.dir}/classes">1044 1045             </instr>1046 1047             <!-- TODO: exclusion filters on R*.class and allowing custom exclusion from1048 1049                  user defined file -->1050 1051         </emma>1052 1053     </target>1054 1055 1056 1057     <target name="-dex-instrumented" depends="-emma-instrument">1058 1059        <dex-helper>1060 1061           <extra-parameters>1062 1063             <arg value="--no-locals" />1064 1065           </extra-parameters>1066 1067           <external-libs>1068 1069             <fileset file="${emma.dir}/emma_device.jar" />1070 1071           </external-libs>1072 1073        </dex-helper>1074 1075     </target>1076 1077 1078 1079     <!-- Invoked from external files for code coverage purposes -->1080 1081     <target name="-package-with-emma" depends="-dex-instrumented, -package-resources">1082 1083         <package-helper sign.package="true">1084 1085             <extra-jars>1086 1087                 <!-- Injected from external file -->1088 1089                 <jarfile path="${emma.dir}/emma_device.jar" />1090 1091             </extra-jars>1092 1093         </package-helper>1094 1095     </target>1096 1097 1098 1099     <target name="-debug-with-emma" depends="-package-with-emma">1100 1101         <zipalign-helper in.package="${out.debug.unaligned.package}"1102 1103                                    out.package="${out.debug.package}" />1104 1105     </target>1106 1107 1108 1109     <target name="-install-with-emma" depends="-debug-with-emma">1110 1111         <install-helper />1112 1113     </target>1114 1115 1116 1117     <!-- End of targets for code-coverage measurement purposes -->1118 1119 1120 1121     <target name="help">1122 1123         <!-- displays starts at col 131124 1125               |13                                                              80| -->1126 1127         <echo>Android Ant Build. Available targets:</echo>1128 1129         <echo>   help:      Displays this help.</echo>1130 1131         <echo>   clean:     Removes output files created by other targets.</echo>1132 1133         <echo>   compile:   Compiles project's .java files into .class files.</echo>1134 1135         <echo>   debug:     Builds the application and signs it with a debug key.</echo>1136 1137         <echo>   release:   Builds the application. The generated apk file must be</echo>1138 1139         <echo>              signed before it is published.</echo>1140 1141         <echo>   install:   Installs/reinstalls the debug package onto a running</echo>1142 1143         <echo>              emulator or device.</echo>1144 1145         <echo>              If the application was previously installed, the</echo>1146 1147         <echo>              signatures must match.</echo>1148 1149         <echo>   uninstall: Uninstalls the application from a running emulator or</echo>1150 1151         <echo>              device.</echo>1152 1153     </target>1154 1155 </project>

Then you can enter the project's directory and use command:

$ant release

to genarate a release version of result.

Some time there are mistakes like

[javac]****警告:编码 ascii 的不可映射字符********

  出现“警告:编码 ascii 的不可映射字符”错误

To solve this kind of mistake, find the javac part in build.xml file, change the encoding 'ascii' to an appropriate one.

such as 'gbk' or 'utf-8'

更多相关文章

  1. Android中字符串的拆分-split
  2. Android(安卓)让你的 EditText 只接受指定字符
  3. android微信支付
  4. 详解Android(安卓)TextView属性ellipsize多行失效的解决思路
  5. Android(安卓)Studio 3.3 配置aspectJ : app-module和library-mod
  6. Android根据联系人姓名首字符顺序读取通讯录
  7. 003.android资源文件剖析(Resources)
  8. iphone/android比较学习之──图片、文件、字符串
  9. android:layout_weight

随机推荐

  1. javafx for android or ios ?
  2. Android系统中设置TextView的行间距(非行
  3. Android学习笔记(二三): 多页显示-Flipper的
  4. android中activity的四种加载模式
  5. android知识链接汇总(3)
  6. 第一天
  7. Android UI开发第一篇――android的九宫
  8. Android NDK开发实例教程
  9. 【android】下载文件至本应用程序的file
  10. Android Junit Test