- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ICU-Project.org Library (ICU4J v55.1)在我的 Android 应用程序中,它有 Java 日历的绝佳替代品,例如日本日历和伊斯兰日历,但 jar 文件总是导致 Eclipse 或我的应用程序崩溃
我无法在我的 Android 应用程序中使用它,但它在正常的 Java 项目中可以 100% 正常工作,所以我不知道问题是什么
第一次,我将 jar 文件复制到我的 lib 文件夹,然后右键单击 > 添加到构建路径
当我在 Android 模拟器中运行应用程序时,此方法会导致 IDE 被终止并显示以下消息:
Unable to execute dex: Java heap space
Java heap space
虽然我已经增加了堆空间,如下所示,但没有解决任何问题:
--launcher.XXMaxPermSize
2048M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
2048m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms2048m
-Xmx2048m
第二次:我已删除 jar 文件,并从中添加它(右键单击 MyApp > 属性 > Java 构建路径 > 库选项卡 > 添加外部 jar
在“订单和导出”选项卡中,未选中该 jar
现在,当我运行 Android 模拟器时,它可以工作,但我的应用程序崩溃并出现以下错误:
08-27 18:46:06.635: I/dalvikvm(295): Could not find method com.ibm.icu.util.Calendar.getInstance, referenced from method com.c.cx.Main.onCreate
08-27 18:46:06.635: W/dalvikvm(295): VFY: unable to resolve static method 13898: Lcom/ibm/icu/util/Calendar;.getInstance ()Lcom/ibm/icu/util/Calendar;
08-27 18:46:06.665: D/dalvikvm(295): VFY: replacing opcode 0x71 at 0x0009
08-27 18:46:06.665: D/dalvikvm(295): VFY: dead code 0x000c-002b in Lcom/c/cx/Main;.onCreate (Landroid/os/Bundle;)V
08-27 18:46:06.805: D/AndroidRuntime(295): Shutting down VM
08-27 18:46:06.805: W/dalvikvm(295): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-27 18:46:06.815: E/AndroidRuntime(295): FATAL EXCEPTION: main
08-27 18:46:06.815: E/AndroidRuntime(295): java.lang.NoClassDefFoundError: com.ibm.icu.util.Calendar
08-27 18:46:06.815: E/AndroidRuntime(295): at com.c.cx.Main.onCreate(Main.java:15)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.os.Looper.loop(Looper.java:123)
08-27 18:46:06.815: E/AndroidRuntime(295): at android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 18:46:06.815: E/AndroidRuntime(295): at java.lang.reflect.Method.invokeNative(Native Method)
08-27 18:46:06.815: E/AndroidRuntime(295): at java.lang.reflect.Method.invoke(Method.java:521)
08-27 18:46:06.815: E/AndroidRuntime(295): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 18:46:06.815: E/AndroidRuntime(295): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 18:46:06.815: E/AndroidRuntime(295): at dalvik.system.NativeStart.main(Native Method)
我对库的使用:
package com.c.cx;
import com.ibm.icu.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Calendar cal = Calendar.getInstance();
Toast.makeText(getApplicationContext(), ""+cal.get(Calendar.YEAR), Toast.LENGTH_SHORT).show();
}
}
我的JDK版本:1.6,我已经将其更改为1.7,没有解决任何问题。
请先尝试一下再做出判断。
最佳答案
嗯,ICU 主要不是为 Android 设计的。尤其是有两件事让我担心:
我也不确定在 Android 平台上使用类加载器在 jar 内加载资源是否是一种有效的机制。其他库已观察到与此主题相关的性能问题 - 例如 Joda-Time-Android (特别是“为什么选择这个库?”部分)或 Threeten-ABP 。这足以让我克隆自己的名为 Time4J/A 的库,并将其重新架构为优化的 aar 库,使用 Assets 文件作为资源。
关于您提到的 ICU 伊斯兰日历“很棒”的信息。我敢于提出不同意见。与 Joda-Time 一样,ICU 的伊斯兰变体只是一种算法近似值,但无法取代沙特阿拉伯的 umalqura 日历等基于目击的变体。
更正:现在我看到 ICU 也声称支持从 v52 版本开始的 Umalqura(只知道旧版本)。因此 ICU 对伊斯兰日历的支持确实比大多数其他库更好。
2015年8月31日更新:
现在是我回答的积极部分(第一部分相当消极 - 抱歉)。今天我发布了Time4A-v3.6-2015f 。它包含一个回历日历,涵盖 ICU4J 支持的所有变体。示例:
PlainDate today = SystemClock.inLocalView().today();
System.out.println(today); // 2015-08-31
HijriCalendar hijri = // conversion on local timeline at noon
today.transform(HijriCalendar.class, HijriCalendar.VARIANT_ICU4J);
System.out.println(hijri); // AH-1436-11-17[islamic-icu4j]
与公历日期的反向转换很简单:
System.out.println(hijri.transform(PlainDate.class));
请注意,Umalqura 将显示 1436-11-16。 ICU 日历类型映射如下:
HijriCalendar.VARIANT_ICU4J => IslamicCalendar.CalculationType.ISLAMIC
HijriCalendar.VARIANT_UMALQURA => IslamicCalendar.CalculationType.ISLAMIC_UMALQURA
HijriAlgorithm.WEST_ISLAMIC_CIVIL => IslamicCalendar.CalculationType.ISLAMIC_CIVIL
HijriAlgorithm.WEST_ISLAMIC_ASTRO => IslamicCalendar.CalculationType.ISLAMIC_TBLA
使用 ISLAMIC 的天文 ICU 模拟的基础数据没有在 Time4J 中重新计算,而是使用简单的传输代码工具(基于 ICU4j)取代,例如:
IslamicCalendar cal = new IslamicCalendar(TimeZone.GMT, Locale.ROOT);
cal.clear();
cal.setCalculationType(IslamicCalendar.CalculationType.ISLAMIC);
for (int hyear = 1; hyear <= 1600; hyear++) {[
cal.set(Calendar.YEAR, hyear);
// here writing the islamic year in a data-file
for (int hmonth = 1; hmonth <= 12; hmonth++) {
cal.set(Calendar.MONTH, hmonth - 1); // zero-based-index
cal.set(Calendar.DAY_OF_MONTH, 1);
int len = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
if (hmonth > 1) {
// write a space into the file
}
// write the length of month in days
}
}
此代码确保 Time4J 管理与 ICU4J 在 1-1600 年范围内完全相同的数据。所以你应该能够用 Time4A(AAR 库大约 724kB)替换 ICU4J。我已经在 Android Studio 模拟器上测试过了。您实际上不必担心失去 i18n 功能。 Time4A支持45种语言,包括阿拉伯语、波斯语等伊斯兰时代和伊斯兰月份的名称(基于CLDR-26)。 online-javadoc 中显示了格式化示例。 .
关于eclipse - ICU-Project.org 库在 Android 上运行是否足够?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254347/
我正在尝试学习 ICU 语法并希望能够表达在 ICU message format 中列出. 例如,给定数据: items: - cool - handy - neat 我希望能够生成如下
是否可以获得适当的大写,例如使用 ICU4C 的英文文本但没有构建任何自定义的非大写单词集?比如说,鉴于对峡湾的渴望,我希望获得对峡湾的渴望。 使用 ucasemap_utf8ToTitle() 和
我想编译 icu sqlite extension静态链接到 icu . 这是我试过的,也许错误对你来说是显而易见的。 > cd icu/source> ./runConfigureIcu Linux
我试图将我们 CI 环境中的 Node 版本从 Node 6 升级到 Node 8。我也更新了完整的 icu 版本。 $NODE_ICU_DATA 设置为 /usr/lib/node_modules/
我今天开始使用最新的 Android Build Tools (ABT) v19.0.3 收到消息。乍一看,我认为这可能是 ABT 的问题。然而,更仔细的调查显示这条消息: android.suppo
unicode 排序背后的理论是什么?我明白它是如何工作的,但我不明白为什么 they决定采用此标准进行归类排序。 似乎当您有两个字符串要比较时,例如使用 ucol_strcolliter(): uc
我的应用程序可能在一个列表中包含由不同字母/语言组成的字符串。我似乎无法找到有关对这些进行排序的正确方法应该是什么的任何信息,或者任何表明 ICU 支持此功能的迹象。 示例列表: 苹果 яблоко
如何在iPhone应用程序的工作区中使用ICU(Unicode国际组件)将sqlite编译为项目? 我之前已经编译了sqlite合并,但是我不确定应该下载哪些文件以及需要将哪些脚本添加到xcode中-
我正在尝试使用 ICU 音译器对某些文本进行非常具体的转换,如 here 所述. 我的文本包含半角片假名字符和常规拉丁字符。我想将半角片假名转换为全角片假名,同时保持非片假名字符不变。 我想简单地应用
有没有办法探测ICU library对于所有 UChar's表示库支持的货币符号? 我当前的解决方案是遍历所有语言环境并针对每个语言环境,执行如下操作: const DecimalFormatSymb
谁能解释为什么下面的比较不相等? void CompareTest() { UErrorCode status = U_ZERO_ERROR; UChar ruleset[500]; *rul
有没有办法探测 ICU最小面额的货币区域设置?例如,美国为 0.01 美元,韩国 (ko_KR) 为 ₩1。我想在 DecimalFormat object 上调用 getRoundingIncrem
我正在创建 SQLite3 的自定义构建,我想实现不区分大小写的文本列。 是否可以创建不区分大小写的排序规则? 最佳答案 你可能想调用 ucol_setStrength具有 UCOL_PRIMARY
我们有使用 ICU 库处理 Unicode 字符串的代码。当我们尝试构建它时,没有出现编译错误,但链接失败了。我用以下代码创建了一个小测试程序: #define U_STATIC_IMPLEMENTA
有人知道 ICU 字符集检测器的数据是如何构建的吗?添加其他语言是否困难? 例如,我在错误跟踪器中看到,自 2007 年以来就打开了检测泰语的票证,但直到今天都没有新内容。 谢谢 最佳答案 我会在 I
您好,我将我的sql语句修改为 CREATE VIRTUAL TABLE [v_fts] USING fts4 ( [title], tokenize=icu )" 但是当我尝试插入数据时出现错误
我的目标是逐个字符地迭代 Unicode 文本字符串,但下面的代码迭代的是代码单元而不是代码点,即使我使用的是 next32PostInc () 应该迭代代码点: void iterate_codep
是否可以在不退回到正则表达式的情况下使用 ICU 完成? 目前我规范化文件名是这样的: protected function normalizeFilename($filename) { $t
我了解 ICU 的本地化部分 - 日期、时间和货币格式、整理等。在消息翻译方面,我看到有人说 ICU 不提供消息翻译功能 - 例如查看 this SOF question . 但是,在查看 ICU 文
我想知道是否有一种方法可以在 ICU (c++) 库中引用字符串。存在 "\Q"+ string + "\E"但我生成的输入作为提供的字符串输入。似乎没有任何 ICU 引用正则表达式方法。只需将字符串
我是一名优秀的程序员,十分优秀!