【问题标题】:Android - App crashes on Pre-Lollipop devicesAndroid - Pre-Lollipop 设备上的应用程序崩溃
【发布时间】:2016-01-07 06:15:30
【问题描述】:

我的应用在 Lollipop 设备上运行良好,但在 Lollipop 版本之前一直崩溃。 我只是通过谷歌文档使用以下代码在我的应用程序中实现了一个横幅添加

    // Request for Ads
           AdRequest adRequest = new AdRequest.Builder()

                  // Add a test device to show Test Ads
                 .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
                 .build();

         // Load ads into Banner Ads
         mAdView.loadAd(adRequest);

使用

    compileSdkVersion 23
    buildToolsVersion "23.0.1"

清单

  <meta-data
             android:name="com.google.android.gms.version"
             android:value="@integer/google_play_services_version" />

         <activity
             android:name="com.google.android.gms.ads.AdActivity"
          android:configChanges="keyboard|keyboardHidden
   |orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

错误

 E/AndroidRuntime: FATAL EXCEPTION: main
 E/AndroidRuntime: Process: com.app.aggro, PID: 13257
 E/AndroidRuntime: java.lang.VerifyError: 
  com/google/android/gms/measurement/internal/zzv
 E/AndroidRuntime: at   
 com.google.android.gms.measurement.AppMeasurementContentProvider
.onCreate(Unknown Source)
E/AndroidRuntime:     at  
android.content.ContentProvider.attachInfo(ContentProvider.java:1656)
 E/AndroidRuntime:     at  
android.content.ContentProvider.attachInfo(ContentProvider.java:1627)
 E/AndroidRuntime:     at  
android.app.ActivityThread.installProvider(ActivityThread.java:5015)
E/AndroidRuntime:     at  
android.app.ActivityThread.installContentProviders
(ActivityThread.java:4589)
 E/AndroidRuntime:     at   
 android.app.ActivityThread.handleBindApplication
 (ActivityThread.java:4522)
E/AndroidRuntime:     at  
android.app.ActivityThread.access$1500(ActivityThread.java:151)
E/AndroidRuntime:     at  
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1381)
E/AndroidRuntime:     at 
android.os.Handler.dispatchMessage(Handler.java:110)
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:193)
  E/AndroidRuntime:     at  
android.app.ActivityThread.main(ActivityThread.java:5299)
E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native  
Method)
E/AndroidRuntime:     at  
java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime:     at   
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:825)
 E/AndroidRuntime:     at   
 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641)
E/AndroidRuntime:     at dalvik.system.NativeStart.main
(Native Method)

我的 Gradle 文件是

 apply plugin: 'com.android.application'

 buildscript {
     repositories {
         maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
         classpath 'io.fabric.tools:gradle:1.+'
     }
 }
 repositories {
     mavenCentral()
     maven { url   
 "https://oss.sonatype.org/content/repositories/snapshots"}
        maven { url 'https://maven.fabric.io/public' }
        maven { url   
     "https://oss.sonatype.org/content/repositories/snapshots/" }
     maven { url 'https://dl.bintray.com/drummer-aidan/maven' }
 }
android {
     compileSdkVersion 23
     buildToolsVersion "23.0.1"

    defaultConfig {
         applicationId "com.app.aggro"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
     }
     buildTypes {
         release {
             minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-
android.txt'), 'proguard-rules.pro'
        }
    }


    dexOptions{
        incremental true
        javaMaxHeapSize "4g"
     }
    defaultConfig {
        multiDexEnabled true
    }
    packagingOptions {
         exclude 'META-INF/DEPENDENCIES'
         exclude 'META-INF/NOTICE'
         exclude 'META-INF/LICENSE'
         exclude 'META-INF/LICENSE.txt'
         exclude 'META-INF/NOTICE.txt'
     }
  }

 dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile('com.mikepenz:materialdrawer:3.0.9@aar') {
        transitive = true
     }
     compile('com.github.florent37:materialviewpager:1.1.0@aar') {
         transitive = true
    }


    compile('com.crashlytics.sdk.android:crashlytics:2.4.0@aar') {
        transitive = true;
     }
    compile 'com.google.android.gms:play-services:8.1.0'
     compile 'com.mcxiaoke.volley:library:1.0.+'
     compile 'com.google.code.gson:gson:2.3.1'
      compile 'com.marshalchen.ultimaterecyclerview:library:0.3.11'
     compile 'com.android.support:recyclerview-v7:22.2.0'
     compile 'com.android.support:cardview-v7:23.0.1'
     compile 'com.jpardogo.googleprogressbar:library:1.2.0'
      compile 'com.quinny898.library.persistentsearch:library:1.0.0-  
 SNAPSHOT'
     compile project(':storage')
     compile 'com.getbase:floatingactionbutton:1.10.0'
     compile 'com.parse.bolts:bolts-android:1.+'
      compile files('libs/activeandroid-3.1-beta.jar')
      compile 'com.android.support:design:23.0.1'
      compile 'it.neokree:MaterialTabs:0.11'
      compile 'com.miguelcatalan:materialsearchview:1.2.0'
  }

请帮助我摆脱这个问题。

【问题讨论】:

  • 在使用AdRequest之前检查Google Play Services在项目中是否可以作为库使用
  • 是的,我已经通过编译 'com.google.android.gms:play-services:8.1.0' 包含了它,它在 Lollipop 中工作,但它在 Kitkat 上不断崩溃
  • 发布你的 gradle 文件。
  • 我已经发布了我的 gradle 文件
  • 感谢您帮助我找到了灵魂

标签: android android-studio gradle google-play-services proguard


【解决方案1】:

在问题上展开一个多小时后,我发现我必须在MyApplication类中进行一些修改,如下所示:

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // register with Active Android
        ActiveAndroid.initialize(this);
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

我已经重写了attachbaseContext 方法,现在一切正常。

【讨论】:

  • 我们的 Android Studio 项目中的 MyApplication 类在哪里?
  • 你需要创建一个 .只需创建一个简单的 java 类并从 Application 类扩展它,就像我在我的答案中看到的那样并覆盖 attachBaseContext 方法。还在您的应用程序构建 gradle 文件中包含依赖项 compile 'com.android.support:multidex:1.0.1' .并且在清单应用程序标记中包含这样的类 android:name=".Your class name"
【解决方案2】:

+) 使用超过 65K 方法构建应用程序将导致此错误。

+) 当您的应用程序及其引用的库达到一定大小时(DEX 文件,您的应用程序的方法总数可达 65,536,包括 Android 框架方法,库方法和您自己代码中的方法),您会遇到构建错误,表明您的应用已达到 Android 应用构建架构的限制。

+) 要解决此问题,请在您的 build.gradle 中包含 Multidex 配置,就像图中突出显示的那样,同时覆盖attachBaseContext(Context base) 方法在您的应用程序类中具有以下内容。

public class YourParentApplication extends Application {

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
 }
}

在你的 Androidmanifest.xml 中添加这个:

<application
    android:name=".YourParentApplication"
    android:allowBackup="true"
    android:icon="@drawable/radiius_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/MyMaterialTheme">

有关 Multidex 的更多信息,请参阅以下网站: http://developer.android.com/tools/building/multidex.html

How to enable multidexing with the new Android Multidex support library

【讨论】:

    【解决方案3】:

    将你的 minSdkversion 降低到你想要支持的那个版本

    在项目的 gradle 文件中

    如下

    minSdkVersion 10

    【讨论】:

      【解决方案4】:

      您应该降低 AndroidManifest.xml 中的 API Lollipop 是 API 21。

      看看这个:API Levels 示例:

         defaultConfig {
              applicationId "com.package.name"
              minSdkVersion 11
              targetSdkVersion 21
              versionCode 1
              versionName "1.0"
          }
      

      【讨论】:

      • 你能解释一下吗,因为我已经降低了
      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多