项目的总结:

来源:互联网 发布:网络流行语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的系统机理值得一看)

 

原创粉丝点击