编译Android系统源码,在framework/ex目录下新建了一个目录单独编译一个模块,里面还有AIDL接口声明,并且声明中用到了
自定义的JAVA类,写入import代码后编译报错couldn't find import for class
然后开始上网找资料,网上找到了两个方案,但都不行,记录一下:
一、自定义的JAVA类没有声明对应的aidl文件,比如定义了一个Test.java类文件,需在同目录下新建一个Test.aidl文件,并且文件中
需要填写如下格式代码:
package com.xxxx.xxxx;
parcelable Test;
这种是最常见的错误,也是最常见的解决办法,但可惜的是我都已经定义了,没用
二、在framework/base/Android.mk中LOCAL_AIDL_INCLUDES += $(FRAMEWORKS_BASE_JAVA_SRC_DIRS)前面添加
LOCAL_AIDL_INCLUDES += $(刚编写的AIDL声明文件的目录)
我同样实验过了也无效,因为我的目录不在base目录下,这种方案就行不通。
还有说修改build/core目录下base_rules.mk, pathmap.mk文件的,修改后也无法解决问题。
到这卡壳了,我就考虑是不是我的Android.mk文件是不是需要修改修改呢?
在我的项目目录下的Android.mk文件中添加LOCAL_AIDL_INCLUDES += $(刚编写的AIDL声明文件的目录)
结果还是无用,在Stackoverflow上看到相关问题,有写LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, java)
或者是LOCAL_SRC_FILES += $(call all-Iaidl-files-under, java)都无用,抱着试试的心里直接将AIDL文件追加到
LOCAL_SRC_FILES,结果报错说声明的AIDL文件不能添加到makefile文件中,好吧,问题到底出在哪里呢?
也许是撞大运吧,LOCAL_AIDL_INCLUDES += $(刚编写的AIDL声明文件的目录)这个目录我给该了下,
之前追加的目录都是具体到AIDL文件的目录中,$(LOCAL_PATH)/java/com/xxxx/xxxx目录,现在我直接改为了
LOCAL_SRC_FILES += $(LOCAL_PATH)/java/,然后编译~!对了,没错了~!
为了确认的确是没错的,我将out目录中生成的临时文件都给删掉,重新编译,也OK~!
好了,具体是为什么这样子我不清楚,有清楚的朋友可以给解释解释。。。