如何向android的framework里添加

本文详细介绍了如何在Android的framework里添加新类,包括使用javadoc注释和makeupdate-api命令来解决冲突问题。同时,提供了在frameworks层添加资源的方法,如图片、字符串、布局、样式、颜色资源等的步骤。最后,指导如何在Eclipse环境中修改源码并编译应用自升级jar包。

如何向android的framework里添加新类

google对于所有的类和API,分为开放式和不开放式两种。所谓的开放式就是值javadoc所包含的,并不是java中有public和private,而是跟javadoc有关系,代码  没有关系。

在开放式的类中增加了一个变量,而又没隐藏,导致和原API的doc不一致造成的就会有错。

通过提示,有2个方法可以解决  该问题:

1、将新增加的变量或方法加上"@hide" 的注释,注意一点,加"@hide" 不是简简单单的/*@hide */就行了,标准的javadoc要这样 /**  */ 而且对于 format 变量 应该加上 {  },也就是/**{@hide}*/

2、如果想在生成的doc中增加该变量或方法的话,必须输入:

make update-api

这样的话,系统  自动  将新增加的API添加到current.xml中了。

 

所以如果要加方法就是按上面的方法加。

 

 

如 果需要加进新的类 这时候又分2种  一种是原有的包下面加类 这个最简单 加完之后直接make update-api就好了 

还有一种是加在framework/base下面 这个时候你make update-api是不会在current.xml(frameworks\base\api\)里生成你的类的。 

看了Android.mk才知道(frameworks\base\Android.mk ?) 原来需要修改android源码根目录下的build/core/pathmap.mk把你的目录加进去。然后就好了。





android源码framework下添加新资源的方法


编译带有资源的jar包,需要更改frameworks层,方法如下:

  

一.增加png类型的图片资源  

1.将appupdate模块所有用到的png格式图片拷贝到framework/base/core/res/res/drawable-mdpi里。但是要确保没有与原生的没有重名文件。  

2.在framework/base/core/res/res/values/public.xml文件里增加对这些图片的声明。(例: ,此id要保证唯一,以drawable类型的最后一个id为基数增加)  

3.framework/base/core/res/res/ 下mm编译  

4. \Honeycomb下 make update-api 

 

二.增加string资源  

1.将appupdate模块定义的string.xml里面的所以string拷贝到framework/base/core/res/res/values/string.xml里。但是确保没有重名的。  

2.在framework/base/core/res/res/values/public.xml文件里增加对这些string的声明。(例:此id要保证唯一,以string类型的最后一个id为基数增加)  

3.framework/base/core/res/res/ 下mm编译  

4. \Honeycomb下 make update-api

  

三.增加layout资源  

1.将appupdate模块的layout文件里定义的5个xml文件拷贝到在framework/base/core/res/res/layout里。但是要确保没有重名文件被覆盖。  

2.在framework/base/core/res/res/values/public.xml文件里增加对这些layout的声明。(例:此id要保证唯一,以layout类型的最后一个id为基数增加)  

3.framework/base/core/res/res/ 下mm编译  

4. \Honeycomb下 make update-api  

说明:若layout中包含xml,直接把xml拷贝到framework相应目录下。

例如(1)button的selector。将appupdate模块的drawable/common_btn_selector.xml文件拷贝到framework/base/core/res/res/drawable里,确保没有重名文件。  (2)将appupdate模块的anim/loading.xml文件拷贝到framework/base/core/res/res/anim里,确保没有重名文件。

  

四.增加style资源  

1.将appupdate模块的style文件里定义的所有style拷贝到framework/base/core/res/res/values/style.xml里。确保没有覆盖原生的style.  

2.在framework/base/core/res/res/values/public.xml文件里增加对这些style的声明。  3.framework/base/core/res/res/ 下mm编译  

4. \Honeycomb下 make update-api 

 

五.增加color资源  

1.将appupdate模块的style文件里定义的所有style拷贝到framework/base/core/res/res/values/color.xml里。确保没有覆盖原生的color.  

2.在framework/base/core/res/res/values/public.xml文件里增加对这些color的声明。  3.framework/base/core/res/res/ 下mm编译  

4. \Honeycomb下 make update-api  


六.增加资源id  

1.在framework/base/core/res/res/values/ids.xml里定义你jar中所用的id(R.id)*)。确保没有覆盖原生的.  

2.在framework/base/core/res/res/values/public.xml文件里增加对这些id的声明。  3.framework/base/core/res/res/ 下mm编译  

4. \Honeycomb下 make update-api  

最后,eclipse源码中要修改以下:  

1. 把R.*.*全部替换成android.R.*.*例如R.layout.appupg_tip_dialog 要更换为android.R.layout.appupg_tip_dialog  

2. 资源文件中对资源的调用需要添加android:如<textview p="" <="" 要改成  

3. Import *.*.*.R删除。  linux下jar包路径  Honeycomb\out\target\common\obj\JAVA_LIBRARIES\hisenseAppUpgrade_sdk_intermediates  

另,要想在eclipse环境下编译修改后的应用自升级jar。  

1, 从编译的源码中拷贝framework.jar及framework-res.apk两个文件,解压缩后。从framework.jar中拷贝出android文件夹,从framework-res.apk拷贝出res文件夹,然后添加到android.jar包中。替换自升级工程的android.jar。然后把res文件夹下出现X的文件删除即可。  应用自升级修改方法  资源修改要通过frameworks层,修改后要在源码中编译。


Android Framework添加公开API供应用程序调用是一个涉及多个步骤的过程,通常包括在Java层定义接口、注册JNI方法(如果涉及底层交互)、构建系统配置调整以及确保上层应用能够正确调用这些API。以下是实现这一目标的详细流程: ### 添加Java层API接口 首先,在Framework的Java代码中定义一个新的类或接口,或者在已有类中添加新的方法。例如,可以在`frameworks/base/core/java/android/app/`目录下创建新的类或修改已有类: ```java package android.app; public class CustomApi { public static int performCustomOperation(int param) { // 实现逻辑 return param * 2; } } ``` 该类可以包含静态方法或实例方法,具体取决于设计需求。 ### 在JNI层实现功能(可选) 如果新增的API需要与底层系统交互,则需要在C/C++中实现JNI方法。例如,在`frameworks/base/core/jni/`目录下创建或修改对应的JNI实现文件: ```cpp #include <jni.h> #include <android_runtime/AndroidRuntime.h> extern "C" JNIEXPORT jint JNICALL Java_android_app_CustomApi_nativePerformCustomOperation(JNIEnv* env, jclass clazz, jint param) { return param * 2; } ``` 同时,需要在`AndroidRuntime.cpp`中注册该JNI方法,确保Java层能够正确调用: ```cpp static const JNINativeMethod gCustomApiMethods[] = { { "nativePerformCustomOperation", "(I)I", (void*) Java_android_app_CustomApi_nativePerformCustomOperation }, }; int register_android_app_CustomApi(JNIEnv* env) { return jniRegisterNativeMethods(env, "android/app/CustomApi", gCustomApiMethods, NELEM(gCustomApiMethods)); } ``` ### 修改构建配置 为了使新增的类或方法能够被正确编译和打包,需要更新`Android.bp`文件以包含新的Java类或JNI模块: ```starlark java_library { name: "framework-custom-api", srcs: ["CustomApi.java"], platform_apis: true, static_libs: ["framework"], sdk_version: "current", } ``` 对于JNI部分,也需要在`Android.mk`或`Android.bp`中添加对应的模块声明。 ### 使API对上层应用可见 新增的API默认可能不会被导出到`android.jar`中,因此需要修改`frameworks/base/api/current.txt`文件,将新增的类或方法添加进去: ``` added class android.app.CustomApi added method public static int performCustomOperation(int) ``` 这样,构建系统在生成`android.jar`时会包含这些API,供上层应用引用。 ### 应用程序调用新增API 应用程序可以直接通过标准的Java调用方式访问这些公开API: ```java int result = CustomApi.performCustomOperation(5); Log.d("CustomApi", "Result: " + result); ``` 如果新增的API被标记为`@hide`,则上层应用无法直接调用,此时可以使用反射机制: ```java try { Class<?> clazz = Class.forName("android.app.CustomApi"); Method method = clazz.getMethod("performCustomOperation", int.class); int result = (int) method.invoke(null, 5); Log.d("CustomApi", "Result: " + result); } catch (Exception e) { e.printStackTrace(); } ``` ### 注意事项 - **兼容性**:新增API需考虑版本兼容性,避免破坏现有应用。 - **安全性**:确保API不会暴露敏感功能或导致系统不稳定。 - **文档**:提供清晰的API文档,便于开发者理解和使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值