项目的总结:
来源:互联网 发布:网络流行语2014 编辑:程序博客网 时间:2024/06/03 15:56
五、实验中需要注意的问题
将下载后的源码放到你的android源码目录下,然后编译系统。本实验用的android版本为2.1。实验的过程中大致出现过以下几个问题:
1、目标系统中没有生成LedClient.apk或LedTest.apk应用程序
编译完成后,没有在目标系统的system/app/目录下找到LedClient.apk或LedTest应用程序。只有通过单独编译LedClient或LedTest才能在目标目录中生成。方法如下:
#mmm mokoid-read-only/apps/LedTest/
检查原因后发现mokoid-read-only/apps/LedTest/Android.mk
LOCAL_MODULES_TAGS :=user
而我们的s5pc100系统在配置时tapas时选择的是eng,所以没有装载到目标系统
所以修改LedTest和LedClient的Android.mk
LOCAL_MODULES_TAGS :=user eng
再次编译即可自动装载到目标系统/system/app/目录下。
2、启动后没有图标,找不到应用程序
目标系统启动后找不到两个应用程序的图标。仔细阅读logcat输出的信息发现:
E/PackageManager( 2717): Package com.mokoid.LedClient requires unavailable shared library com.mokoid.server; failing!
原因是找不到 com.mokoid.server。检查mokoid-read-only/frameworks/base/Android.mk发现系统将LedManager和LedService编译成 mokoid.jar库文件。为了让应用程序可以访问到这个库,需要通过com.mokoid.server.xml 来设定其对应关系。解决方法:拷贝com.mokoid.server.xml到目标系统的system/etc/permissions/目录下
此时两个应用的程序的图标都正常出现了。
3、提示找不到 JNI_OnLoad
按照以前的实验加入下列代码:
view plaincopy to clipboardprint?
static int registerMethods(JNIEnv* env) {
static const char* const kClassName ="com/mokoid/server/LedService";
jclass clazz;
/* look up the class */
clazz = env->FindClass(kClassName);
if (clazz == NULL) {
LOGE("Can't find class %s\n", kClassName);
return -1;
}
/* register all the methods */
if (env->RegisterNatives(clazz, gMethods,
sizeof(gMethods) / sizeof(gMethods[0])) != JNI_OK)
{
LOGE("Failed registering methods for %s\n", kClassName);
return -1;
}
/* fill out the rest of the ID cache */
return 0;
}
/*
* This is called by the VM when the shared library is first loaded.
*/
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
JNIEnv* env = NULL;
jint result = -1;
LOGI(
"JNI_OnLoad LED");
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
LOGE("ERROR: GetEnv failed\n");
goto fail;
}
assert(env != NULL);
if (registerMethods(env) != 0) {
LOGE("ERROR: PlatformLibrary native registration failed\n");
goto fail;
}
/* success -- return valid version number */
result = JNI_VERSION_1_4;
fail:
return result;
}
4、需要针对你的目标平台修改HAL的Makefile
修改mokoid-read-only/hardware/modules/led/Android.mk
LOCAL_MODULE := led.default
5、在eclipse中编译不了LedSystemServer.java
原因是程序中要用到ServiceManager.addService,这需要系统权限。
解决方法可以把应用程序放入Android源码中编译,并确保以下两点:
(1)在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。
(2)修改Android 加入LOCAL_CERTIFICATE := platform.
当然:mokoid工程源码中已经做了这些。
如果对以上的文章理解不是特别的清楚还可以从头再来哦
android 的从上到下的LED的控制程序(对于初学者或是有一定研究的人员 想了解android的系统机理值得一看)
- 别人的项目总结
- 五子棋项目的总结
- 项目开发的总结
- 项目管理的总结
- 项目的一些总结
- 论坛项目的总结
- 我的项目总结
- 项目开发的总结
- 项目的总结
- 项目的技术总结
- 项目的总结
- 自残的项目总结
- 项目的总结:
- 一周的项目总结
- 项目的软件总结
- 2012的项目总结
- 关于项目的总结
- 我的项目总结
- java 线程退出问题(interrupt()与中断标志)
- android的HAL第二种调用hal方法中的APP 测试程序(属于APP层)代码的实现:
- Something about virtual function and pure virtual function
- Wind-Up Knight:发条骑士冒险记
- Skin hierachy
- 项目的总结:
- [Java][JavaScript]字符串数组与字符串之间的互转(join/split)
- C#利用API,做像QQ,MSN 一样的右下角弹出窗体!
- C#之程序集
- 深入理解指针函数
- Ruby语言 (三)
- Web前端开发规范文档
- Chrome浏览器-我的桌面浏览器
- SPDIF