Android的ApiCheck机制之Class *** changed final qualifier

问题:

今天编译android大版本,由于修改了libcore下面的类及其接口,出现如下报错:

Checking API: checkapi-last

Checking API: checkapi-current
out/target/common/obj/PACKAGING/public_api.txt:31330: warning 21: Method java.io.File.deleteOnExit added thrown exception java.lang.UnsupportedOperationException
out/target/common/obj/PACKAGING/public_api.txt:31374: error 13: Class java.io.FileDescriptor changed final qualifier
out/target/common/obj/PACKAGING/public_api.txt:31394: error 13: Method java.io.FileInputStream.getFD has changed 'final' qualifier
out/target/common/obj/PACKAGING/public_api.txt:31411: error 13: Method java.io.FileOutputStream.getFD has changed 'final' qualifier

Copying: out/target/common/obj/APPS/ApplicationGuide_intermediates/noproguard.classes.jar


解决方法:

编译过程中禁用APICheck

修改build/core/tasks/apicheck.mk  注释掉其中 .PHONY: checkapi部分的代码


.PHONY: checkapi


# Run the checkapi rules by default.
droidcore: checkapi


last_released_sdk_version := $(lastword $(call numerically_sort, \
            $(filter-out current, \
                $(patsubst $(SRC_API_DIR)/%.txt,%, $(wildcard $(SRC_API_DIR)/*.txt)) \
             )\
        ))


# INTERNAL_PLATFORM_API_FILE is the one build by droiddoc.
# Note that since INTERNAL_PLATFORM_API_FILE is the byproduct of api-stubs module,
# (See frameworks/base/Android.mk)
# we need to add api-stubs as additional dependency of the api check.


# Check that the API we're building hasn't broken the last-released
# SDK version.
#$(eval $(call check-api, \
#    checkapi-last, \
#    $(SRC_API_DIR)/$(last_released_sdk_version).txt, \
#    $(INTERNAL_PLATFORM_API_FILE), \
#    -hide 2 -hide 3 -hide 4 -hide 5 -hide 6 -hide 24 -hide 25 \
#    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
#    -error 16 -error 17 -error 18 , \
#    cat $(BUILD_SYSTEM)/apicheck_msg_last.txt, \
#    checkapi, \
#    $(call doc-timestamp-for,api-stubs) \
#    ))



# Check that the API we're building hasn't changed from the not-yet-released
# SDK version.
#$(eval $(call check-api, \
#    checkapi-current, \
#    $(SRC_API_DIR)/current.txt, \
#    $(INTERNAL_PLATFORM_API_FILE), \
#    -error 2 -error 3 -error 4 -error 5 -error 6 \
#    -error 7 -error 8 -error 9 -error 10 -error 11 -error 12 -error 13 -error 14 -error 15 \
#    -error 16 -error 17 -error 18 -error 19 -error 20 -error 21 -error 23 -error 24 \
#    -error 25 , \
#    cat $(BUILD_SYSTEM)/apicheck_msg_current.txt, \
#    checkapi, \
#    $(call doc-timestamp-for,api-stubs) \
#    ))

以上方法可行!

PS: frameworks\base\api\current.txt就是最新编译生成的,也可以通过手动修改frameworks\base\api这个目录1 2 3 4 。。。。等xml文件中对应的类或者方法 这样可以让apiCheck通过,编译也就通过了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值