mstar android 平台添加native service 与其他Android 平台很不一样,按照常规方法添加之后,并且加入到项目代码目录下,单独mmm 该目录是没有问题的,按照项目编译却编译不到,下面说下我曾遇到的问题:
1. mst648 单独添加了一个native service,
defaultServiceManager()->addService(String16("TouchService"), comm);
单独mmm 出来所需文件so,bin 文件,分别放到系统/system/lib, system/bin下,再在init.mooney.rc添加下面启动service 的代码
再sm->getService(String16("TouchService")); 居然get不出来,无论你怎么chmod 777,都获取不到,同样的操作换到其他非mstar 平台则没问题,真是奇了怪了。
最后实在没法,只有把service插到原平台一个现成的tvos 的service里面。下面是添加步骤
1. 在supernova\projects\tvos 目录下,添加两个目录存放service,manager 代码,参照其他目录修改目录里的makefile 和mk 文件,后面编译之后会生成上面所说的两个依赖文件
2. 修改tvos根目录下的Makefile。 到这里为止,在project下buildall,只会生成libxxx和objxxx目录下的.a, .d文件,里面定义的so 文件并没有编译出来
3. 在device\mstar\common\libraries\tvapi\jni\ 目录添加jni文件,并修改Android.mk,
include $(CLEAR_VARS)
LOCAL_MODULE := libtouchmanager_jni
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := \
com_mstar_android_tvapi_common_TouchPortManager.cpp
LOCAL_C_INCLUDES := \
$(JNI_H_INCLUDE) \
frameworks/base/core/jni \
$(TARGET_TVAPI_LIBS_DIR)/include/SerialTouch \
$(TARGET_TVAPI_LIBS_DIR)/SerialTouch
LOCAL_SHARED_LIBRARIES := \
libandroid_runtime \
libnativehelper \
libcutils \
libutils \
libbinder \
libtouchmanager
LOCAL_REQUIRED_MODULES := libtouchmanager
LOCAL_CFLAGS += $(local_tvjni_cflags)
include $(BUILD_SHARED_LIBRARY)
其中
另外还有修改com.mstar.android.mk 把编译jni 的so 添加进去才能编译得出来xxx_jni.so,在编译JNI 的mk把本来第1步代码编译生成的so,只有在这里添加到依赖文件去,才能编译出libtouchmanager.so。这实际生成的文件,所依赖文件九曲十八弯,实在感觉乱
4. 在main.cpp: AndroidServiceInitThread函数里 调用TouchService::instantiate(); 来添加service,这样才能getservice 成功
TouchService::instantiate(); 所依赖的两个so, makefile 修改如下:
这样service就添加成功了,再Getservice 也OK 了
部分关键代码参考下面链接