做网站还是做游戏有本地服务器怎么做网站

张小明 2026/1/9 9:14:59
做网站还是做游戏,有本地服务器怎么做网站,自己做外贸 建一个网站,企业宣传海报设计制作目录一、添加 aidl 文件二、服务端实现三、JNI 层实现四、客户端实现五、服务端和客户端的注册5.1 注册服务端5.2 注册客户端5.3 更新api文件六、Selinux 配置添加硬件访问服务 一、添加 aidl 文件 添加 aidl 文件 frameworks/base/core/java/android/os/IHelloService.aidl…目录一、添加 aidl 文件二、服务端实现三、JNI 层实现四、客户端实现五、服务端和客户端的注册5.1 注册服务端5.2 注册客户端5.3 更新api文件六、Selinux 配置添加硬件访问服务一、添加 aidl 文件添加 aidl 文件frameworks/base/core/java/android/os/IHelloService.aidl:packageandroid.os;/** * hide */interfaceIHelloService{voidopen();voidwrite(Stringstr);Stringread();}二、服务端实现添加frameworks/base/services/core/java/com/android/server/HelloService.java文件packagecom.android.server;importandroid.os.IHelloService;// 硬件服务的服务端实现publicclassHelloServiceextendsIHelloService.Stub{publicnativevoidnatvieOpen();publicnativevoidnatvieWrite(Stringstr);publicnativeStringnativeRead();publicvoidopen()throwsandroid.os.RemoteException{natvieOpen();}publicvoidwrite(Stringstr)throwsandroid.os.RemoteException{natvieWrite(str);}publicStringread()throwsandroid.os.RemoteException{returnnativeRead();}}三、JNI 层实现添加frameworks/base/services/core/jni/com_android_server_HelloService.cppJNI 实现#defineLOG_TAGHelloService#includejni.h#includenativehelper/JNIHelp.h#includeandroid_runtime/AndroidRuntime.h#includeutils/misc.h#includeutils/Log.h#includehardware/hello_hal.h#includestdio.h#includestringnamespace android{statichw_module_t*gHelloModuleNULL;statichello_hal_device_t*gHelloHalDeviceNULL;staticvoidhelloOpen(JNIEnv env,jobject clazz){ALOGD(Hello_test_jni_open);if(gHelloModule!NULL){return;}interrhw_get_module(HELLO_HAL_HARDWARE_MODULE_ID,(hw_module_tconst**)gHelloModule);if(err){ALOGE(Couldnt load %s module (%s),HELLO_HAL_HARDWARE_MODULE_ID,strerror(-err));}else{if(gHelloModule){ALOGD(Hello_test_jni_open get module sucess);hello_hal_methods_open(gHelloModule,gHelloHalDevice);}}if(gHelloHalDevice){gHelloHalDevice-hello_hal_open(gHelloHalDevice);}}staticvoidhelloWrite(JNIEnv*env,jobject clazz,jstring str){if(gHelloHalDevice){ALOGD(Hello_test_jni_write);constchar*c_strNULL;jboolean isCopy;c_strenv-GetStringUTFChars(str,isCopy);//从jstring指针中获取数据ALOGD(Hello_test_jni_write %s,c_str);gHelloHalDevice-hello_hal_write(gHelloHalDevice,c_str);}else{ALOGW(Tried to hello but there is no hello device.);}}staticjstringhelloRead(JNIEnv*env,jobject clazz){if(gHelloHalDevice){ALOGD(Hello_test_jni_read);char*data(char*)malloc(1024);if(dataNULL){ALOGE(helloRead: malloc data failed);returnenv-NewStringUTF(malloc fail);}memset(data,0,1024);intretgHelloHalDevice-hello_hal_read(gHelloHalDevice,data);ALOGD(Hello_test_jni_read result is %s, ret%d,data,ret);if(ret0data[0]!\0){size_tstr_lenstrnlen(data,ret);if(str_len(size_t)ret){if(ret1023){// 留空间data[ret]\0;str_lenret;}else{data[1023]\0;// 截断str_len1023;}}jbyteArray arrayenv-NewByteArray(str_len);env-SetByteArrayRegion(array,0,str_len,(constjbyte*)data);jstring strEncodeenv-NewStringUTF(UTF-8);jclass clsenv-FindClass(java/lang/String);jmethodID ctorenv-GetMethodID(cls,init,([BLjava/lang/String;)V);jstring retStr(jstring)env-NewObject(cls,ctor,array,strEncode);// 释放free(data);env-DeleteLocalRef(array);env-DeleteLocalRef(strEncode);env-DeleteLocalRef(cls);returnretStr;}else{free(data);returnenv-NewStringUTF(no msg);}}returnenv-NewStringUTF(no msg);}// public native void natvieOpen();// public native void natvieWrite(String str);// public native String nativeRead();staticconstJNINativeMethod method_table[]{{natvieOpen,()V,(void*)helloOpen},{natvieWrite,(Ljava/lang/String;)V,(void*)helloWrite},{nativeRead,()Ljava/lang/String;,(void*)helloRead}};intregister_android_server_HelloService(JNIEnv*env){ALOGD(Hello_test_jni_register);returnjniRegisterNativeMethods(env,com/android/server/HelloService,method_table,NELEM(method_table));}};在frameworks/base/services/core/jni/Android.bp中添加xuejievt-PowerEdge-R740:~/A11a133a12$ git diff frameworks/base/services/core/jni/Android.bp diff--git a/frameworks/base/services/core/jni/Android.bp b/frameworks/base/services/core/jni/Android.bp index b01b2fa5c2..6884e332e4100644---a/frameworks/base/services/core/jni/Android.bpb/frameworks/base/services/core/jni/Android.bp -72,672,7 cc_library_static{com_android_server_am_LowMemDetector.cpp,com_android_server_pm_PackageManagerShellCommandDataLoader.cpp,com_android_server_sensor_SensorService.cpp,com_android_server_HelloService.cpp,onload.cpp,:lib_cachedAppOptimizer_native,:lib_networkStatsFactory_native,在frameworks/base/services/core/jni/onload.cpp中添加xuejievt-PowerEdge-R740:~/A11a133a12$ git diff frameworks/base/services/core/jni/onload.cpp diff--git a/frameworks/base/services/core/jni/onload.cpp b/frameworks/base/services/core/jni/onload.cpp index b50472d7b9..7ce091a509100644---a/frameworks/base/services/core/jni/onload.cppb/frameworks/base/services/core/jni/onload.cpp -64,664,7intregister_android_server_FaceService(JNIEnv*env);intregister_android_server_GpuService(JNIEnv*env);intregister_android_server_stats_pull_StatsPullAtomService(JNIEnv*env);intregister_android_server_sensor_SensorService(JavaVM*vm,JNIEnv*env);intregister_android_server_HelloService(JNIEnv*env);};using namespace android;// 在这里注册 JNI 函数// java 层的 native 方法就能调用到对应的 native 层函数了-121,5122,6externCjintJNI_OnLoad(JavaVM*vm,void*/* reserved */)register_android_server_GpuService(env);register_android_server_stats_pull_StatsPullAtomService(env);register_android_server_sensor_SensorService(vm,env);register_android_server_HelloService(env);returnJNI_VERSION_1_4;}四、客户端实现添加一个接口frameworks/base/core/java/android/os/Hello.javapackageandroid.os;importandroid.annotation.Nullable;// 导入空指针注解importandroid.annotation.NonNull;importandroid.annotation.SuppressLint;// 导入Lint抑制注解SuppressLint(RethrowRemoteException)publicabstractclassHello{publicHello(){}publicabstractintopen();publicabstractintwrite(NonNullStringst);NullablepublicabstractStringread();}实现接口frameworks/base/core/java/android/os/HelloManager.javapackageandroid.os;importandroid.annotation.NonNull;// 导入非空注解importandroid.annotation.Nullable;// 导入可空注解importandroid.annotation.SuppressLint;// 导入Lint抑制注解importandroid.content.Context;importandroid.os.ServiceManager;// 补全ServiceManager导入原代码漏了importandroid.os.RemoteException;// 导入RemoteException用于捕获importandroid.os.ServiceSpecificException;// 新增系统推荐的RuntimeException子类importandroid.util.Log;/** * Vibrator implementation that controls the main system vibrator. * * hide */// 抑制RethrowRemoteException核心解决异常声明问题SuppressLint(RethrowRemoteException)publicclassHelloManagerextendsHello{privatestaticfinalStringTAGHelloManager;privatefinalIHelloServicemService;// 获取Hello服务的代理端publicHelloManager(){mServiceIHelloService.Stub.asInterface(ServiceManager.getService(HelloService));}Overridepublicintopen(){if(mService!null){try{mService.open();return0;// 调用成功返回0}catch(RemoteExceptione){Log.e(TAG,open failed: ,e);thrownewServiceSpecificException(1001,open remote service failed: e.getMessage());}}Log.w(TAG,mService is null, open failed);return-1;// 服务为空返回-1}Overridepublicintwrite(NonNullStringstr){if(strnull){Log.e(TAG,write str is null);thrownewIllegalArgumentException(str must not be null);}if(mService!null){try{mService.write(str);return0;// 调用成功返回0}catch(RemoteExceptione){Log.e(TAG,write failed: ,e);thrownewServiceSpecificException(1002,write remote service failed: e.getMessage());}}Log.w(TAG,mService is null, write failed);return-1;// 服务为空返回-1}NullableOverridepublicStringread(){if(mService!null){try{returnmService.read();// 调用成功返回读取结果}catch(RemoteExceptione){Log.e(TAG,read failed: ,e);thrownewServiceSpecificException(1003,read remote service failed: e.getMessage());}}Log.w(TAG,mService is null, read return null);returnnull;// 服务为空返回null}}五、服务端和客户端的注册最最最重要的莫过于这里服务端和客户端的注册了在frameworks/base/core/java/android/content/Context.java中添加xuejievt-PowerEdge-R740:~/A11a133a12$ git diff frameworks/base/core/java/android/content/Context.java diff--git a/frameworks/base/core/java/android/content/Context.java b/frameworks/base/core/java/android/content/Context.java index3dc3d78153..4d0c92299c100644---a/frameworks/base/core/java/android/content/Context.javab/frameworks/base/core/java/android/content/Context.java -3600,63600,7publicabstractclassContext{/** hide */StringDef(suffix{_SERVICE},value{HELLO_SERVICE,POWER_SERVICE,//hide: POWER_STATS_SERVICE,WINDOW_SERVICE,-3961,63962,8publicabstractclassContext{*/publicstaticfinalStringPOWER_SERVICEpower;publicstaticfinalStringHELLO_SERVICEhello;/** * Use with {link #getSystemService(String)} to retrieve a * {link android.os.PowerStatsService} for accessing power stats5.1 注册服务端修改frameworks/base/services/java/com/android/server/SystemServer.java:xuejievt-PowerEdge-R740:~/A11a133a12$ git diff frameworks/base/services/java/com/android/server/SystemServer.java diff--git a/frameworks/base/services/java/com/android/server/SystemServer.java b/frameworks/base/services/java/com/android/server/SystemServer.java index16c9475658..ce7e147950100644---a/frameworks/base/services/java/com/android/server/SystemServer.javab/frameworks/base/services/java/com/android/server/SystemServer.java -1457,61457,11publicfinalclassSystemServerimplementsDumpable{mSystemServiceManager.startService(KeyChainSystemService.class);t.traceEnd();t.traceBegin(StartHelloService);ServiceManager.addService(HelloService,newHelloService());t.traceEnd();t.traceBegin(StartSchedulingPolicyService);ServiceManager.addService(scheduling_policy,newSchedulingPolicyService());t.traceEnd();5.2 注册客户端xuejievt-PowerEdge-R740:~/A11a133a12$ git diff frameworks/base/core/java/android/app/SystemServiceRegistry.java diff--git a/frameworks/base/core/java/android/app/SystemServiceRegistry.java b/frameworks/base/core/java/android/app/SystemServiceRegistry.java index32ea41b2c7..4603e03935100644---a/frameworks/base/core/java/android/app/SystemServiceRegistry.javab/frameworks/base/core/java/android/app/SystemServiceRegistry.java -184,6184,8importandroid.os.image.IDynamicSystemService;importandroid.os.incremental.IIncrementalService;importandroid.os.incremental.IncrementalManager;importandroid.os.storage.StorageManager;importandroid.os.Hello;importandroid.os.HelloManager;importandroid.permission.LegacyPermissionManager;importandroid.permission.PermissionCheckerManager;importandroid.permission.PermissionControllerManager;-290,6292,13publicfinalclassSystemServiceRegistry{returnnewAccountManager(ctx,service);}});registerService(Context.HELLO_SERVICE,Hello.class,newCachedServiceFetcherHello(){OverridepublicHellocreateService(ContextImplctx){returnnewHelloManager();}});registerService(Context.ACTIVITY_SERVICE,ActivityManager.class,newCachedServiceFetcherActivityManager(){Override5.3 更新api文件xuejievt-PowerEdge-R740:~/A11a133a12$ git diff frameworks/base/core/api/current.txt diff--git a/frameworks/base/core/api/current.txt b/frameworks/base/core/api/current.txt index624ded0577..df3a5edaa6100644---a/frameworks/base/core/api/current.txtb/frameworks/base/core/api/current.txt -10644,610644,7 package android.content{field publicstaticfinal String FINGERPRINT_SERVICEfingerprint;field publicstaticfinal String GAME_SERVICEgame;field publicstaticfinal String HARDWARE_PROPERTIES_SERVICEhardware_properties;field publicstaticfinal String HELLO_SERVICEhello;field publicstaticfinal String INPUT_METHOD_SERVICEinput_method;field publicstaticfinal String INPUT_SERVICEinput;field publicstaticfinal String IPSEC_SERVICEipsec;-31288,631289,13 package android.os{field publicstaticfinalfloatUNDEFINED_TEMPERATURE-3.4028235E38f;}public abstract class Hello{ctor publicHello();method public abstractintopen();method Nullable public abstract Stringread();method public abstractintwrite(NonNull String);}public interface IBinder{六、Selinux 配置修改system/sepolicy/service.tetype HelloServiceType,app_api_service,system_server_service,service_manager_type;修改system/sepolicy/service_contextsHelloService u:object_r:HelloServiceType:s0修改system/sepolicy/platform_app.te让系统 App 可以访问我们自定义的 Binder 服务allow platform_app HelloServiceType:service_manager find;修改system/sepolicy/untrusted_app.te让普通 App 可以访问我们自定义的 Binder 服务allow untrusted_app HelloServiceType:service_manager find;最后让 SystemServer 可以访问到 hello 驱动修改system/sepolicy/system_server.teallow system_serverhello_dev_t:chr_file{open read write};
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站的连接二维码怎么做视频网站如何建设

性能压测是保障软件系统稳定性和高可用性的重要手段,而接口作为系统内外交互的核心通道,其性能表现尤为关键。接口性能压测场景设计的质量,直接影响测试的有效性、瓶颈定位的精度,以及系统上线后的业务承载能力。本文结合行业通用…

张小明 2026/1/9 4:28:02 网站建设

惠州企业网站seo公司外贸网站sns

Excalidraw AI平台支持OAuth2授权,安全登录 在远程协作日益成为常态的今天,团队对可视化工具的安全性与易用性提出了更高要求。Excalidraw 作为一款以手绘风格著称的开源白板工具,近年来通过集成 AI 能力实现了从“画图”到“智能生成”的跃迁…

张小明 2026/1/9 1:00:06 网站建设

中国室内设计网站官网太原规划网站

YOLOv8推理时如何处理极端光照条件? 在城市夜晚的监控画面中,一辆轿车驶入隧道入口,强烈的逆光让车身几乎完全隐没在阴影里;与此同时,远处一名行人正从暗区走出,轮廓模糊、细节全无。这样的场景对传统目标…

张小明 2026/1/9 4:49:50 网站建设

建网站空间都有什么平台wordpress geek theme

还在为复杂的三维建模流程而头疼?Meshroom这款革命性的开源3D重建工具,用AI技术重新定义了从照片到三维模型的转化过程。无论您是设计师、研究人员还是技术爱好者,都能通过这个免费解决方案实现专业级的建模效果,彻底摆脱昂贵设备…

张小明 2026/1/7 20:52:56 网站建设

网站备案后有什么好处最新备案网站查询

数字取证工具深度评测:如何构建高效取证分析工具箱 【免费下载链接】altair ✨⚡️ A beautiful feature-rich GraphQL Client for all platforms. 项目地址: https://gitcode.com/gh_mirrors/alta/altair 在数字取证调查领域,选择合适的取证分析…

张小明 2026/1/9 4:50:26 网站建设

东营网站建设推广哪家好网站和网页的区别

测试工具的价值与行业挑战‌ 在软件质量保障体系中,测试工具不仅是效率提升的催化剂,更是团队技术成熟度的缩影。截至2025年,全球测试工具市场年复合增长率达14.3%,但工具泛滥与选型盲从仍是从业者的核心痛点。本文旨在通过系统性…

张小明 2026/1/7 20:52:55 网站建设