如何为 Android 4.1 (SDK 16) 编译包含 Google Cardboard 驱动程序的 APK

How to compile a APK containing the Google Cardboard driver for Android 4.1 (SDK 16)

当前的官方 Google Cardboard 应用程序和旧版本的 Google Cardboard Unity 驱动程序都适用于 Android 4.1 及更高版本。

但是,Google Cardboard for Unity 库的当前版本设置为 Android 4.4 及更高版本。我试图将设置从 4.4 更改为 4.1,搜索所有字符串,例如:<uses-sdk android:minSdkVersion="19" 将其更改为 <uses-sdk android:minSdkVersion="16".

播放器设置也更改为 16。

不幸的是,我在编译时遇到以下错误:

Error: [Temp/StagingArea/AndroidManifest-main.xml:14, /Users/ch/workspaces/unity_workspace/educainventions/Temp/StagingArea/android-libraries/unitygvractivity/AndroidManifest.xml:2] 
Main manifest has <uses-sdk android:minSdkVersion='16'> but library uses minSdkVersion='19'

没错:/Temp/StagingArea/android-libraries/unitygvractivity/AndroidManifest.xml is set to minSdkVersion='19'

我也把那个文件改成了16,但是编译的时候改成了19,还是出现同样的错误。

是什么创建了该文件以将其从 19 更改为 16? 我认为解决方案可能是生成 Android 代码,然后用 [=32 编译它=] 工作室。但是每次都这样做会很慢,所以持续浪费时间...

每次构建 Android 游戏时,它都会生成新的 manifest.Try 以将其复制到 Assets/Plugins/Android。 在你复制它之后,unity 使用这个清单而不是生成新的...... 在我的情况下工作。 BTW.If 你使用最小 sdk 为 19 的库,将 unity 设置为 16 无济于事。

使用 19 而不是 16 的生成文件创建于:Temp/StagingArea/android-libraries/unitygvractivity/AndroidM‌​anifest.xml。我意识到我们可以在 Assets/Plugins/Android/ 中找到与该文件夹 unitygvractivity.aar 同名的文件。在 Google 上搜索我发现我们可以解压缩该文件。我使用 OSX 中的 The Unarchiver 对其进行解压。根据,我们还可以执行:

unzip unitygvractivity.aar -d unitygvractivity

解压缩后,我们可以在解压缩的文件夹 unitygvractivity 中找到 AndroidM‌​anifest.xml。我们在该文件中将 19 更改为 16,并将其压缩回 aar 格式。根据我们可以执行:

jar cvf unitygvractivity.aar -C unitygvractivity/ .

最后,我们用刚刚创建的新文件更改原始 unitygvractivity.aar 文件。它会编译。

所以下一个问题是:如果它在Android 4.1 中有效,为什么Google 将它设置为4.4 及更高版本? 也许是的一部分我没有使用的库需要 4.4?


更新:Google(https://github.com/googlevr/gvr-unity-sdk/issues/439)的回答:

We uses some level-19 APIs in our sdk so it is not guaranteed to work with pre-19 target. You should set 19 as your minimal target for cardboard