我想在我的libgdx游戏中加入谷歌广告。在android中,这很简单。然而,在iOS中有一些复杂的问题:
我用我的广告标识符更新了Info.plist.xml文件。然后,我将以下条目添加到robovm.xml文件中:
添加到<frameworks>元素:
<!--AdMob-->
<framework>GoogleAppMeasurement</framework>
<framework>GoogleMobileAds</framework>
<framework>GoogleUtilities</framework>
<framework>nanopb</framework>在<frameworks>元素之前:
<frameworkPaths>
<path>libs</path>
</frameworkPaths>在主gradle.build文件中,我添加了一个条目allProjects.ext.robopodsVersion = "2.2.3",并将其添加到iOS项目部分implementation "com.mobidevelop.robovm:robopods-google-mobile-ads-ios:$robopodsVersion"中,因此此部分如下所示:
project(":ios") {
apply plugin: "java-library"
apply plugin: "robovm"
dependencies {
implementation project(":core")
implementation "com.mobidevelop.robovm:robopods-google-mobile-ads-ios:$robopodsVersion"
api "com.mobidevelop.robovm:robovm-rt:$roboVMVersion"
api "com.mobidevelop.robovm:robovm-cocoatouch:$roboVMVersion"
api "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"
api "com.badlogicgames.gdx:gdx-box2d-platform:$gdxVersion:natives-ios"
}
}然后,我下载了googlemobileadssdkios.zip文件,并将其内容放在iOS项目的libs文件夹下。ios/libs下的内容如下所示:
|- nanopb.xcframework
|- Info.plist
|- ios-armv7_arm64
|- ...
|- ios-i386_x86_64-simulator
|- ...
|- ios-x86_64-maccatalyst
|- ...
|- PromisesObjC.xcframework
|- Info.plist
|- ios-armv7_arm64
|- ...
|- ios-i386_x86_64-simulator
|- ...
|- ios-x86_64-maccatalyst
|- ...
|- Licenses
|- ...
|- GoogleUtilities.xcframework
|- Info.plist
|- ios-armv7_arm64
|- ...
|- ios-i386_x86_64-simulator
|- ...
|- ios-x86_64-maccatalyst
|- ...
|- GoogleMobileAds.framework
|- GoogleMobileAds
|- ...
|- Headers
|- ...
|- Modules
|- ...
|- GoogleAppMeasurement.framework
|- GoogleAppMeasurement
|- ...
|- Modules
|- ...总结一下:在每个.xcframework目录下,除了这个Info.plist文件之外,还有os-armv7_arm64、ios-i386_x86_64-simulator和ios-x86_64-maccatalyst目录。
当我试图在Android Studio的模拟器上运行这个应用程序时(使用robovm android studio插件idea-2.3.10-SNAPSHOT.zip),我得到了以下错误:
[ERROR] 09:12:34.831 ld: framework not found GoogleUtilities
[ERROR] 09:12:34.832 clang: error: linker command failed with exit code 1 (use -v to see invocation)
[ERROR] Couldn't compile app我怀疑这与GoogeUtilities使用的xcframework有关,并得到了开放问题https://github.com/MobiVM/robovm/issues/468的保证,它基本上告诉我们目前不支持xcframworks,但链接到问题https://github.com/MobiVM/robovm/pull/483,它用很少的文字描述了现在可以在<frameworkPaths>元素的元素中指定variant。
我现在面临的问题是:如何继续使用库,以及如何定义路径变量,以便它可以在iOS设备和模拟器中运行?
发布于 2020-07-09 19:02:18
这为我解决了这个问题:
在robovm.xml文件中,将<frameworkPaths>元素替换为以下部分:
<frameworkPaths>
<path variant="device">arm_libs</path>
<path variant="simulator">sim_libs</path>
</frameworkPaths>请注意(也在robovm.xml文件中)在我的frameworks部分中,必须添加以下部分:
<framework>PromisesObjC</framework>使用ios子项目中的shell创建两个目录:arm_libs和sim_libs
进入arm_libs目录,执行以下命令:
cp -r ../libs/GoogleUtilities.xcframework/ios-armv7_arm64/GoogleUtilities.framework .
cp -r ../libs/GoogleAppMeasurement.framework .
cp -r ../libs/GoogleMobileAds.framework .
cp -r ../libs/PromisesObjC.xcframework/ios-armv7_arm64/PromisesObjC.framework .
cp -r ../libs/nanopb.xcframework/ios-armv7_arm64/nanopb.framework .
cp -r ../libs/Licenses . 进入sim_libs目录,执行以下命令:
cp -r ../libs/GoogleUtilities.xcframework/ios-i386_x86_64-simulator/GoogleUtilities.framework .
cp -r ../libs/GoogleAppMeasurement.framework .
cp -r ../libs/GoogleMobileAds.framework .
cp -r ../libs/Licenses .
cp -r ../libs/PromisesObjC.xcframework/ios-i386_x86_64-simulator/PromisesObjC.framework .
cp -r ../libs/nanopb.xcframework/ios-i386_x86_64-simulator/nanopb.framework .这提供了以下结构:
|- arm_libs
|- GoogleAppMeasurement.framework
|- ...
|- GoogleMobileAds.framework
|- ...
|- GoogleUtilities.framework
|- ...
|- Licenses
|- ...
|- PromisesObjC.framework
|- ...
|- nanopb.framework
|- ...
|- sim_libs
|- GoogleAppMeasurement.framework
|- ...
|- GoogleMobileAds.framework
|- ...
|- GoogleUtilities.framework
|- ...
|- Licenses
|- ...
|- PromisesObjC.framework
|- ...
|- nanopb.framework
|- ...现在在模拟器和iPhone上运行对我来说是有效的。
https://stackoverflow.com/questions/62811104
复制相似问题