這是我在Android HAL & Framework: 軟硬整合實作訓練培訓課程使用的練習範例。
- Android 的 HAL 技術, #1: 簡介與發展現況
- Android 的 HAL 技術, #2: 採用Service架構方式
- Android 的 HAL 技術, #3: 小探Android Service與Native Service
- Android 的 HAL 技術, #4: Android Service 與 HAL Stub
- Android 的 HAL 技術, #5: 繼承 HAL 的 struct hw_module_t
- Android 的 HAL 技術, #7: 取得 Proxy Object
- Android 的 HAL 技術, #8: 實作 HAL Stub
- [如何從零開始實作一個 Android Native Service](#實作 Android Native Service)
- Native service 的 server 使用 BnInterface template
class BnLedService: public BnInterface<ILedService>
{
};
** 將 ILedService 擴充 (extend) 至 Android Framework
class ILedService: public IInterface
{
};
- 物件的實例化將會使用 singleton pattern
- 使用 virtual function (polymorphism)
class LedService: public BnLedService
{
private:
LedService();
virtual ~LedService();
};
- 定義 API
class ILedService: public IInterface
{
int setOn(int led);
int setOff(int led);
};
- 使用 virtual function
- 透過 instantiate() 取得 instance (singleton pattern)
class LedService: public BnLedService
{
public:
static void instantiate();
virtual int setOn(int led);
virtual int setOff(int led);
private:
LedService();
virtual ~LedService();
};
- 實作 instantiate() 與 singleton patter
- constructor 實作
- destructor 實作
LedService::LedService()
{
}
LedService::~LedService()
{
}
// Singleton
void LedService::instantiate() {
defaultServiceManager()->addService(
String16("led"), new LedService());
}
- 使用 DECLARE_META_INTERFACE 巨集
class ILedService: public IInterface
{
public:
DECLARE_META_INTERFACE(LedService);
int setOn(int led);
int setOff(int led);
};
- 使用 IMPLEMENT_META_INTERFACE 巨集
IMPLEMENT_META_INTERFACE(LedService, "mokoid.hardware.ILedService");
- 定義 binder proxy
- 實作 virtual function
class BpLedService: public BpInterface<ILedService>
{
public:
BpLedService(const sp<IBinder>& impl)
: BpInterface<ILedService>(impl)
{
}
virtual int setOn(int led)
{
return 0;
}
virtual int setOff(int led)
{
return 0;
}
};
- 實作 APIs
int LedService::setOn(int led)
{
return 0;
}
int LedService::setOff(int led)
{
return 0;
}
androidmk Android.mk > Android.bp