lazyzoon 2015-08-04 03:01 采纳率: 100%
浏览 2749

android ant 打包,包含第三方jar库且有资源文件的工程

<?xml version="1.0" encoding="UTF-8"?>
name="MainProject"
basedir="."
default="main" >

<!--
     The local.properties file is created and updated by the 'android' tool.
     It contains the path to the SDK. It should *NOT* be checked into
     Version Control Systems.
-->

<property file="local.properties" />

<property
    name="apk-name"
    value="product" />

<property
    name="apk-version"
    value="latest" />

<property
    name="apk-market"
    value="dev" />

<!-- android.jar路径 -->

<property
    name="android-jar"
    value="/opt/adt/sdk/platforms/android-19/android.jar" />

<!-- android.tools路径 -->

<property
    name="android.tools"
    value="/opt/adt/sdk/tools" />


<!-- 初始化 目录文件 -->
<target name="init" >

    <echo>
            start initing ... 
    </echo>

    <mkdir dir="out" />

    <delete>

        <fileset dir="out" >
        </fileset>
    </delete>

    <mkdir dir="gen" />

    <delete>

        <fileset dir="gen" >
        </fileset>
    </delete>

    <mkdir dir="assets" />

    <delete>

        <fileset dir="assets" >
        </fileset>
    </delete>

    <mkdir dir="bin/classes" />

    <delete>

        <fileset dir="bin/classes" >
        </fileset>
    </delete>


    <!-- ${apk-version}表示版本,后面会详细讲到 -->

    <mkdir dir="build/${apk-version}" />

    <echo>
            finish initing. 
    </echo>
</target>

<target
    name="main"
    depends="init" >

    <echo>
            generating R.java for project to dir gen (using aapt) ... 
    </echo>

    <exec executable="aapt" failonerror="true" >

        <arg value="package" /> <!-- package表示打包 -->
        <arg value="-m" /> <!-- m,J,gen表示创建包名的目录和R.java到gen目录下 -->

        <arg value="-J" />

        <arg value="gen" />

        <arg value="-M" /> <!-- M指定AndroidManifest.xml文件 -->

        <arg value="AndroidManifest.xml" />

        <arg value="-S" /> <!-- S指定res目录,生成对应的ID,可多个 -->

        <arg value="res" />

        <arg value="-S" />

        <arg value="../SlideMenu/res" />

        <arg value="-I" /> <!-- I指定android包的位置 -->

        <arg value="${android-jar}" />

        <arg value="--auto-add-overlay" /> <!-- 这个重要,覆盖资源,不然报错 -->
    </exec>

generating R.java for library to dir gen (using aapt)

    <exec executable="aapt" failonerror="true">
        <arg value="package" />
        <arg value="-m" />
        <arg value="--non-constant-id" />
        <arg value="--auto-add-overlay" />
        <arg value="-J" />
        <arg value="gen" />
        <arg value="-M" />
        <arg value="../SlideMenu/AndroidManifest.xml" />
        <arg value="-S" />
        <arg value="res" />
        <arg value="-S" />
        <arg value="../SlideMenu/res" />
        <arg value="-I" />
        <arg value="${android-jar}" />
    </exec>



    <!-- 第三方jar包需要引用,用于辅助编译 -->

    <path id="project.libs" >

        <fileset dir="libs" >

            <include name="*.jar" />
        </fileset>
    </path>

    <echo>
            compiling java files to class files (include R.java, library and the third-party jars) ... 
    </echo>

    <!-- 生成的class文件全部保存到bin/classes目录下 -->

    <javac
        bootclasspath="${android-jar}"
        destdir="bin/classes" >

        <src path="../RemoteHelpe/src" />

         <src path="../SlideMenu/src" />

        <src path="src" />

        <src path="gen" />

        <classpath refid="project.libs" />
    </javac>

    <echo>
            packaging class files (include the third-party jars) to calsses.dex ... 
    </echo>

    <exec executable="dx" >

        <arg value="--dex" />

        <arg value="--output=out/classes.dex" /> <!-- 输出 -->

        <arg value="bin/classes" /> <!-- classes文件位置 -->

        <arg value="libs" /> <!-- 把libs下所有jar打包 -->
    </exec>

    <echo>
            packaging resource (include res, assets, AndroidManifest.xml, etc.) to res.zip ... 
    </echo>

<!-- 打包资源文件 -->
    <exec executable="aapt" >

        <arg value="package" />

        <arg value="-f" /> <!-- 资源覆盖重写 -->

        <arg value="-M" />

        <arg value="AndroidManifest.xml" />

        <arg value="-S" />

        <arg value="res" />

         <arg value="-S" /> <!-- lib资源文件的res -->

        <arg value="../SlideMenu/res" />



        <arg value="-A" /> <!-- 与R.java不同,需要asset目录也打包 -->

        <arg value="assets" />

        <arg value="-I" />

        <arg value="${android-jar}" />

        <arg value="-F" /> <!-- 输出资源压缩包 -->

        <arg value="out/res.zip" />

        <arg value="--auto-add-overlay" />
    </exec>

    <echo>
            building unsigned.apk ... 
    </echo>

    <java
        classname="com.android.sdklib.build.ApkBuilderMain"
        classpath="${android.tools}/lib/sdklib.jar" >

        <arg value="out/unsigned.apk" />

        <arg value="-u" />

        <arg value="-z" />

        <arg value="out/res.zip" />

        <arg value="-f" />

        <arg value="out/classes.dex" />

        <arg value="-nf" />  

        <arg value="./libs" />  

    </java>

    <!-- 生成apk文件到build目录下 -->
    <!-- 其中${apk-version/name/market}用户多渠道打包,后面会讲到 -->

    <echo>
                signing the unsigned apk to final product apk ... 
    </echo>

    <exec executable="java" >

        <arg value="-jar" />

        <arg value="../sign/signapk.jar" />

        <arg value="../sign/testkey.x509.pem" />

        <arg value="../sign/testkey.pk8" />

        <arg value="out/unsigned.apk" />

        <arg value="hello.apk" />
    </exec>

    <echo>
            done.
    </echo>
</target>

其实我现在的主要问题是:在打包jar库资源文件的时候,由于我的主程序中的一个layout文件引用了xmlns:wison="http://schemas.android.com/apk/res/com.main.project" 的说明;导致了 res/layout/audio.xml:260: error: No resource identifier found for attribute 'switchMinHeight' in package 'com.main.project' 的问题;

appt库资源文件的时候出的这个错。

请问大侠们怎么解决这个问题呢?

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥20 sub地址DHCP问题
    • ¥15 delta降尺度计算的一些细节,有偿
    • ¥15 Arduino红外遥控代码有问题
    • ¥15 数值计算离散正交多项式
    • ¥30 数值计算均差系数编程
    • ¥15 redis-full-check比较 两个集群的数据出错
    • ¥15 Matlab编程问题
    • ¥15 训练的多模态特征融合模型准确度很低怎么办
    • ¥15 kylin启动报错log4j类冲突
    • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大