smart - java-libgdx build.gradle no es lo mismo para AdMob
libgdx admob (1)
Estoy construyendo una aplicación para android y usando libGdx, revisé un millón de tutoriales sobre cómo agregar Admob, cada solicitud de tutorial para ajustar el archivo build.gradle pero mi archivo no es el mismo que ellos, tienen dependencias y cosas diferentes allí, alguna idea de cómo agregar admob en mi build.gradle?
el 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")
}
}
}
}
}
}
}
y el núcleo build.gradle:
apply plugin: "java"
sourceCompatibility = 1.6
[compileJava, compileTestJava]*.options*.encoding = ''UTF-8''
sourceSets.main.java.srcDirs = [ "src/" ]
eclipse.project {
name = appName + "-core"
}
y finalmente el escritorio 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)
}
}
Olvídese de build.gradle de escritorio y módulo principal.
Es de esperar que estés utilizando la integración de Firebase Admob en lugar de la integración heredada de AdMob, así que primero debes integrar Firebase y AdMob Ad.
Agregue esta parte al módulo build.gradle of android.
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''
En su archivo build.gradle del proyecto raíz
Agregue como dependencias en buildscript para la integración de Firebase.
classpath ''com.google.gms:google-services:3.0.0''
Cambios en 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" />
Comience a Codificar parte, cree vista después de la inicialización de 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();
}
Puede verificar este proyecto para la integración de anuncios (AdMob con / sin Firebase, RevMob, Chartboost, StartApp ...) con LibGDX.