美文网首页Android开发
关于AS高版本SDK编译生成的apk放入低版本android源码

关于AS高版本SDK编译生成的apk放入低版本android源码

作者: Ed_Lannister | 来源:发表于2018-12-21 19:19 被阅读235次

做dfu功能的时候,遇到的这样一个问题。添加了dfu的依赖之后,会要求编译的sdk为28,我的AS版本默认生成的是27.然而target版本是25.

// The DFU Library is imported automatically from jcenter:
    implementation 'no.nordicsemi.android:dfu:1.8.1'
    implementation 'com.google.code.gson:gson:2.8.5'

修改sdk minsdk 和targetsdk版本

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.qiyi.newdfulibrary"
        minSdkVersion 18
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

添加合适的支持

    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'

生成apk后,准备放入到

vendor/qcom/proprietary/prebuilt_HY11/target/product/msm8998/system/priv-app

随系统编译,然后就如下错误

AILED: /bin/bash -c "(rm -f out/target/product/msm8998/obj/APPS/controllerota_intermediates/oat/arm64/package.odex ) && (mkdir -p out/target/product/msm8998/obj/APPS/controllerota_intermediates/oat/arm64/ ) && (ANDROID_LOG_TAGS=\"*:e\" out/host/linux-x86/bin/dex2oatd --runtime-arg -Xms64m --runtime-arg -Xmx512m --runtime-arg -classpath --runtime-arg \"&\" --boot-image=out/target/product/msm8998/dex_bootjars/system/framework/boot.art --dex-file=vendor/qcom/proprietary/prebuilt_HY11/target/product/msm8998/system/priv-app/controllerota/controllerota.apk --dex-location=/system/priv-app/controllerota/controllerota.apk --oat-file=out/target/product/msm8998/obj/APPS/controllerota_intermediates/oat/arm64/package.odex --android-root=out/target/product/msm8998/system --instruction-set=arm64 --instruction-set-variant=generic --instruction-set-features=default --include-patch-information --runtime-arg -Xnorelocate --no-generate-debug-info --abort-on-hard-verifier-error --no-inline-from=core-oj.jar   --compile-pic )"
dex2oatd F   609   720 art/runtime/class_linker.cc:6620] Check failed: vtable_entry != other_entry && !name_comparator.HasSameNameAndSignature( other_entry->GetInterfaceMethodIfProxy(pointer_size)) vtable entries 1047 and 1052 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(int, boolean)
dex2oatd F 609 720 art/runtime/runtime.cc:422]Runtime aborting...
Aborting thread:

原因是apk要预置进源码的时候,会对apk进行一个解析,好形成odex文件加速apk的运行,但是基于高版本的sdk开发的apk里面的一些资源是无法被低版本正确的解析的,解决办法就是,在mk文件里面禁止对该apk进行odex的处理。LOCAL_DEX_PREOPT := false

include $(CLEAR_VARS)
LOCAL_MODULE        := controllerota
LOCAL_MODULE_OWNER  := qcom
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := APPS
LOCAL_CERTIFICATE   := PRESIGNED
LOCAL_DEX_PREOPT    := false
LOCAL_MODULE_SUFFIX := .apk
LOCAL_SRC_FILES     := system/priv-app/controllerota/controllerota.apk
LOCAL_PRIVILEGED_MODULE := true

include $(BUILD_PREBUILT)

相关文章

网友评论

    本文标题:关于AS高版本SDK编译生成的apk放入低版本android源码

    本文链接:https://www.haomeiwen.com/subject/qhmvkqtx.html