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 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料