我正在尝试将Fabric SDK与我的
Android libgdx应用程序集成.
fabric.io提供的Android Studio插件不适用于我的Gradle构建文件(由Libgdx tool生成).该插件只是不触及它们.
所以我尝试手动编辑它们.
这是我的build.gradle文件:
buildscript { repositories { mavenCentral() maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:1.1.+' classpath 'io.fabric.tools:gradle:1.+' } } allprojects { apply plugin: "eclipse" apply plugin: "idea" version = '1.0' ext { appName = 'App' gdxVersion = '1.5.4' roboVMVersion = '1.0.0-beta-04' Box2DLightsVersion = '1.3' ashleyVersion = '1.3.1' aiVersion = '1.5.0' } repositories { mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url "https://oss.sonatype.org/content/repositories/releases/" } } } project(":desktop") { apply plugin: "java" dependencies { compile project(":core") compile "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion" compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop" compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop" } } project(":android") { apply plugin: "android" apply plugin: 'io.fabric' configurations { natives } dependencies { compile project(":core") compile "com.badlogicgames.gdx:gdx-backend-android:$gdxVersion" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-x86" compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-armeabi-v7a" natives "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-x86" } repositories { mavenCentral() maven { url 'https://maven.fabric.io/public' } } } project(":core") { apply plugin: "java" dependencies { compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-freetype:$gdxVersion" } } tasks.eclipse.doLast { delete ".project" }
我没有触及android / build.gradle文件.
android { buildToolsVersion "22.0.1" compileSdkVersion 22 sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } instrumentTest.setRoot('tests') } } // needed to add JNI shared libraries to APK when compiling on CLI tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniFolders = new HashSet<File>() pkgTask.jniFolders.add(new File(projectDir,'libs')) } // 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/x86/").mkdirs(); configurations.natives.files.each { jar -> def outputDir = null 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.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','net.snuzzle.android/net.snuzzle.android.AndroidLauncher' } // sets up the Android Eclipse project,using the old Ant based build. eclipse { // need to specify Java source sets explicitely,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") } } } } } } } dependencies { compile 'com.android.support:support-v4:22.1.1' compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.melnykov:floatingactionbutton:1.2.0' }
SDK不在类路径中.
解决方法
我正在用这种方式将Fabric(Crashlytics)添加到我的LibGDX项目中.
这是我的build.gradle.
buildscript { repositories { mavenCentral() maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' ///... classpath 'io.fabric.tools:gradle:1.+' } } ///... project(":android") { apply plugin: 'com.android.application' apply plugin: 'io.fabric' repositories { jcenter() maven { url 'https://maven.fabric.io/public' } } ///.... dependencies { //... compile('com.crashlytics.sdk.android:crashlytics:2.2.2@aar') { transitive = true; } //...
我认为与gradle配置的唯一区别是添加了崩解依赖.
现在在你的清单中添加android.permission.INTERNET权限,同样在AndroidLauncher的onCreate方法中添加此行
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fabric.with(this,new Crashlytics()); ///...
不要忘记在Android模块中创建fabric.properties文件并将这些行添加到它:
apiSecret= YOUR_API_SECRET_FROM_PANEL apiKey=YOUR_API_KEY_FROM_PANEL
现在点击(android studio的结构插件)并登录然后点击安装crashlytics(或其他服务),在下一个按钮之后,你会看到一个对话框,告诉你运行你的应用程序来激活结构.
现在,您将在布料面板中看到您的游戏.