求助,编译Android平台时不到新添加的类

 我来答
huanglenzhi
推荐于2016-09-28 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117525 获赞数:517223
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  1、32位系统下的编译

  如果需要在32位系统中编译android系统,在编译前需要对部分makefile进行修改

  首先修改build/core/main.mk,修改的内容如下所示:

  -ifneq (64,$(findstring 64,$(build_arch)))

  +ifneq
  (i686,$(findstring i686,$(build_arch)))

  $(warning
  ************************************************************) $(warning You are attempting to build on a 32-bit system.)

  $(warning Only 64-bit build environments are supported beyond froyo/2.2.)

  其次修改如下四个文件:

  external/clearsilver/cgi/Android.mk
  external/clearsilver/java-jni/Android.mk
  external/clearsilver/util/Android.mk
  external/clearsilver/cs/Android.mk # This forces a 64-bit build for Java6
  -LOCAL_CFLAGS += -m64
  -LOCAL_LDFLAGS += -m64
  +LOCAL_CFLAGS += -m32
  +LOCAL_LDFLAGS += -m32即将LOCAL_CFLAGS和LOCAL_LDFLAGS由-m64改为-m32,从而指定使用32位系统进行编译如果使用 64bit 的操作系统编译,这些就都不用修改,但记得需要安装:For 64-bit servers the following extra packages may be needed:
  "sudo apt-get install libc6-dev-i386" (libc6-dev-amd64 if AMD CPU)
  "sudo apt-get install g++-multilib lib32ncurses5-dev lib32z1-dev"
  还有 jdk64bit 的版本编译2 、build/core/base_rules.mk:128:*** frameworks/opt/emoji/jni:
  .... libgl2jni already defined by framwworks/base/opengl/tests/gl2_jni/jni 停止

  从编译规则上看:
  # Make sure that this IS_HOST/CLASS/MODULE combination is unique.
  module_id := MODULE.$(if \
  $(LOCAL_IS_HOST_MODULE),HOST,TARGET).$(LOCAL_MODULE_CLASS).$(LOCAL_MODULE)
  ifdef $(module_id)
  $(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id)))
  endif

  在framwworks/base/opengl/tests/gl2_jni/下面定义的android.mk定义了:
  LOCAL_MODULE := libgl2jni
  include $(BUILD_SHARED_LIBRARY)
  导致生成的动态库重复,这是不对的,修改tests这个目录不参与编译即可,最直接的办法删除掉framwworks/base/opengl/tests/gl2_jni这个文件夹

  3、AIDL 编译报couldn't find import for class原因
  “AIDL服务只支持有限的数据类型,因此,如果用AIDL服 务传递一些复杂的数据就需要做更一步处理。AIDL服务支持的数据类型如下:
  Java的简单类 型(int、char、boolean等)。不需要导入(import)。String和 CharSequence。不需要导入(import)。
  List和 Map。但要注意,List和Map对象的元素类型必须是AIDL服务支持的数据类型。不需要导入(import)。AIDL自动生成 的接口。需要导入(import)。
  实现 android.os.Parcelable接口的类。需要导入(import)。
  其中后两种数据类 型需要使用import进行导入,传递不需要 import的数据类型的值的方式相同。传递一个需要import的数据类型的值(例如,实现android.os.Parcelable 接口的类)的步 骤略显复杂。除了要建立一个实现android.os.Parcelable接口的类外,还需要为这个类单独建立一个aidl文件,并使用parcelable关键字进行定义。”
  没有加LOCAL_AIDL_INCLUDES += xxx ,所以找不到我的parcelable aidl文件。

  修改android源码根目录下的build/core/pathmap.mk把你的目录加进去,此时再make update-api

  4、老是提示 @Override错误 方法未覆盖其父类的方法
  使 用JDK1.6编译没有问题,使用JDK1.5编译,会报@Override方法未覆盖其父类的方法。实际上这个方法是类实现的接口中方法,但是,这个语 法的jdk1.6的下面是可以通过的,也就是说jdk1.6认为类覆盖父类方法与实现接口方法都叫override,而jdk1.5不是这样认为的,不知 道这是当初jdk1.5的bug,还是当初就是认为覆盖父类方法与实现接口方法是不一样的,不得而知。但是从OO角度来看,覆盖父类方法与实现接口方法都 可以认为override,因为他们目的都是一样的,都是为了重用,都是多态的一种表现方式。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式