将 Google Play 服务添加到 Adob​​e AIR Android 的本机扩展

Posted

技术标签:

【中文标题】将 Google Play 服务添加到 Adob​​e AIR Android 的本机扩展【英文标题】:Add Google Play Services to Native Extension for Adobe AIR Android 【发布时间】:2015-11-03 20:23:14 【问题描述】:

好的,我想知道是否有人设法拉出这个东西?我正在制作原生扩展,我的原生 JAR 通过反射使用 Google Play 服务。我已将 Google Play Services 库添加到我的原生扩展中,platform.xml 的外观如下:

<platform xmlns="http://ns.adobe.com/air/extension/3.1">
    <packagedDependencies>
        <packagedDependency>android-support-v4.jar</packagedDependency>
        <packagedDependency>google-play-services.jar</packagedDependency>
    </packagedDependencies>
    <packagedResources>
        <packagedResource>
            <packageName>com.google.android.gms</packageName>
            <folderName>google-play-services-res</folderName>
        </packagedResource>
    </packagedResources>
</platform>

我的android 构建文件夹的结构如下:

android
- nativeLib.jar
- android-support-v4.jar
- google-play-services-res (folder)
- google-play-services.jar
- library.swf

当我构建没有 Google Play 服务库(大约 5.1 mb)的 ANE 时,我看到我的 ANE 有 800 kb。在像这样添加 Google Play Services 依赖项后,ANE 大约有 6 mb,这对我来说表明 platform.xml 中声明的这些 JAR 以某种方式捆绑在本机扩展中。现在,我的原生 JAR 有一些功能,我可以查看从 Google Play 服务库调用方法是否失败。当我从我制作的 AIR Android 应用程序中调用它并在其中集成了这个生成的 ANE 时,它总是失败。

所以,我的native JAR 和google-play-services JAR 在将它们打包到我的 ANE 之前并排站在一起,但是在从我的本地 jar 触发方法之后,结果发现它不知道 google-play -services.jar 随处可见。

仅作记录,我在将 AIR 与本机库桥接时没有任何问题,所有调用都正常工作,并且我向 ActionScript 文件公开的界面功能齐全,只是本机库正在执行某些操作,具体取决于无论是否找到 Google Play 服务,在我的情况下 -> 它们从未被发现。

任何想法我可能做错了什么以及如何解决这个问题?

提前致谢。

【问题讨论】:

您是如何获得 google-play-services-.jar 的?这不是谷歌提供的罐子...... 好吧,一旦您将 Google play Services 下载到您的计算机上,如果您像我一样使用 Mac OS X,您可以在 google-play-services_lib 文件夹中找到它。 不,仍然没有 JAR。 【参考方案1】:

你可以只使用这个 ANE:

https://github.com/distriqt/ANE-GooglePlayServices

我们已经将这些库和资源都打包在里面了?

【讨论】:

感谢您的链接,我无法在搜索中找到此存储库,很奇怪。 :/ 无论如何,最后我最终将 google-play-services.jar 包装到 ANE 中,(目前)根本没有 ActionScript 接口,因为对于我的特殊情况,我不需要任何接口。我会坚持我的实现,因为我只需要 Google Play 服务库的某些部分,而gist.github.com/dmarcato/d7c91b94214acd936e42 我只在库中留下我需要的东西,因此导致 ANE 为 2.6M 而不是像您的项目中那样的 10.7M。我最终会发布答案我是如何做到的。 还只是想指出,如果您打算使用其他 ANE,剥离其他库可能会出现问题。因此,如果您正在使用任何其他与 Google 相关的 ANE,请小心 @Michael 如何使用您的 .ane 文件代替 google-play-services.jar? 您好,我们的 Google Play 服务 ANE 只是将播放服务库中的适当 jar 和资源包装起来。因此,如果您要针对播放服务库的某个版本进行 ANE 构建,但不要将它们与您的 ANE 打包,而是包含我们的 ANE。如果这没有意义,请告诉我。【参考方案2】:

我设法使用以下代码让 Google Play 服务正常工作(仅使用必要的 JAR 文件):

https://github.com/Oldes/ANEAmanitaAndroid-public/tree/GooglePlay

您可以使用以下拉取请求详细信息从最小的“hello”ANE 中查看我为使其正常工作所做的工作:

https://github.com/Oldes/ANEAmanitaAndroid-public/pull/1

我从 SDK 中获取 GPS jar 文件,从 AAR 档案中提取它们,例如:

extras\google\m2repository\com\google\android\gms\play-services-base\9.4.0\play-services-base-9.4.0.aar

在每个aar(只是一个zip)文件中都是classes.jar,我只是在我的项目中复制并重命名为play-services-base-9.4.0.jar

还要让 GPS 正确运行,您必须在应用清单中指定正确的应用程序 ID,例如 at this line:

【讨论】:

以上是关于将 Google Play 服务添加到 Adob​​e AIR Android 的本机扩展的主要内容,如果未能解决你的问题,请参考以下文章

将 Google Play 服务版本添加到您的应用清单?

如何将google play服务添加到eclipse

将 Google Play 游戏服务添加到现有应用程序

如何将 Google Play 服务添加到我的 Eclipse ADT 项目

如何将 Google Play 游戏服务添加到 AIR Game AS3?

无法将Google Play位置服务添加为我的Android项目的依赖项