1.高版本SDK编译apk在低版本android源码中编译
Android7.1(对应SDK API为25)源码中编译无源码apk报错:
dex2oatd F 19250 19376 art/runtime/class_linker.cc:6620] Check failed: vtable_entry !=
other_entry && !name_comparator.HasSameNameAndSignature( other_entry-
>GetInterfaceMethodIfProxy(pointer_size)) vtable entries 1049 and 1054 are identical for
java.lang.Class<android.support.v7.widget.MenuPopupWindow$MenuDropDownListView> in method int android.support.v7.widget.DropDownListView.lookForSelectablePosition(int, boolean) and
int android.support.v7.widget.MenuPopupWindow$MenuDropDownListView.lookForSelectablePosition(in
t, boolean)
原因:关于Android Studio高版本SDK编译生成的apk放入低版本android源码中集成编译造成的
解决:
方式一://Android.mk禁止生成odex,此方法可用,但是效率低
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Tesk
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := Test.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
LOCAL_DEX_PREOPT := false //禁止生成odex
include $(BUILD_PREBUILT)
方式二:
1.修改Android Studio的sdk minsdk 和targetsdk版本
android {
compileSdkVersion 21 //需要<=21,此时编译即可生成odex(可选)
defaultConfig {
applicationId "com.qiyi.newdfulibrary"
minSdkVersion 18
targetSdkVersion 21 //需要<=21
}
}
2.Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Tesk
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := Test.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PREBUILT)