千家信息网

framwork新加模块有哪些

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要为大家展示了"framwork新加模块有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"framwork新加模块有哪些"这篇文章吧。主要是基
千家信息网最后更新 2026年11月03日framwork新加模块有哪些

这篇文章主要为大家展示了"framwork新加模块有哪些",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"framwork新加模块有哪些"这篇文章吧。

主要是基于Android系统现在的Framework模块上再添加一个独立的模块,目前只是很简单的framework层调用native层(后期根据学习的进度,会将hal层补上,还有aidl, stub, 异步)。基本思路为:

为应用添加framework接口,即SDK APIframework调用native代码,即jni部分jni部分实现最终功能 最终功能其实就是很简单的log打印,目的只要是重新温习一下framework开发的流程。之前都是在Android现有的机制上添加API,这次尝试添加一个独立的模块,只是个人的一个想法,不清楚Android添加一个新的独立模块的标准做法是怎样的,就当作学习吧。

  1. 为应用添加framework接口,即SDK API

    在framework/base目录新建pmps目录,在pmps目录创建\java\android\pmps\PmpsManager.java 文件,输入代码:

    package android.pmps;

    import android.util.Log;

    public class PmpsManager

    {

    private static final String LOG_TAG = "PmpsManager";

    static {

    System.loadLibrary("pmps_jni");

    }

    public PmpsManager() {

    Log.i(LOG_TAG, "PmpsManager constructor().");

    }


    public native static void sayHello();

    }

    PmpsManager 为应用层提供相关API,如 sayHello(),这里是直接调用了JNI的native方法。值得注意的是PmpsManager加载了中的System.loadLibrary("pmps_jni")加载了文章中第3步将会生成的libpmps_jni.so文件。

    还有一个需要注意的细节,我们可以先看一下framework/base目录下的Android.mk文件,其中有一段:

    # FRAMEWORKS_BASE_SUBDIRS comes from build/core/pathmap.mk

    LOCAL_SRC_FILES := $(call find-other-java-files,$(FRAMEWORKS_BASE_SUBDIRS))

    我们再看看build/core/pathmap.mk,其中有一段

    FRAMEWORKS_BASE_SUBDIRS := \

    $(addsuffix /java, \

    core \

    graphics \

    location \

    media \

    opengl \

    sax \

    telephony \

    wifi \

    *** \

    keystore \

    voip \

    )

    也就是说我们要在build/core/pathmap.mk文件中添加pmps目录,添加后为:

    FRAMEWORKS_BASE_SUBDIRS := \

    $(addsuffix /java, \

    core \

    graphics \

    location \

    media \

    opengl \

    sax \

    telephony \

    wifi \

    *** \

    keystore \

    voip \

    pmps \

    )

    然后我们就可以通过 mmm 命令编译这个新添加的模块了。

    mmm framework/base 编译,生成文件为out/target/product/generic/system/framework/framework.jar

    代码编译通过后,就可以做接下来的事情了。


    2.framework调用native代码,即jni部分

    上一步中的 publicnative static void sayHello() 就可以由应用层调用了,当然我们可以在framework里面再封装一下,以实现更加复杂的功能,例如:

    //api

    public int sayHelloFirst()

    {

    //省略的代码...

    return sayHello();

    }

    //declaration

    public native static void sayHello();


    3.jni部分实现功能


    这一步通过编写native代码实现framework中的调用的功能,可以实现具体的功能或者调用hal层的相关驱动,完成硬件操作功能。

    当前只是简单地打印一下信息。

    值得注意的要实现JNI_OnLoad函数,如果有需要的话,也可以重写JNI_OnUnLoad函数。

    /*//device/libs/android_runtime/android_media_MediaPlayer.cpp

    **

    ** Copyright 2007,The Android Open Source Project

    **

    ** Licensed under theApache License, Version 2.0 (the "License");

    ** you may not usethis file except in compliance with the License.

    ** You may obtain acopy of the License at

    **

    ** http://www.apache.org/licenses/LICENSE-2.0

    **

    ** Unless required byapplicable law or agreed to in writing, software

    ** distributed underthe License is distributed on an "AS IS" BASIS,

    ** WITHOUT WARRANTIESOR CONDITIONS OF ANY KIND, either express or implied.

    ** See the Licensefor the specific language governing permissions and

    ** limitations underthe License.

    */

    #define LOG_NDEBUG 0

    #define LOG_TAG"PmpsManager-JNI"

    #include"utils/Log.h"

    #include

    #include

    #include

    #include

    #include

    #include"jni.h"

    #include"JNIHelp.h"

    #include"android_runtime/AndroidRuntime.h"

    //----------------------------------------------------------------------------

    using namespaceandroid;

    static voidandroid_pmps_PmpsManager_sayHello(JNIEnv *env, jobject thiz)

    {

    LOGV("sayHello()");

    }

    static constJNINativeMethod method_table[] = {

    {"sayHello","()V", (void*)android_pmps_PmpsManager_sayHello},

    };

    // This function onlyregisters the native methods

    intregister_android_pmps_PmpsManager(JNIEnv *env) {

    inti;

    LOGI("JNI_OnLoad:register_android_pmps_PmpsPlayer");

    returnAndroidRuntime::registerNativeMethods(env,

    "android/pmps/PmpsManager",method_table, NELEM(method_table));

    }

    jintJNI_OnLoad(JavaVM* vm, void* reserved)

    {

    JNIEnv* env = NULL;

    jint result = -1;

    if (vm->GetEnv((void**) &env,JNI_VERSION_1_4) != JNI_OK) {

    LOGE("ERROR: GetEnvfailed\n");

    goto bail;

    }

    assert(env != NULL);

    if (register_android_pmps_PmpsManager(env)< 0) {

    LOGE("ERROR: PmpsManager nativeregistration failed\n");

    goto bail;

    }

    /* success -- return valid version number*/

    result = JNI_VERSION_1_4;

    bail:

    return result;

    }

以上是"framwork新加模块有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

模块 功能 代码 文件 目录 部分 学习 应用 内容 只是 篇文章 独立 编译 函数 应用层 接口 帮助 生成 复杂 清楚 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技名片 上海睿民互联网科技有限公司 互联网科技排名 银优互联网科技有限公司 西安互联网科技公司 深圳期待互联网科技 太原新华互联网科技学校怎么样 创业天下互联网科技有限公司 常德市电业局互联网科技部 重庆威客帮互联网科技 成都铂石互联网科技做什么的 昭通互联网科技选哪家 中国科技创新与世界互联网大会 东莞新华互联网科技学校 阿里互联网科技企业 工业互联网展湾科技股份有限公司 沐思想互联网科技有限公司 江苏互联网智能科技软件 半导体行业属于互联网高科技类吗 扫呗互联网科技有限公司 博彦科技互联网金融 互联网下的科技发展 互联网公司 科技公司 上海卓越科技 互联网 湖南诚度互联网科技有限公司 岳阳华臻互联网科技有限公司 锡山区互联网智能科技产品供应 互联网硬科技公司 北京天晋互联网科技有限公司 青岛互联网科技园
0