首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将Google AdMob集成到iOS上的libgdx游戏中,结果是"framework not found GoogleUtilities“。

尝试将Google AdMob集成到iOS上的libgdx游戏中,结果是"framework not found GoogleUtilities“。
EN

Stack Overflow用户
提问于 2020-07-09 16:55:27
回答 1查看 393关注 0票数 0

我想在我的libgdx游戏中加入谷歌广告。在android中,这很简单。然而,在iOS中有一些复杂的问题:

我用我的广告标识符更新了Info.plist.xml文件。然后,我将以下条目添加到robovm.xml文件中:

添加到<frameworks>元素:

代码语言:javascript
复制
<!--AdMob-->
<framework>GoogleAppMeasurement</framework>
<framework>GoogleMobileAds</framework>
<framework>GoogleUtilities</framework>
<framework>nanopb</framework>

<frameworks>元素之前:

代码语言:javascript
复制
<frameworkPaths>
    <path>libs</path>
</frameworkPaths>

在主gradle.build文件中,我添加了一个条目allProjects.ext.robopodsVersion = "2.2.3",并将其添加到iOS项目部分implementation "com.mobidevelop.robovm:robopods-google-mobile-ads-ios:$robopodsVersion"中,因此此部分如下所示:

代码语言:javascript
复制
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下的内容如下所示:

代码语言:javascript
复制
|- 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_arm64ios-i386_x86_64-simulatorios-x86_64-maccatalyst目录。

当我试图在Android Studio的模拟器上运行这个应用程序时(使用robovm android studio插件idea-2.3.10-SNAPSHOT.zip),我得到了以下错误:

代码语言:javascript
复制
[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设备和模拟器中运行?

EN

回答 1

Stack Overflow用户

发布于 2020-07-09 19:02:18

这为我解决了这个问题:

robovm.xml文件中,将<frameworkPaths>元素替换为以下部分:

代码语言:javascript
复制
<frameworkPaths>
    <path variant="device">arm_libs</path>
    <path variant="simulator">sim_libs</path>
</frameworkPaths>

请注意(也在robovm.xml文件中)在我的frameworks部分中,必须添加以下部分:

代码语言:javascript
复制
<framework>PromisesObjC</framework>

使用ios子项目中的shell创建两个目录:arm_libssim_libs

进入arm_libs目录,执行以下命令:

代码语言:javascript
复制
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目录,执行以下命令:

代码语言:javascript
复制
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 .

这提供了以下结构:

代码语言:javascript
复制
|- 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上运行对我来说是有效的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62811104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档