在评论中使用无法映射的字符构建项目?
Build project with unmappable characters in comments?
我正在尝试从源代码构建 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 Buildfile and Property Task 上阅读了 ant 的文档,但该死的如果我能弄清楚如何设置源文件语言。
问题: 如何在build.xml
中设置源文件语言?
即使在注释中,无效字符也会导致编译器错误:源代码通常在转换为字节码之前进行预处理,而编译器刚遇到一个字符未映射到其字符集。
最简单的方法是编辑源文件并将其保存为 UTF-8 编码。既然是注释,去掉这个字符应该也没什么坏处吧。
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>
我正在尝试从源代码构建 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 Buildfile and Property Task 上阅读了 ant 的文档,但该死的如果我能弄清楚如何设置源文件语言。
问题: 如何在build.xml
中设置源文件语言?
即使在注释中,无效字符也会导致编译器错误:源代码通常在转换为字节码之前进行预处理,而编译器刚遇到一个字符未映射到其字符集。
最简单的方法是编辑源文件并将其保存为 UTF-8 编码。既然是注释,去掉这个字符应该也没什么坏处吧。
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>