android动态链接库,Android系统调用第三方动态链接库

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

通常第三方支持为了保护自己的核心代码,会将其编译成so,通过动态链接库调用其功能,下面展示下Android系统服务调用第三方动态链接库的方法:

首先在ActivityManagerService.java中增加一个 native方法:

static native void setXXFgApp(String appName);

接着我们可以在com_android_server_lights_LightsService.cpp 增加该native方法的实现:

代码位置:frameworksbaseservicescorejnicom_android_server_lights_LightsService.cpp

..........

#include "XXSystemServerApi.h"

..........

{

..........

static const JNINativeMethod XX_method_table_am[] = {

{ "setXXFgApp", "(Ljava/lang/String;)V", (void*)setXXFgApp }

};

int register_android_server_XXFgApp(JNIEnv *env)

{

int XX_result = jniRegisterNativeMethods(env, "com/android/server/am/ActivityManagerService", XX_method_table_am, NELEM(XX_method_table_am));

return XX_result;

}

static void setXXFgApp(JNIEnv* env, jobject /* clazz */,jstring fgApp){

const char * XX_fgAppChar ;

XX_fgAppChar = env->GetStringUTFChars( fgApp,NULL ) ;

if( XX_fgAppChar != NULL) {

//ALOGI("XX hook setXXFgApp %s ",XX_fgAppChar);

onSetXXFgApp((char*)XX_fgAppChar);

}

env->ReleaseStringUTFChars(fgApp, XX_fgAppChar);

void XXSystemServerApi::onSetXXFgApp(char* appName)

{

if (pfn_setFGApp != NULL)

{

//调用XXSystemServerApi.h中的方法来实现,具体实现在下文XXSystemServerApi.cpp中

pfn_setFGApp(appName);

}

}

..........

}

接着我们需要将register_android_server_XXFgApp方法添加到onload.cpp,从而新增的方法能够编译并加载到系统中

代码位置:frameworksbaseservicescorejnionload.cpp:

namespace android {

.....

int register_android_server_XXFgApp(JNIEnv* env);

.....

}

extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)

{

..........

register_android_server_XXFgApp(env);

..........

}

frameworksbaseservicescorejniXXSystemServerApi.cpp 的构造函数中:

XXSystemServerApi(){

..........

//加载动态链接库,具体的核心实现源码在该xxxx.so中,实现核心代码的保密

m_hXXLib = dlopen("XXXXXXX.so", RTLD_NOW | RTLD_LOCAL);

if (NULL == m_hXXLib)

{

ALOGE("XXXXXXX not loaded");

return;

}

//从动态链接库中加载对应的实现方法并赋值给pfn_setFGApp,完成pfn_setFGApp的初始化

pfn_setFGApp = (PFN_setFgApp)(dlsym(m_hXXLib, "onSetXXFgApp"));

..........

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值