(我知道有关stackoverflow和其他地方(比如google group)关于为NetworkInfo添加parcelable的问题,但这与此无关.)
我的工作在$(AOSP_ROOT)/ device /下,涉及多个aidl文件.其中一个是,
package com.example;
parcelable SomeRequest;
Run Code Online (Sandbox Code Playgroud)
而另一个援助就是,
package com.example;
import com.example.SomeRequest;
interface SomeService {
SomeRequest getRequest();
}
Run Code Online (Sandbox Code Playgroud)
我会得到编译错误,如,
device/somedevice/sdk/libs/aidl/com/example/SomeService.aidl:9: couldn't find import for class com.example.SomeRequest
Run Code Online (Sandbox Code Playgroud)
我想知道这是处理aidl文件的顺序.我的Android.mk看起来像,
LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl)
LOCAL_AIDL_INCLUDES := $(call all-Iaidl-files-under, aidl)
Run Code Online (Sandbox Code Playgroud)
在我将aidl文件从src /文件夹移动到aidl /文件夹之后引入了这个构建错误(出于某种原因我必须这样做).它以前工作过但现在即使我把它移回src /文件夹它也不再起作用了.我试图清理$(AOSP_ROOT)/ out/device/target但它没有帮助.
想法?
Chu*_*ang 10
最后我解决了.
如果你深入研究/build/core/base_rules.mk,LOCAL_AIDL_INCLUDES除了框架等默认文件夹之外,你会发现实际上是在AIDL编译阶段要包含的文件夹.
$(aidl_java_sources): PRIVATE_AIDL_FLAGS := -b $(addprefix -p,$(aidl_preprocess_import)) -I$(LOCAL_PATH) -I$(LOCAL_PATH)/src $(addprefix -I,$(LOCAL_AIDL_INCLUDES))
Run Code Online (Sandbox Code Playgroud)
在这个特定的情况下,你想要的是,
LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-Iaidl-files-under, aidl)
LOCAL_AIDL_INCLUDES := $(LOCAL_PATH)/aidl
Run Code Online (Sandbox Code Playgroud)
所以我环顾四周 - 解决方案是将 AIDL 文件仅放入它们自己的名为 aidl 的目录中,我认为其他一些人已经建议这样做。
事实证明,Android Studio 看起来在那里,但不太知道如何处理放在 src 目录中的 .aidl 文件。
我不明白。我只是不明白。AIDL 导入在 Eclipse 中完美运行。Android Studio 尚未做好生产准备。这是一个重大的倒退。
我也无法让 AIDL 编译器找到导入,我认为必须有比修改平台管理的 base_rules.mk 更好的方法。
啊!
| 归档时间: |
|
| 查看次数: |
12581 次 |
| 最近记录: |