在评论中使用不可映射的字符构建项目?

时间:2015-02-14 22:42:36

标签: java android macos ant compiler-errors

我正在尝试从源代码构建Android Permission Explorer。我查看了svn checkout http://android-permission-explorer.googlecode.com/svn/。结账后我在项目中添加了一个基本build.xml,然后放入终端:

$ /usr/local/bin/ant release
...
-compile:
    [javac] Compiling 14 source files to .../android-permission-explorer/bin/classes
    [javac] .../android-permission-explorer/src/com/carlocriniti/android/permission_explorer/ApplicationDetail.java:7: error: unmappable character for encoding UTF-8
    [javac]  * Activit� d'affichage du d�tail d'une application
...

错误为unmappable character for encoding UTF-8

以下是ApplicationDetail.java中的违规行(自评论以来对我没有意义):

/*
 * Projet   : Permission Explorer
 * Auteur   : Carlo Criniti
 * Date     : 2011.06.10
 * 
 * Classe ApplicationDetail
 * ActivitÈ d'affichage du dÈtail d'une application
 * avec les permissions qu'elle utilise
 */

这样有多个错误。如果/usr/local/bin/ant release 2>&1 | grep -i error | wc -l是准确的,则其中有103个。

问题:为什么评论中的字符会影响构建?

我在Writing a Simple BuildfileProperty Task处理过ant的文档,但是如果我能弄清楚如何设置源文件语言那该死的。

问题:如何在build.xml中设置源文件语言?

2 个答案:

答案 0 :(得分:1)

即使它们在注释中,无效字符也会导致编译器错误:源代码通常在转换为字节码之前预处理,并且编译器刚刚遇到未映射到其的字符字符集。

最简单的方法是编辑源文件并以UTF-8编码保存。由于这是一个评论,因此删除角色也可能不会受到伤害。

答案 1 :(得分:1)

Manouti为Java没有忽略评论的原因提供了答案。关于我可以对Java说的所有内容是: 愚蠢的想法 。他们用不应该编译的东西打破了编译过程。

要解决此问题,javac需要通过java.encoding指定的编码。最简单的方法如下:

$ /usr/local/bin/ant -Djava.encoding=ISO-8859-1 release
Buildfile: …/android-permission-explorer/build.xml

-set-mode-check:

-set-release-mode:

-release-obfuscation-check:
     [echo] proguard.config is ${proguard.config}

-pre-build:

-check-env:
 [checkenv] Android SDK Tools Revision 24.0.2
 [checkenv] Installed at /opt/android-sdk-macosx

-setup:
     [echo] Project Name: Permission Explorer
  [gettype] Project Type: Application

-build-setup:
[getbuildtools] Using latest Build Tools: 21.1.2
     [echo] Resolving Build Target for Permission Explorer...
[gettarget] Project Target:   Android 2.2
[gettarget] API level:        8
     [echo] ----------
     [echo] Creating output directories if needed...
    [mkdir] Created dir: …/android-permission-explorer/bin/rsObj
    [mkdir] Created dir: …/android-permission-explorer/bin/rsLibs
     [echo] ----------
     [echo] Resolving Dependencies for Permission Explorer...
[dependency] Library dependencies:
[dependency] No Libraries
[dependency] 
[dependency] ------------------
[dependency] API<=15: Adding annotations.jar to the classpath.
     [echo] ----------
     [echo] Building Libraries with 'release'...
   [subant] No sub-builds to iterate on   

...
-dex:
      [dex] input: …/android-permission-explorer/bin/classes
      [dex] input: /opt/android-sdk-macosx/tools/support/annotations.jar
      [dex] Pre-Dexing /opt/android-sdk-macosx/tools/support/annotations.jar -> annotations-b850151b30962160fb610e078fc74448.jar
      [dex] Converting compiled files and external libraries into …/android-permission-explorer/bin/classes.dex...
       [dx] Merged dex A (37 defs/57.7KiB) with dex B (2 defs/1.1KiB). Result is 39 defs/66.6KiB. Took 0.1s

...
release:

BUILD SUCCESSFUL
Total time: 4 seconds

另一个有效的解决方案是使用以下内容修改项目的build.xml文件。

<project>
  ...
  <property name="java.encoding" value="ISO-8859-1" />
</project>