使用 gradle 构建的 Android 项目因内存不足错误而崩溃

标签 android gradle android-gradle-plugin

我有一个最初用 ADT 编码的 android 项目,它对库项目和 jar 文件(如 ActionBarSherlock 和 ViewPageIndicator)有几个依赖项,此时它运行得很好,但我不得不转移到 Android Studio 并从 Eclipse 导出项目以生成gradle 文件,经过一些努力以使其构建,其中包括从几个使用它的库项目中删除 android_support_v4.jar 的使用,并在工作室中创建一个依赖于 android_support_v4 的新空模块并让我的库依赖相反,我能够从 Android Studio 构建项目并将其运行到我的设备上,但是,一旦应用程序启动,它就会显示我的主要 Activity ,但它会挂起,几秒钟后我收到内存不足错误并且堆栈跟踪中有对我使用 ActionBarSherlock 的 fragment 之一的引用,但是我没有更改单个 .java 文件或任何其他源代码,它都是添加 .gradl e 和 .iml 文件并从我的库中删除 android_support_v4.jar 文件。

这是我的主模块的 build.gradle 和 settings.gradle 文件:

build.gradle:

buildscript {
repositories {
    mavenCentral()
}
dependencies {
    classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':JakeWharton-ActionBarSherlock-e5c2d1c:library')
    compile project(':JakeWharton-ViewPagerIndicator-2.4.1-8cd549f:library')
    compile project(':DevsmartLibrary')
    compile project(':android-numberpicker:library')
    compile project(':Android-Universal-Image-Loader:library')
    compile project(':android-xmlrpc')
    compile project(':StickyListHeadersLibrary')
    compile project(':AndroidSupport')
}

android {
    compileSdkVersion 18
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 16
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

    }
}

settings.gradle:
include ':'
include ':AndroidSupport'
include ':android-numberpicker:library'
include ':JakeWharton-ViewPagerIndicator-2.4.1-8cd549f:library'
include ':android-xmlrpc'
include ':JakeWharton-ActionBarSherlock-e5c2d1c:library'
include ':StickyListHeadersLibrary'
include ':Android-Universal-Image-Loader:library'
include ':DevsmartLibrary'

build.gradle 我的虚拟模块 AndroidSupport 的文件:
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android-library'

repositories {
    mavenCentral()
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 15
    }

    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
        }

    }
}

dependencies {
    compile 'com.android.support:support-v4:13.0.0'
}

我什至不知道要开始寻找,因为正如我所提到的,我没有更改任何源代码,任何指针将不胜感激。

编辑 1:
如果它对任何事情有帮助,这是我的 logcat 堆栈跟踪:
10-16 10:02:46.968: I/dalvikvm-heap(6323): Clamp target GC heap from 49.642MB to 48.000MB
10-16 10:02:46.968: D/dalvikvm(6323): GC_FOR_ALLOC freed 0K, 1% free 48713K/49159K, paused 322ms
10-16 10:02:46.968: I/dalvikvm-heap(6323): Forcing collection of SoftReferences for 272-byte allocation
10-16 10:02:47.328: I/dalvikvm-heap(6323): Clamp target GC heap from 49.642MB to 48.000MB
10-16 10:02:47.332: D/dalvikvm(6323): GC_BEFORE_OOM freed 0K, 1% free 48713K/49159K, paused 360ms
10-16 10:02:47.332: E/dalvikvm-heap(6323): Out of memory on a 272-byte allocation.
10-16 10:02:47.332: I/dalvikvm(6323): "main" prio=5 tid=1 RUNNABLE
10-16 10:02:47.332: I/dalvikvm(6323):   | group="main" sCount=0 dsCount=0 obj=0x40a74460 self=0x11a2828
10-16 10:02:47.332: I/dalvikvm(6323):   | sysTid=6323 nice=0 sched=0/0 cgrp=default handle=1074467976
10-16 10:02:47.332: I/dalvikvm(6323):   | schedstat=( 0 0 0 ) utm=698 stm=41 core=0
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.Throwable.nativeFillInStackTrace(Native Method)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.Throwable.fillInStackTrace(Throwable.java:160)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.Throwable.<init>(Throwable.java:83)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.Error.<init>(Error.java:37)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.VirtualMachineError.<init>(VirtualMachineError.java:35)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.OutOfMemoryError.<init>(OutOfMemoryError.java:33)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:-1)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:145)
10-16 10:02:47.332: I/dalvikvm(6323):   at java.lang.StringBuilder.append(StringBuilder.java:216)
10-16 10:02:47.332: I/dalvikvm(6323):   at com.my.project.containers.Banner.getImageUrl(Banner.java:57)
10-16 10:02:47.332: I/dalvikvm(6323):   at com.my.project.fragments.BannerFragment.newInstance(BannerFragment.java:51)
10-16 10:02:47.332: I/dalvikvm(6323):   at com.my.project.adapters.BannerItemFragmentPagerAdapter.getFragment(BannerItemFragmentPagerAdapter.java:143)
10-16 10:02:47.332: I/dalvikvm(6323):   at com.my.project.adapters.BannerItemFragmentPagerAdapter.getItem(BannerItemFragmentPagerAdapter.java:92)
10-16 10:02:47.332: I/dalvikvm(6323):   at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:97)
10-16 10:02:47.332: I/dalvikvm(6323):   at com.my.project.adapters.BannerItemFragmentPagerAdapter.instantiateItem(BannerItemFragmentPagerAdapter.java:111)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:829)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.support.v4.view.ViewPager.populate(ViewPager.java:1044)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.support.v4.view.ViewPager.populate(ViewPager.java:911)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.support.v4.view.ViewPager.setOffscreenPageLimit(ViewPager.java:692)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.project.fragments.HomeFragment$BannersListener$1.run(HomeFragment.java:604)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.app.Activity.runOnUiThread(Activity.java:4170)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.project.fragments.HomeFragment$BannersListener.onBannerListLoaded(HomeFragment.java:582)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.projectd.models.BrowseModel.requestBanners(BrowseModel.java:605)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.project.fragments.HomeFragment$2.run(HomeFragment.java:390)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.app.Activity.runOnUiThread(Activity.java:4170)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.project.fragments.HomeFragment.updateUIForNetworkState(HomeFragment.java:378)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.project.fragments.HomeFragment.onNetworkStateChanged(HomeFragment.java:314)
10-16 10:02:47.336: I/dalvikvm(6323):   at com.my.project.fragments.MyBaseFragment$NetworkStatusBroadcastReceiver.onReceive(MyBaseFragment.java:93)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.os.Handler.handleCallback(Handler.java:605)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.os.Handler.dispatchMessage(Handler.java:92)
10-16 10:02:47.336: I/dalvikvm(6323):   at android.os.Looper.loop(Looper.java:137)
10-16 10:02:47.340: I/dalvikvm(6323):   at android.app.ActivityThread.main(ActivityThread.java:4424)
10-16 10:02:47.340: I/dalvikvm(6323):   at java.lang.reflect.Method.invokeNative(Native Method)
10-16 10:02:47.340: I/dalvikvm(6323):   at java.lang.reflect.Method.invoke(Method.java:511)
10-16 10:02:47.340: I/dalvikvm(6323):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
10-16 10:02:47.340: I/dalvikvm(6323):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
10-16 10:02:47.340: I/dalvikvm(6323):   at dalvik.system.NativeStart.main(Native Method)
10-16 10:02:47.340: W/dalvikvm(6323): Exception thrown (Ljava/lang/OutOfMemoryError;) while throwing internal exception (Ljava/lang/OutOfMemoryError;)
10-16 10:02:47.652: I/dalvikvm-heap(6323): Clamp target GC heap from 49.641MB to 48.000MB
10-16 10:02:47.652: D/dalvikvm(6323): GC_FOR_ALLOC freed 1K, 1% free 48712K/49159K, paused 311ms
10-16 10:02:47.652: D/AndroidRuntime(6323): Shutting down VM
10-16 10:02:47.656: W/dalvikvm(6323): threadid=1: thread exiting with uncaught exception (group=0x40a731f8)

编辑 2:
我没有尝试过 Ray 的建议,我只是将 android:largeHeap="true"添加到我的 list 中,它不再因内存不足错误而崩溃,但仍然挂起,然后是 ANR

最佳答案

我设法通过删除我在 AndroidSupport 包中提到的虚拟项目来解决这个问题,我更改了对库的所有引用:

compile project(':AndroidSupport')


compile 'com.android.support:support-v4:18.0.0'

出于某种原因,这次我没有收到之前遇到的错误:
java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/LoaderManager;

清理并重建所有内容后,该应用程序现在运行良好......

关于使用 gradle 构建的 Android 项目因内存不足错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409970/

相关文章:

android - AsyncHttpClient 身份验证失败

java - android textview 变量

Android/Monodroid 图像小于 imagebutton

android - 如何在 Gradle 输出迭代器中获取 ABI 名称

android - buildConfigField、resValue 和 manifestPlaceholders 之间有什么区别?

android - Windows 中的 Android 版 FFMPEG 无法成功编译

gradle - 使用Prism突出显示build.gradle的语法

android - Auth0 gradle 依赖错误

Android Gradle Plugin 7 LibraryBuildType 不再具有 isDebuggable 属性

android - 无法在 Android Studio 中下载 Gradle 插件