• [转] Ant 编译 Android 项目为 Apk 实战, 常见问题解决


    补充,自行安装Ant, 配置ant环境变量, 在android 项目 根目录下使用

     android update project

    可以自动生成 build.xml local.peoperties 文件

    //------------------------------------------------------------------------------------------------------------------

    1、背景

    项目进行到一定程度了,每次发布前,产品要求打包测试,都需要手动从eclipse中导出签名APK,很是麻烦。于是想起了之前探索过的Ant自动签名打包。查看自己之前写的博客Windows系统下Ant自动编译打包并签名Android应用——探索篇,边动手边复习。但是后面遇到了一大串的问题...

    2、问题解决过程

      1)、libs库中的第三方包

      如果项目只是引用了第三方jar包,只要将jar包放入项目libs目录下就可以了,ant编译的时候会自动把第三方jar包加入进去的,没有任何问题。

      2)、项目引用了其他library项目

      如果项目中引用了其他library项目,在使用android update project命令的时候,会提示你在命令后面添加--subproject参数来将其他引用项目一起update,一开始以为没什么问题,就没走这步,谁知道后面提示找不到library项目的build.xml文件。

    BUILD FAILED /Android/SDK/sdk/tools/ant/build.xml:601: Invalid file: /依赖项目/build.xml   

      提示这个错误,不要着急,毕竟能大概知道原因,就是因为引用的第三方library项目没有build.xml文件吧。没关系,我们对所有第三方项目都执行一次 android update project 命令,让它们根目录下都自动生成 build.xml 和 local.properties 文件,问题迎刃而解。

      3)、invalid resource directory name: F:workspacelibin es/crunch 错误

    -code-gen:
    [mergemanifest] Found Deleted Target File
    [mergemanifest] Merging AndroidManifest files into one.
    [mergemanifest] Manifest merger disabled. Using project manifest only.
         [echo] Handling aidl files...
         [aidl] No AIDL files to compile.
         [echo] ----------
         [echo] Handling RenderScript files...
         [echo] ----------
         [echo] Handling Resources...
         [aapt] Generating resource IDs...
         [aapt] invalid resource directory name: F:workspacelibin
    es/crunch
     
    BUILD FAILED
    D:Androidsdk	oolsantuild.xml:601: The following error occurred while executing this line:
    D:Androidsdk	oolsantuild.xml:653: The following error occurred while executing this line:
    D:Androidsdk	oolsantuild.xml:698: null returned: 1

      遇到这个错误,编译失败,很棘手,完全不知道原因。通过查找资料,发现可能是因为Android  SDK版本太新了(我用的是22.6.2),会自动生成crunch目录,而ant在编译时总是不识别bin目录下编译好的资源。

      找到两个解决方法:

      ①、关掉eclipse,因为eclipse自动生成resincrunch目录;去到项目目录下删掉bin文件夹;命令行中执行ant release命令;

      ②、在ant oolsuild.xml或者项目的build.xml文件中添加

     
    <property name="aapt.ignore.assets" value="<dir>crunch:!.svn:!.git:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*.scc:*~" />  

      我的做法是先按照①的做法,再在项目的build.xml文件中添加②的属性,也不知道②的屏蔽方法会不会造成其他问题,反正命令行中提示如下

    -compile:
        [javac] Compiling 93 source files to /Users/Rubert/myApp/platforms/android/CordovaLib/ant-build/classes
        [javac] 警告: [options] 源值1.5已过时, 将在未来所有发行版中删除
        [javac] 警告: [options] 目标值1.5已过时, 将在未来所有发行版中删除
        [javac] 警告: [options] 要隐藏有关已过时选项的警告, 请使用 -Xlint:-options。
        [javac] 注: 某些输入文件使用或覆盖了已过时的 API。
        [javac] 注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
        [javac] 3 个警告
        [echo] Creating library output jar file...

      4)、遇到java文件编码UTF-8 BOM头签名错误(非法字符 ufeff或者65279)

      这个问题显而易见,就是因为文件编码UTF-8的签名头的问题,使用文本编辑器将文件重新保存为不带BOM头的UTF-8编码文件,OK。我用的是Sublime Text 2。

      3、最后结果

    release:
    
    BUILD SUCCESSFUL
    Total time: 1 minute 27 seconds
     
    转载请注明出处:http://duwei.cnblogs.com/
  • 相关阅读:
    UVA1394 And Then There Was One
    delphi编程CRC算法的实现,以下是全部的代码
    SQLite学习手册(临时文件)
    SQLite学习手册(实例代码<一>)
    SQLite学习手册(锁和并发控制)
    Delphi中比较两个字符串相似性的百分比算法
    SQLite学习手册(内存数据库)
    delphi 读取网卡mac的3种方式
    从内存中加载并运行exe
    Windows消息机制要点
  • 原文地址:https://www.cnblogs.com/duwei/p/4270194.html
Copyright © 2020-2023  润新知