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

时间:2017-01-08 00:24:29

标签: android unity3d android-manifest google-cardboard google-vr

目前的官方Google Cardboard应用程序和适用于Android 4.1的旧版Google Cardboard驱动程序均适用于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代码,然后使用Android Studio进行编译。然而,每次这样做都会非常缓慢,所以不断浪费时间......

2 个答案:

答案 0 :(得分:1)

19处创建16代替Temp/StagingArea/android-libraries/unitygvractivity/AndroidM‌​anifest.xml的生成文件。我意识到我们可以在unitygvractivity.aar内找到与该文件夹名称相同的文件Assets/Plugins/Android/。在Google上搜索我发现我们可以解压缩该文件。我在OSX中使用Unarchiver解压缩它。根据{{​​3}},我们也可以执行:

unzip unitygvractivity.aar -d unitygvractivity

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

jar cvf unitygvractivity.aar -C unitygvractivity/ .

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

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

更新:Google的回答(this answer):

  

我们在sdk中使用了一些19级API,因此无法保证其正常工作   与19前的目标。您应该将19设置为最小目标   纸板

答案 1 :(得分:0)

每次构建Android游戏时,它都会生成新的清单。尝试将其复制到Assets / Plugins / Android。 复制后,unity使用此清单而不是生成新的... 在我的案例中工作。 BTW。如果您使用min sdk为19的库,将团结设置为16将无法帮助。