理解工具:Android上的overrideLibrary

理解工具:Android上的overrideLibrary,android,android-manifest,Android,Android Manifest,我有一个带有minSdk=“14”的主应用程序,还有用于Android v的Facebook SDK。4.16.1具有minSdk=“15” build.gradle apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion "25.0.2" defaultConfig { applicationId "com.example.dmit

我有一个带有
minSdk=“14”
的主应用程序,还有用于Android v的Facebook SDK。4.16.1具有
minSdk=“15”

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.example.dmitriev_m.sample_android"
        minSdkVersion 14
        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'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.facebook.android:facebook-android-sdk:4.16.1'
    compile 'com.android.support:appcompat-v7:25.1.0'
}
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.dmitriev_m.sample_android">

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="25"
        tools:overrideLibrary="com.facebook, android.support.customtabs" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

关于合并
AndroidManifest.xml
文件:

默认情况下,当导入具有以下值的库时: 高于主清单文件时,会发生错误,并且库 无法导入。使合并工具忽略此冲突并 导入库,同时保持应用的较低版本值, 将overrideLibrary属性添加到标记。属性 值可以是一个或多个库包名称(逗号分隔), 指示可以覆盖主清单的库的 Minsdk版本

但我的合并清单看起来像是应用程序覆盖了Facebook SDK的清单文件(min SDK为14):


运行此应用程序安全吗?我的意思是,当Facebook SDK从Android API 15调用方法时,应用程序应该崩溃,不是吗?

是的,如果库调用API 15函数,而设备只有API 14,它就会崩溃。如果设备为API15或更高,它仍能工作


不过,在这种情况下我不会担心。14是Anroid 3.x。只有极少数的3.x设备生产出来——Android平板电脑直到4.0发布后才开始流行。使用中的3.x型号占所有设备的百分比不到0.1%。如果他们不工作,那么花时间和精力支持他们真的值得吗?老实说,我会把你的minsdk提高到15或更高。(将其提高到19只会减少10%的全球市场份额,这将严重偏向亚洲、非洲和南美洲的低收入国家。如果你的主要目标是美国和欧盟,那么可能不值得为此付出成本)。

14不是Android 3.x。是安卓4.0你说得对。但它仍然不到所有设备的0.1%