高通平臺添加自己的product後com.qualcomm.qti.tetherservice不停crash

異常Log:
01-01 07:05:18.156: W/System(9653): ClassLoader referenced unknown path: /system/framework/ConnectivityExt.jar
01-01 07:05:18.161: W/System(9653): ClassLoader referenced unknown path: /system/priv-app/QtiTetherService/lib/arm
01-01 07:05:18.169: I/art(9653): Rejecting re-init on previously-failed class java.lang.Class<com.qualcomm.qti.tetherservice.TetherService$1>
01-01 07:05:18.169: I/art(9653): Rejecting re-init on previously-failed class java.lang.Class<com.qualcomm.qti.tetherservice.TetherService$1>
01-01 07:05:18.183: I/art(9653): Rejecting re-init on previously-failed class java.lang.Class<com.qualcomm.qti.tetherservice.TetherService$1>
01-01 07:05:18.183: D/AndroidRuntime(9653): Shutting down VM
01-01 07:05:18.184: E/AndroidRuntime(9653): FATAL EXCEPTION: main
01-01 07:05:18.184: E/AndroidRuntime(9653): Process: com.qualcomm.qti.tetherservice, PID: 9653
01-01 07:05:18.184: E/AndroidRuntime(9653): java.lang.NoClassDefFoundError: com.qualcomm.qti.tetherservice.TetherService$1
01-01 07:05:18.184: E/AndroidRuntime(9653): at com.qualcomm.qti.tetherservice.TetherService.<init>(TetherService.java:77)
01-01 07:05:18.184: E/AndroidRuntime(9653): at java.lang.Class.newInstance(Native Method)
01-01 07:05:18.184: E/AndroidRuntime(9653): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2859)
01-01 07:05:18.184: E/AndroidRuntime(9653): at android.app.ActivityThread.access$1900(ActivityThread.java:150)
01-01 07:05:18.184: E/AndroidRuntime(9653): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)
01-01 07:05:18.184: E/AndroidRuntime(9653): at android.os.Handler.dispatchMessage(Handler.java:102)
01-01 07:05:18.184: E/AndroidRuntime(9653): at android.os.Looper.loop(Looper.java:148)
01-01 07:05:18.184: E/AndroidRuntime(9653): at android.app.ActivityThread.main(ActivityThread.java:5417)
01-01 07:05:18.184: E/AndroidRuntime(9653): at java.lang.reflect.Method.invoke(Native Method)
01-01 07:05:18.184: E/AndroidRuntime(9653): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-01 07:05:18.184: E/AndroidRuntime(9653): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-01 07:05:18.187: W/ActivityManager(1279): Process com.qualcomm.qti.tetherservice has crashed too many times: killing!

從log中分析可能是ConnectivityExt.jar這個包沒有引入,到/system/framework下一查看,果真如此。將這個jar包push到手機/system/framework目錄,就不再crash了。

由於剛添加了自己的產品目錄,猜測應該是相關的mk沒有改好。源碼中搜索了下,導入ConnectivityExt.jar的mk爲
vendor/qcom/proprietary/prebuilt_HY11/target/product/msm8226/prebuilt.mk,在此添加打印發現沒有輸出,那就是這裏沒有執行了。

繼續往上查找,引用prebuilt.mk的爲vendor/qcom/proprietary/common/config/device-vendor

ifneq (, $(filter $(PRODUCT_LIST), $(TARGET_PRODUCT)))

  ***#include device/qcom/$(TARGET_PRODUCT)/BoardConfig.mk
  file = device/qcom/$(TARGET_PRODUCT)/BoardConfig.mk
  ifeq ($(file), $(wildcard $(file)))
    include device/qcom/$(TARGET_PRODUCT)/BoardConfig.mk
  else
    include vendor/koko/$(TARGET_PRODUCT)/BoardConfig.mk
  endif***

  ifeq ($(call is-board-platform,msm8660),true)
    PREBUILT_BOARD_PLATFORM_DIR := msm8660_surf
  else ifeq ($(TARGET_PRODUCT),msm8625)
    PREBUILT_BOARD_PLATFORM_DIR := msm8625
  else ifeq ($(TARGET_PRODUCT),mpq8064)
    PREBUILT_BOARD_PLATFORM_DIR := mpq8064
  else
    PREBUILT_BOARD_PLATFORM_DIR := $(TARGET_BOARD_PLATFORM)
  endif

  $(call inherit-product-if-exists, $(QC_PROP_ROOT)/common-noship/etc/device-vendor-noship.mk)
  $(call inherit-product-if-exists, $(QC_PROP_ROOT)/prebuilt_grease/target/product/$(PREBUILT_BOARD_PLATFORM_DIR)/prebuilt.mk)
  $(call inherit-product-if-exists, $(QC_PROP_ROOT)/prebuilt_HY11/target/product/$(PREBUILT_BOARD_PLATFORM_DIR)/prebuilt.mk)
  $(call inherit-product-if-exists, $(QC_PROP_ROOT)/prebuilt_HY22/target/product/$(PREBUILT_BOARD_PLATFORM_DIR)/prebuilt.mk)

從源碼中調用inherit-prouct-if-exists來引入prebuilt.mk,那如果判斷不存在,也就不引入了。在這裏我們看到引用了變量PREBUILT_BOARD_PLATFORM_DIR,這是在上面代碼的if–elseif–else中獲取的。is-board-platform判斷當前的boardplatform是否匹配,而當前的boardplatform又是通過include device/qcom/$(TARGET_PRODUCT)/BoardConfig.mk引入。看到這裏就發現了問題,原來這裏目錄指定爲了device/qcom/…..,而我的product則是新建在了vendor/koko/下了,難怪找不到了。
按照源碼中* *部分做了修改,重新編譯燒錄,順利引用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章