代码之家  ›  专栏  ›  技术社区  ›  SimpleJ

无法在Android Studio中安装或导入Volley

  •  0
  • SimpleJ  · 技术社区  · 6 年前

    我正在尝试使用Volley库在Android应用程序中发出网络请求,但是安装/使用Volley的说明不起作用(我正在遵循) this 指南)。

    build.gradle 依赖项和同步

    compile 'com.android.volley:volley:1.1.1'
    

    Android Studio给了我这个错误:

    Gradle sync failed: Could not find method compile() for arguments [com.android.volley:volley:1.1.1] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.
    Consult IDE log for more details (Help | Show Log) (10s 809ms)
    

    compile classname 同步似乎可以工作,但我仍然无法使用/导入截击类。虽然我不知道我应该导入什么,因为它被排除在指南之外了。Android Studio似乎没有意识到这种依赖性,因为它没有提供任何添加导入的选项:

    Android studio not detecting RequestQueue class

    这是我的

    apply plugin: 'com.android.application'
    
    buildscript {
        repositories {
            mavenCentral()
            jcenter()
            maven {
                url "https://maven.google.com"
            }
            google()
        }
    
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.4'
            classpath 'com.android.volley:volley:1.1.1'
        }
    }
    
    // Allow plugins to declare Maven dependencies via build-extras.gradle.
    allprojects {
        repositories {
            mavenCentral();
            jcenter()
        }
    }
    
    task wrapper(type: Wrapper) {
        gradleVersion = '4.1.0'
    }
    
    // Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties.
    // Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html
    ext {
        apply from: '../CordovaLib/cordova.gradle'
        // The value for android.compileSdkVersion.
        if (!project.hasProperty('cdvCompileSdkVersion')) {
            cdvCompileSdkVersion = null;
        }
        // The value for android.buildToolsVersion.
        if (!project.hasProperty('cdvBuildToolsVersion')) {
            cdvBuildToolsVersion = null;
        }
        // Sets the versionCode to the given value.
        if (!project.hasProperty('cdvVersionCode')) {
            cdvVersionCode = null
        }
        // Sets the minSdkVersion to the given value.
        if (!project.hasProperty('cdvMinSdkVersion')) {
            cdvMinSdkVersion = null
        }
        // Whether to build architecture-specific APKs.
        if (!project.hasProperty('cdvBuildMultipleApks')) {
            cdvBuildMultipleApks = null
        }
        // Whether to append a 0 "abi digit" to versionCode when only a single APK is build 
        if (!project.hasProperty('cdvVersionCodeForceAbiDigit')) {
            cdvVersionCodeForceAbiDigit = null
        }
        // .properties files to use for release signing.
        if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) {
            cdvReleaseSigningPropertiesFile = null
        }
        // .properties files to use for debug signing.
        if (!project.hasProperty('cdvDebugSigningPropertiesFile')) {
            cdvDebugSigningPropertiesFile = null
        }
        // Set by build.js script.
        if (!project.hasProperty('cdvBuildArch')) {
            cdvBuildArch = null
        }
    
        // Plugin gradle extensions can append to this to have code run at the end.
        cdvPluginPostBuildExtras = []
    }
    
    // PLUGIN GRADLE EXTENSIONS START
    // PLUGIN GRADLE EXTENSIONS END
    
    def hasBuildExtras = file('build-extras.gradle').exists()
    if (hasBuildExtras) {
        apply from: 'build-extras.gradle'
    }
    
    // Set property defaults after extension .gradle files.
    if (ext.cdvCompileSdkVersion == null) {
        ext.cdvCompileSdkVersion = privateHelpers.getProjectTarget()
        //ext.cdvCompileSdkVersion = project.ext.defaultCompileSdkVersion
    }
    if (ext.cdvBuildToolsVersion == null) {
        ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
        //ext.cdvBuildToolsVersion = project.ext.defaultBuildToolsVersion
    }
    if (ext.cdvDebugSigningPropertiesFile == null && file('../debug-signing.properties').exists()) {
        ext.cdvDebugSigningPropertiesFile = '../debug-signing.properties'
    }
    if (ext.cdvReleaseSigningPropertiesFile == null && file('../release-signing.properties').exists()) {
        ext.cdvReleaseSigningPropertiesFile = '../release-signing.properties'
    }
    
    // Cast to appropriate types.
    ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean();
    ext.cdvVersionCodeForceAbiDigit = cdvVersionCodeForceAbiDigit == null ? false : cdvVersionCodeForceAbiDigit.toBoolean();
    ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? null : defaultMinSdkVersion
    ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode)
    
    def computeBuildTargetName(debugBuild) {
        def ret = 'assemble'
        if (cdvBuildMultipleApks && cdvBuildArch) {
            def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch
            ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1);
        }
        return ret + (debugBuild ? 'Debug' : 'Release')
    }
    
    // Make cdvBuild a task that depends on the debug/arch-sepecific task.
    task cdvBuildDebug
    cdvBuildDebug.dependsOn {
        return computeBuildTargetName(true)
    }
    
    task cdvBuildRelease
    cdvBuildRelease.dependsOn {
        return computeBuildTargetName(false)
    }
    
    task cdvPrintProps << {
        println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
        println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
        println('cdvVersionCode=' + cdvVersionCode)
        println('cdvVersionCodeForceAbiDigit=' + cdvVersionCodeForceAbiDigit)
        println('cdvMinSdkVersion=' + cdvMinSdkVersion)
        println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
        println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
        println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
        println('cdvBuildArch=' + cdvBuildArch)
        println('computedVersionCode=' + android.defaultConfig.versionCode)
        android.productFlavors.each { flavor ->
            println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
        }
    }
    
    android {
    
        defaultConfig {
            versionCode cdvVersionCode ?: new BigInteger("" + privateHelpers.extractIntFromManifest("versionCode"))
            applicationId privateHelpers.extractStringFromManifest("package")
    
            if (cdvMinSdkVersion != null) {
                minSdkVersion cdvMinSdkVersion
            }
        }
    
        lintOptions {
          abortOnError false;
        }
    
        compileSdkVersion cdvCompileSdkVersion
        buildToolsVersion cdvBuildToolsVersion
    
        //This code exists for Crosswalk and other Native APIs.
        //By default, we multiply the existing version code in the Android Manifest by 10 and 
        //add a number for each architecture.  If you are not using Crosswalk or SQLite, you can
        //ignore this chunk of code, and your version codes will be respected.
    
        if (Boolean.valueOf(cdvBuildMultipleApks)) {
            flavorDimensions "default"
    
            productFlavors {
                armeabi {
                    versionCode defaultConfig.versionCode*10 + 1
                    ndk {
                        abiFilters = ["armeabi"]
                    }
                }
                armv7 {
                    versionCode defaultConfig.versionCode*10 + 2
                    ndk {
                        abiFilters = ["armeabi-v7a"]
                    }
                }
                arm64 {
                    versionCode defaultConfig.versionCode*10 + 3
                    ndk {
                        abiFilters = ["arm64-v8a"]
                    }
                }
                x86 {
                    versionCode defaultConfig.versionCode*10 + 4
                    ndk {
                        abiFilters = ["x86"]
                    }
                }
                x86_64 {
                    versionCode defaultConfig.versionCode*10 + 5
                    ndk {
                        abiFilters = ["x86_64"]
                    }
                }
            }
        } else if (Boolean.valueOf(cdvVersionCodeForceAbiDigit)) {
            // This provides compatibility to the default logic for versionCode before cordova-android 5.2.0
            defaultConfig {
                versionCode defaultConfig.versionCode*10
            }
        }
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    
        if (cdvReleaseSigningPropertiesFile) {
            signingConfigs {
                release {
                    // These must be set or Gradle will complain (even if they are overridden).
                    keyAlias = ""
                    keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph.
                    storeFile = null
                    storePassword = "__unset"
                }
            }
            buildTypes {
                release {
                    signingConfig signingConfigs.release
                }
            }
            addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release)
        }
        if (cdvDebugSigningPropertiesFile) {
            addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug)
        }
    }
    
    /*
     * WARNING: Cordova Lib and platform scripts do management inside of this code here,
     * if you are adding the dependencies manually, do so outside the comments, otherwise
     * the Cordova tools will overwrite them
     */
    
    
    dependencies {
        implementation fileTree(dir: 'libs', include: '*.jar')
        // SUB-PROJECT DEPENDENCIES START
        implementation(project(path: ":CordovaLib"))
        compile "com.android.support:support-v4:24.1.1+"
        // SUB-PROJECT DEPENDENCIES END
    }
    
    def promptForReleaseKeyPassword() {
        if (!cdvReleaseSigningPropertiesFile) {
            return;
        }
        if ('__unset'.equals(android.signingConfigs.release.storePassword)) {
            android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ')
        }
        if ('__unset'.equals(android.signingConfigs.release.keyPassword)) {
            android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: ');
        }
    }
    
    gradle.taskGraph.whenReady { taskGraph ->
        taskGraph.getAllTasks().each() { task ->
          if(['validateReleaseSigning', 'validateSigningRelease', 'validateSigningArmv7Release', 'validateSigningX76Release'].contains(task.name)) {
             promptForReleaseKeyPassword()
          }
        }
    }
    
    def addSigningProps(propsFilePath, signingConfig) {
        def propsFile = file(propsFilePath)
        def props = new Properties()
        propsFile.withReader { reader ->
            props.load(reader)
        }
    
        def storeFile = new File(props.get('key.store') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'storeFile'))
        if (!storeFile.isAbsolute()) {
            storeFile = RelativePath.parse(true, storeFile.toString()).getFile(propsFile.getParentFile())
        }
        if (!storeFile.exists()) {
            throw new FileNotFoundException('Keystore file does not exist: ' + storeFile.getAbsolutePath())
        }
        signingConfig.keyAlias = props.get('key.alias') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'keyAlias')
        signingConfig.keyPassword = props.get('keyPassword', props.get('key.alias.password', signingConfig.keyPassword))
        signingConfig.storeFile = storeFile
        signingConfig.storePassword = props.get('storePassword', props.get('key.store.password', signingConfig.storePassword))
        def storeType = props.get('storeType', props.get('key.store.type', ''))
        if (!storeType) {
            def filename = storeFile.getName().toLowerCase();
            if (filename.endsWith('.p12') || filename.endsWith('.pfx')) {
                storeType = 'pkcs12'
            } else {
                storeType = signingConfig.storeType // "jks"
            }
        }
        signingConfig.storeType = storeType
    }
    
    for (def func : cdvPluginPostBuildExtras) {
        func()
    }
    
    // This can be defined within build-extras.gradle as:
    //     ext.postBuildExtras = { ... code here ... }
    if (hasProperty('postBuildExtras')) {
        postBuildExtras()
    }
    

    为什么这样不行?我试过清理这个项目,重新启动Android工作室。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Lino    6 年前

    而不是把凌空依赖放进去 buildscript ,尝试将其包含在内

    dependencies {
        implementation fileTree(dir: 'libs', include: '*.jar')
        compile 'com.android.volley:volley:1.1.1'
        // SUB-PROJECT DEPENDENCIES START
        implementation(project(path: ":CordovaLib"))
        compile "com.android.support:support-v4:24.1.1+"
        // SUB-PROJECT DEPENDENCIES END
    }