【问题标题】:java- libgdx build.gradle is not the same for AdMobjava- libgdx build.gradle 与 AdMob 不同
【发布时间】:2017-04-08 23:51:47
【问题描述】:

我正在为 android 构建一个应用程序并使用 libGdx,我检查了一百万个关于如何添加 Admob 的教程,每个教程都要求调整 build.gradle 文件,但我的文件与他们的不同,它们有依赖关系并且不同那里的东西,知道如​​何在我的 build.gradle 上添加 admob 吗?

android build.gradle:

android {
    buildToolsVersion "25.0.2"
    compileSdkVersion 25
    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }

        instrumentTest.setRoot('tests')
    }
    packagingOptions {
        exclude 'META-INF/robovm/ios/robovm.xml'
    }
    defaultConfig {
        applicationId "com.badlogic.drop"
        minSdkVersion 8
        targetSdkVersion 25
    }
}


// called every time gradle gets executed, takes the native dependencies of
// the natives configuration, and extracts them to the proper libs/ folders
// so they get packed with the APK.
task copyAndroidNatives() { 
    file("libs/armeabi/").mkdirs();
    file("libs/armeabi-v7a/").mkdirs();
    file("libs/arm64-v8a/").mkdirs();
    file("libs/x86_64/").mkdirs();
    file("libs/x86/").mkdirs();

    configurations.natives.files.each { jar ->
        def outputDir = null
        if(jar.name.endsWith("natives-arm64-v8a.jar")) outputDir = file("libs/arm64-v8a")
        if(jar.name.endsWith("natives-armeabi-v7a.jar")) outputDir = file("libs/armeabi-v7a")        
        if(jar.name.endsWith("natives-armeabi.jar")) outputDir = file("libs/armeabi")
        if(jar.name.endsWith("natives-x86_64.jar")) outputDir = file("libs/x86_64")
        if(jar.name.endsWith("natives-x86.jar")) outputDir = file("libs/x86")
        if(outputDir != null) {
            copy {
                from zipTree(jar)
                into outputDir
                include "*.so"
            }
        }
    }
}

task run(type: Exec) {
    def path
    def localProperties = project.file("../local.properties")
    if (localProperties.exists()) {
        Properties properties = new Properties()
        localProperties.withInputStream { instr ->
            properties.load(instr)
        }
        def sdkDir = properties.getProperty('sdk.dir')
        if (sdkDir) {
            path = sdkDir
        } else {
            path = "$System.env.ANDROID_HOME"
        }
    } else {
        path = "$System.env.ANDROID_HOME"
    }

    def adb = path + "/platform-tools/adb"
    commandLine "$adb", 'shell', 'am', 'start', '-n', 'com.badlogic.drop/com.badlogic.drop.AndroidLauncher'
}

// sets up the Android Eclipse project, using the old Ant based build.
eclipse {
    // need to specify Java source sets explicitly, SpringSource Gradle Eclipse plugin
    // ignores any nodes added in classpath.file.withXml
    sourceSets {
        main {
            java.srcDirs "src", 'gen'
        }
    }

    jdt {
        sourceCompatibility = 1.6
        targetCompatibility = 1.6
    }

    classpath {
        plusConfigurations += [ project.configurations.compile ]        
        containers 'com.android.ide.eclipse.adt.ANDROID_FRAMEWORK', 'com.android.ide.eclipse.adt.LIBRARIES'       
    }

    project {
        name = appName + "-android"
        natures 'com.android.ide.eclipse.adt.AndroidNature'
        buildCommands.clear();
        buildCommand "com.android.ide.eclipse.adt.ResourceManagerBuilder"
        buildCommand "com.android.ide.eclipse.adt.PreCompilerBuilder"
        buildCommand "org.eclipse.jdt.core.javabuilder"
        buildCommand "com.android.ide.eclipse.adt.ApkBuilder"
    }
}

// sets up the Android Idea project, using the old Ant based build.
idea {
    module {
        sourceDirs += file("src");
        scopes = [ COMPILE: [plus:[project.configurations.compile]]]        

        iml {
            withXml {
                def node = it.asNode()
                def builder = NodeBuilder.newInstance();
                builder.current = node;
                builder.component(name: "FacetManager") {
                    facet(type: "android", name: "Android") {
                        configuration {
                            option(name: "UPDATE_PROPERTY_FILES", value:"true")
                        }
                    }
                }
            }
        }
    }
}

以及核心 build.gradle:

apply plugin: "java"

sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

sourceSets.main.java.srcDirs = [ "src/" ]


eclipse.project {
    name = appName + "-core"
}

最后是桌面 build.gradle:

apply plugin: "java"

sourceCompatibility = 1.6
sourceSets.main.java.srcDirs = [ "src/" ]

project.ext.mainClassName = "com.badlogic.drop.desktop.DesktopLauncher"
project.ext.assetsDir = new File("../android/assets");

task run(dependsOn: classes, type: JavaExec) {
    main = project.mainClassName
    classpath = sourceSets.main.runtimeClasspath
    standardInput = System.in
    workingDir = project.assetsDir
    ignoreExitValue = true
}

task dist(type: Jar) {
    from files(sourceSets.main.output.classesDir)
    from files(sourceSets.main.output.resourcesDir)
    from {configurations.compile.collect {zipTree(it)}}
    from files(project.assetsDir);

    manifest {
        attributes 'Main-Class': project.mainClassName
    }
}

dist.dependsOn classes

eclipse {
    project {
        name = appName + "-desktop"
        linkedResource name: 'assets', type: '2', location: 'PARENT-1-PROJECT_LOC/android/assets'
    }
}

task afterEclipseImport(description: "Post processing after project generation", group: "IDE") {
  doLast {
    def classpath = new XmlParser().parse(file(".classpath"))
    new Node(classpath, "classpathentry", [ kind: 'src', path: 'assets' ]);
    def writer = new FileWriter(file(".classpath"))
    def printer = new XmlNodePrinter(new PrintWriter(writer))
    printer.setPreserveWhitespace(true)
    printer.print(classpath)
  }
}

【问题讨论】:

    标签: java android libgdx admob


    【解决方案1】:

    忘记桌面和核心模块的 build.gradle。

    希望您使用的是 Firebase Admob 集成,而不是旧版 AdMob 集成,因此请先集成 Firebase,然后再集成 Admob Ad。

    将此部分添加到android模块的build.gradle

    dependencies {
    
        compile 'com.google.firebase:firebase-core:10.2.1'
        compile 'com.google.firebase:firebase-ads:10.2.1'
        compile 'com.android.support:support-annotations:25.3.1'
    }
    
    apply plugin: 'com.google.gms.google-services'
    

    在您的根项目的build.gradle 文件中

    在 buildscript 中添加为依赖项以进行 firebase 集成。

    classpath 'com.google.gms:google-services:3.0.0' 
    

    AndroidManifest.xml 中的变化

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <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"
              android:theme="@android:style/Theme.Translucent" />
    

    开始编码部分,MobileAds初始化后创建视图。

    MobileAds.initialize(activity.getApplicationContext(), APP_ID);
    initView();
    
    protected void initView(){
    
            // Create and setup the AdMobHelper view
            topView = new AdView(activity);
            topView.setAdSize(AdSize.BANNER);
            topView.setAdUnitId(TopAdUnitId);
    
            bottomView = new AdView(activity);
            bottomView.setAdSize(AdSize.BANNER);
            bottomView.setAdUnitId(BottomAdUnitId);
    
            AdRequest.Builder adRequestBuilder = new AdRequest.Builder();
            //adRequestBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
            topView.loadAd(adRequestBuilder.build());
    
            AdRequest.Builder adRequestBuilder1 = new AdRequest.Builder();
            adRequestBuilder1.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
            bottomView.loadAd(adRequestBuilder1.build());
    
            crateInterestial();
    
            // Do the stuff that initialize() would do for you
            callForInitializeForView();
    
        }
    

    您可以查看此project 以了解与 LibGDX 的 Ad(带/不带 Firebase 的 AdMob、RevMob、Chartboost、StartApp...)的集成。

    【讨论】:

    • 非常感谢您的帮助,我有 2 个问题,首先在哪里添加这一行“classpath 'com.google.gms:google-services:3.0.0'”?第二个在哪里添加编码部分?你答案的最后一部分我应该写在哪里?
    • 有根 build.gradle 文件的链接打开它并检查你应该在哪里写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    相关资源
    最近更新 更多