对于framework的目录结构分析以及简单的添加一个java层服务

1.framework/base/packages/  这个目录下面定义了相关的apk 比如SystemUI SettingPrivoder BackupRestoreConfirmation等相关的apk

2.framework/base/ Services    定义了相关系统服务

3.framwork/webview 主要是浏览器相关的数据定义

4.framework/base/ policy    主要是锁屏相关的定义

5.framework/base/telephony 通话相关的数据

6.framework/base/core/java 基本上是控件,系统服务aidl文件


1.增加 aidl 文件
在目录/frameworks/base/core/java/android/app 下增加中 IDvbService.aidl.
package android.app;
interface IDvbService {
Oliver.ning 收集
int countTest(in int testvalue);
}
2.在目录 frameworks/base/services/java/com/android/server 中增加 DvbManagerService
实现 IDvbService.aidl 类
package com.android.server;
import android.content.Context;
import android.util.Slog;
import android.app.IDvbService;
class DvbManagerService extends IDvbService.Stub {
private static final String TAG = "DvbManagerService";
private static final boolean localLOGV = false;
private final Context mContext;
public DvbManagerService(Context context) {
super();
mContext = context;
Slog.w(TAG, "DvbManagerService");
}
public int countTest(int value){
return value*2;
}
}
3.在文件 frameworks /base /services /java /com /android /server /SystemServer.java 类
中 run()方法中增加
Slog.i(TAG, "Alarm DvbManagerService");
DvbManagerService dvb = new DvbManagerService(context);//dvb
Slog.i(TAG, "Alarm DvbManagerService dvb ="+dvb);
ServiceManager.addService(Context.DVB_SERVICE, dvb);


4.在文件/frameworks/base/core/java/android/content/Context.java 中增加
public static final String DVB_SERVICE = "dvb";//dvb

5.在文件/frameworks/base/core/java/android/app 中增加 DvbManager.java


package android.app;
import android.content.Context;
import android.content.Intent;
import android.os.RemoteException;
import android.os.ServiceManager;
public class DvbManager{
//dvb
private final IDvbService mService;
/**
* package private on purpose
*/
DvbManager(IDvbService service) {
mService = service;
}
public int count(int value) {
try {
return mService.countTest(value);
} catch (RemoteException ex) {
}
return -1;
}
}
6.在文件/frameworks/base/core/java/android/app/ContextImpl.java 中
新增加属性
private static DvbManager sDvbManager;//dvb
在 getSystemService(String name)方中增加
else if (DVB_SERVICE.equals(name)) {//dvb
return getDvbManager();
}
另外增加方法
private DvbManager getDvbManager() {//dvb
Log.e(TAG, "getDvbManager sSync = "+sSync);
Log.e(TAG, "getDvbManager sDvbManager = "+sDvbManager);
Oliver.ning 收集
synchronized (sSync) {
if (sDvbManager == null) {
IBinder b = ServiceManager.getService(DVB_SERVICE);
Log.e(TAG, "getDvbManager IBinder = "+b);
IDvbService service = IDvbService.Stub.asInterface(b);
Log.e(TAG, "getDvbManager IDvbService = "+service);
sDvbManager = new DvbManager(service);
}
}
return sDvbManager;
}
7.在/frameworks/base/Android.mk 中
LOCAL_SRC_FILES += \
下增加
core/java/android/app/IDvbService.aidl \
8.在应用调用如下:
导入 import android.app.DvbManager;
用法
DvbManager dvb=(DvbManager)getSystemService(DVB_SERVICE);
int count = dvb.count(9);
Toast.makeText(
TVMainActivity.this,"dvb.count(9) back = "+count,
Toast.LENGTH_SHORT).show();
9.编译如下:
(1)首先编译 frameworks
. build/envsetup.sh
choosecombo
make -j4 framework
编译后会生成 framework.jar
(2)然后编译 frameworks/base/services/java 的 service
make -j4 frameworks/base/services/java
编译后会生成 services.jar
(3)编译应用
因为服务是自定义的,所有必须在自定义的 sdk 中编译才能使用。


你可能感兴趣的:(对于framework的目录结构分析以及简单的添加一个java层服务)