使用NullpointerException进行Gradle调试崩溃 - 运行正常

时间:2017-10-05 19:54:09

标签: java android android-studio jetbrains-ide android-studio-2.3

在尝试在Android Studio中调试我的应用时,Gradle会因NullpointerException而崩溃。它只适用于运行应用程序。 Android Studio 2.3.3。

这是gradle stacktrace:

java.lang.NullPointerException
    at com.android.tools.idea.run.GradleApplicationIdProvider.getTestPackageName(GradleApplicationIdProvider.java:50)
    at com.android.tools.idea.run.AndroidLaunchTasksProvider.getConnectDebuggerTask(AndroidLaunchTasksProvider.java:160)
    at com.android.tools.idea.run.LaunchTaskRunner.run(LaunchTaskRunner.java:79)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:635)
    at com.intellij.openapi.progress.impl.CoreProgressManager$3.run(CoreProgressManager.java:170)
    at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:494)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:155)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.run(ProgressManagerImpl.java:128)
    at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:307)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

这是app文件夹中的build.gradle。更多细节:这是一个带有Cocos2d-x游戏引擎的项目,我正在尝试使用本机代码调试。一个简单的测试项目确实有效,但我自己的项目没有。

import java.util.regex.Pattern
import com.android.build.OutputFile
import org.apache.tools.ant.taskdefs.condition.Os


apply plugin: 'com.android.application'
apply plugin: 'io.fabric'



task('increaseVersionCode') << {
    println 'Grade: Increasing Version Code...'
    def buildFile = file("build.gradle")
    def pattern = Pattern.compile("versionCode\\s+(\\d+)")
    def manifestText = buildFile.getText()
    def matcher = pattern.matcher(manifestText)
    matcher.find()
    def versionCode = Integer.parseInt(matcher.group(1))
    def manifestContent = matcher.replaceAll("versionCode " + ++versionCode)
    buildFile.write(manifestContent)
}
preBuild.dependsOn increaseVersionCode

task deleteGraphicsAssets(type: Delete) {
    println 'Grade: Deleting unnecessary assets...'
    delete "assets/1136p"
    delete "assets/2048p"
}
preBuild.dependsOn deleteGraphicsAssets



android {
    // Going higher means that we have to request to write to external storage (used for UUID): https://stackoverflow.com/questions/36084959/cant-create-a-directory-on-storage-emulated-0-on-emulator
    // But GameAnalytics reqires 24, let's see if it still works this way
    compileSdkVersion 22
    buildToolsVersion '25.0.3' // should be 25 for newer version
    defaultConfig {
        applicationId "com.forestringgames.apps.towerduel"
        minSdkVersion 15
        // Going higher means that we have to request to write to external storage (used for UUID): https://stackoverflow.com/questions/36084959/cant-create-a-directory-on-storage-emulated-0-on-emulator
        // But GameAnalytics reqires 24, let's see if it still works this way
        targetSdkVersion PROP_TARGET_SDK_VERSION
        versionCode 1607
        versionName "1.0"
//        multiDexEnabled true
        externalNativeBuild {
            ndkBuild {
                if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
                    // skip the NDK Build step if PROP_NDK_MODE is none
                    targets 'cocos2dcpp'
                    arguments 'NDK_TOOLCHAIN_VERSION=4.9'
                    arguments 'APP_PLATFORM=android-' + PROP_TARGET_SDK_VERSION


                    def module_paths = [project.file("../../FRGEngine/cocos2d").absolutePath,
                                        project.file("../../FRGEngine/cocos2d/cocos").absolutePath,
                                        project.file("../../FRGEngine/cocos2d/external").absolutePath]
                    if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                        // should use '/'
                        module_paths = module_paths.collect { it.replaceAll('\\\\', '/') }
                        arguments 'NDK_MODULE_PATH=' + module_paths.join(";")
                    } else {
                        arguments 'NDK_MODULE_PATH=' + module_paths.join(':')
                    }

                    arguments '-j' + Runtime.runtime.availableProcessors()
                    abiFilters.addAll(PROP_APP_ABI.split(':').collect { it as String })
                }
            }
        }
    }
    // only added for android debugging
    externalNativeBuild {
        ndkBuild {
            if (!project.hasProperty("PROP_NDK_MODE") || PROP_NDK_MODE.compareTo('none') != 0) {
                // skip the NDK Build step if PROP_NDK_MODE is none
                path "jni/Android.mk"
            }
        }
    }
    sourceSets.main {
        java.srcDir "src"
        res.srcDir "res"
        jniLibs.srcDir "libs"
        manifest.srcFile "AndroidManifest.xml"
        assets.srcDir "assets"
    }
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a'
            //, 'armeabi',  'armeabi-v7a', 'x86'  - what about arm64? Test it with Crashlytics
            universalApk false  //true
        }

//        density {
//            enable true
//            reset()
//            include 'mdpi', 'hdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi'
//            compatibleScreens 'small', 'normal', 'large', 'xlarge'
//
//        }
    }
    signingConfigs {

        release {
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                storeFile file(RELEASE_STORE_FILE)
                storePassword RELEASE_STORE_PASSWORD
                keyAlias RELEASE_KEY_ALIAS
                keyPassword RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false // Warning: is this a good idea?
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            if (project.hasProperty("RELEASE_STORE_FILE")) {
                signingConfig signingConfigs.release
            }

            externalNativeBuild {
                ndkBuild {
                    arguments 'NDK_DEBUG=0'
                }
            }
        }

        debug {
//            debuggable true
//            jniDebuggable true

            externalNativeBuild {
                ndkBuild {
                    arguments 'NDK_DEBUG=1'
                }
            }
        }
    }

}




crashlytics {
    enableNdk = true
    androidNdkOut = 'obj'
    androidNdkLibsOut = 'libs'

}

repositories {
    mavenCentral()
}

dependencies {
    //    compile 'com.android.support:multidex:1.0.1'
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile project(':libcocos2dx')
    //    compile project(':BaseGameUtils')
    //    compile 'com.android.support:multidex:1.0.0'
    compile 'com.facebook.android:facebook-android-sdk:4.8.0'
    //    compile 'com.google.android.gms:play-services-auth:9.0.0'
    // integration guide (with latest version numbers: https://fabric.io/downloads/gradle)
    // Crashlytics KitminifyEnabled
    compile('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
        transitive = true
    }
    // NDK Kit
    compile('com.crashlytics.sdk.android:crashlytics-ndk:1.1.6@aar') {
        transitive = true
    }
    //    compile('com.crashlytics.sdk.android:crashlytics:2.7.0-SNAPSHOT@aar') {
    //        transitive = true;
    //    }
    //
    //    compile('com.crashlytics.sdk.android:crashlytics-ndk:1.2.0-SNAPSHOT:debug@aar') {
    //        transitive = true;
    //    }
    compile 'net.bytebuddy:byte-buddy:1.7.3'
    compile 'net.bytebuddy:byte-buddy-android:1.7.3'
    //    compile 'com.google.firebase:firebase-auth:11.0.1'
    compile 'com.google.android.gms:play-services-auth:11.0.0'
    compile 'com.google.android.gms:play-services-games:11.0.0'
    compile 'com.google.firebase:firebase-invites:11.0.0'
    compile 'com.google.firebase:firebase-messaging:11.0.0'
    compile 'com.anjlab.android.iab.v3:library:1.0.+'
    compile files('Frameworks/Fmod/prebuilt/android/fmod.jar')
    //    // use latest version instead version number: https://github.com/GameAnalytics/GA-SDK-ANDROID
    //    compile 'com.gameanalytics.sdk:gameanalytics-android:3.5.0'
    compile fileTree(include: ['*.jar'], dir: 'Frameworks/Jars')
    //
}

apply plugin: 'com.google.gms.google-services'

这是项目范围的build.gradle文件:

  // Top-level build file where you can add configuration options common to all sub-projects/modules.



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

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        // The Fabric Gradle plugin uses an open ended version to react
        // quickly to Android tooling updates
        //classpath 'io.fabric.tools:gradle:1.21.5' // version number: https://twittersdk.artifactoryonline.com/twittersdk/repo/io/fabric/tools/gradle/
        classpath 'io.fabric.tools:gradle:1.+'
        classpath 'com.google.gms:google-services:3.1.0'

    }
}

allprojects {
    repositories {
        jcenter()

        // FABRIC PRIVATE
    //        maven { url 'https://s3.amazonaws.com/fabric-artifacts-private/internal-snapshots' }

        // FABRIC OFFICIAL
        maven { url 'https://maven.fabric.io/public' }

//        maven { url 'http://maven.gameanalytics.com/release' }

    }
}

编辑:我也按此顺序尝试了这个:

  1. 重建项目
  2. 清洁项目
  3. 使缓存无效/重新启动
  4. 如果您使用的是Gradle deamon。通过./gradlew --stop停止并从1到3的步骤开始
  5. 最后&amp;破坏性地完全关闭Android Studio并从项目目录的根目录中删除.gradle目录(它是隐藏的),然后再次启动Android Studio。
  6. 关闭所有其他Android Studio实例
  7. 重启OSX

0 个答案:

没有答案