添加benCoding.AlarmManager模块后Titanium应用崩溃求助
解决Titanium SDK 7.x中benCoding.AlarmManager模块崩溃的问题
首先,你的崩溃日志里的核心错误dlopen failed: cannot locate symbol "_ZNSt3__112__next_primeEj",本质是模块版本与Titanium SDK版本不兼容导致的:benCoding.AlarmManager 1.0.0是针对Titanium 3.x/4.x版本编译的,而Titanium 7.x已经切换到了更新的V8引擎和LLVM libc标准库,老模块编译时依赖的GNU stdc符号在新环境中找不到,所以加载模块时崩溃。
下面是具体的解决步骤,按优先级推荐:
1. 使用适配Titanium 7.x的模块版本
benCoding.AlarmManager的官方1.0.0版本已经停止维护,你需要找适配Titanium 7.x的分支或社区维护版本:
- 可以查找该模块的GitHub仓库fork,找已经更新到兼容Titanium 7.x的版本;
- 如果找不到现成的,自己重新编译模块:
- 下载模块的源码;
- 配置Titanium SDK 7.0.0 GA的开发环境;
- 运行
titanium build --platform android --build-type module命令重新编译模块; - 编译完成后会生成新的模块zip包。
2. 正确安装模块的步骤
不管是用找到的兼容版本还是自己编译的模块,都要按以下步骤安装:
手动安装:
- 解压模块zip包到Titanium的模块目录:
- Mac:
~/Library/Application Support/Titanium/modules/android/bencoding.alarmmanager/<新版本号> - Windows:
C:\Users\<你的用户名>\AppData\Roaming\Titanium\modules\android\bencoding.alarmmanager\<新版本号>
- Mac:
- 打开tiapp.xml,更新模块配置为新的版本号:
<modules> <module platform="android" version="x.x.x">bencoding.alarmmanager</module> </modules>
- 解压模块zip包到Titanium的模块目录:
通过Titanium Studio安装:
- 打开Titanium Studio,点击
Help > Install Mobile Module; - 选择下载/编译好的模块zip包,按照向导完成安装;
- 安装完成后,tiapp.xml会自动更新模块配置。
- 打开Titanium Studio,点击
最后清理项目缓存:点击
Project > Clean,然后重新运行应用。
3. 替代方案:直接使用Titanium原生API实现闹钟功能
如果找不到兼容的模块,也可以直接通过Titanium的Android原生API调用AlarmManager,不需要第三方模块:
示例代码:
主窗口中设置闹钟:
// 创建服务意图 var serviceIntent = Ti.Android.createServiceIntent({ url: 'alarmService.js' }); serviceIntent.putExtra('alarmContent', '该起床啦!'); // 创建PendingIntent var pendingIntent = Ti.Android.createPendingIntent({ intent: serviceIntent, type: Ti.Android.PENDING_INTENT_FOR_SERVICE, flags: Ti.Android.FLAG_UPDATE_CURRENT }); // 获取AlarmManager实例并设置闹钟 var alarmManager = Ti.Android.AlarmManager; // 设置10秒后触发(用ALARM_RTC_WAKEUP会唤醒设备) alarmManager.set(Ti.Android.ALARM_RTC_WAKEUP, Date.now() + 10000, pendingIntent);
创建alarmService.js文件(用于触发闹钟时执行):
// 创建启动主应用的意图 var launchIntent = Ti.Android.createIntent({ action: Ti.Android.ACTION_MAIN, className: 'com.mobioapp.bod.BodActivity', // 替换成你的应用主Activity类名 flags: Ti.Android.FLAG_ACTIVITY_NEW_TASK | Ti.Android.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED }); var launchPendingIntent = Ti.Android.createPendingIntent({ intent: launchIntent, type: Ti.Android.PENDING_INTENT_FOR_ACTIVITY }); // 创建通知 var notification = Ti.Android.createNotification({ contentTitle: '闹钟提醒', contentText: Ti.Android.currentService.intent.getStringExtra('alarmContent'), contentIntent: launchPendingIntent, icon: Ti.App.Android.R.drawable.appicon // 替换成你的应用图标资源 }); // 发送通知 Ti.Android.NotificationManager.notify(1, notification); // 停止服务 Ti.Android.currentService.stop();
内容的提问来源于stack exchange,提问作者Nuibb
相关产品推荐
相关产品推荐

