Android应用程序无法在像Gingerbread这样的较低版本中运行

时间:2015-09-30 06:36:50

标签: android android-studio gradle android-gradle build.gradle

我正在尝试开发一个适用于所有Android版本的应用程序,如API级别23以及API级别8.虽然调试应用程序,但它在最新版本的api上工作得很好,但不能在像Gingerbread这样的较低版本上工作。< / p>

我尝试更改minSdkVersion,但这并没有解决问题。

在较低版本中调试时显示错误

  

“安装失败,因为设备可能有陈旧的dexed罐子   与当前版本不匹配(dexopt错误)。为了   继续,你必须卸载现有的应用程序。“

的build.gradle

apply plugin: 'android'

dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.google.android.gms:play-services:7.8.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:support-v4:21.0.3'
}
android {
compileSdkVersion 22
buildToolsVersion "21.0.0"

defaultConfig {
    applicationId "org.linphone"
    minSdkVersion 9
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}

sourceSets {

    debug.setRoot('build-types/debug')
    release.setRoot('build-types/release')
 }
android {
    defaultConfig {
        multiDexEnabled = true
        minSdkVersion
        targetSdkVersion
    }
}

configurations.all {
    exclude group: 'com.android.support', module: 'support-annotations'
}
}

的Manifest.xml

    <uses-sdk
    android:minSdkVersion="9"
      />

4 个答案:

答案 0 :(得分:0)

您正在使用gradle,因此您应该从manifest.xml中删除uses-sdk声明 - gradle将其自行添加。然后将build.gradle中的minSdkVersion更改为等于或低于所需的值。

答案 1 :(得分:0)

启用proguard,它可能是由dex文件引起的。当dex文件大于缓冲区大小(即包含超过65k的方法)时会发生这种情况。

android {
    ...

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

答案 2 :(得分:0)

您的应用已达到65k方法限制。解决方案很少:

  1. 使用ProGuard缩小代码。来自文档:
  2.   

    ProGuard工具通过删除未使用的代码并使用语义模糊的名称重命名类,字段和方法来缩小,优化和混淆代码。结果是较小的.apk文件,更难以进行逆向工程。由于ProGuard使您的应用程序更难以进行逆向工程,因此当您的应用程序使用对安全性敏感的功能(例如Licensing Your Applications时)时,请务必使用它。

    build.gradle模块的app上启用它:

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    

    您可以添加自己的ProGuard自定义规则read here

    1. 将SDK Build Tools更新到最新版本。

    2. 使用MultiDex technique构建您的应用。

    3. 此外,您的apply plugin: 'android'必须更改为apply plugin: 'com.android.application'

答案 3 :(得分:0)

我遇到了这个尝试在模拟器上进行测试的问题。我的解决方案是为模拟器提供更多内存和存储空间。在使用新(ART)工具构建并部署到Dalvik时,这似乎是一个问题。