Built-in support for V2 signing for Oculus Quest apps has been making it into new Unity releases for 2019.2, 2019.3, and soon, 2018.4. It shows up as a checkbox in the Player Settings in the Oculus area.
We discovered one issue with this in that the change also requires the 1.38.2 version of the ‘Oculus Android’ package. Newly created projects that add Oculus support will automatically get this version of the Oculus Android package. However, existing projects that already had Oculus support set up will not automatically grab the latest version of the package.
If you have an existing project and want to use the Quest support, please go to Package Manager (Windows/Package Manager), scroll down to ‘Oculus Android’ and make sure that you’re using the 1.38.2 version of the package. Until you do this, built .apks may be missing some tracking functionality when run on Quest hardware.
We’ll look into making sure that future builds of Unity grab the correct version of the package for this change, but until then, doing a quick upgrade in Package Manager should work fine.
Hello
Thank you very much for your input. In this regard, I’d like to ask you. I’m trying to upload an app to the Oculus Store and I’m not accepted by the v2-schema signed app. It’s for Quest and I think that’s how the scheme has to be. Do you have any idea what might be going on?
@jj-unity Is it possible to toggle the check box through code? We’re building the same app for Go and Quest and I would like to do this in my scripted build pipeline
I’m on 2019.2.11f1 and If I enable v2 signing, the apk built is missing glEsVersion in the manifest and apk is rejected by oculus build manager.
I added the line in Plugins/Android/AndroidManifest.xml I can clearly see the line if I add a breakpoint on IPostGenerateGradleAndroidProject, but after it’s just stripped in some final merge.
If I disable v2 signing it works and the line is present again.
Okay I have problem sending APK to oculus store for tests. App is created for Quest, but on store we do not have this permission, so it is considered “mobile”. Okay, nothing unnormous here till now. And that’s when the fun part starts:
Trying to send APK through store to ALPHA channel → apk is more than 200 MB so I have to use command tool “ovr-platform-util”.
So I’m using - and this tool, after upload states:
“ERROR: The APK is intended only for the 6DoF device and cannot be used on the 3DoF mobile platform. You can set the android parameter: required = “false” in the android.hardware.vr.headtracking property if the APK should be shared by GearVR / Go and Oculus Quest. APKs for 3DoF platforms should have a V1 signature.”
I used custom manifest and followed all instructions, so changed those lines:
Getting now this error:
“ERROR: The APK file is signed using the unsupported Signature Scheme V2 standard. Disable signing using the Scheme V2 standard and resubmit (開發人員專用的 Android 7.0 | Android Developers).”
The time this error appered I was using old XR plugin. I disabled there V2 Signing. Deleted APK and build new one (with bumped build number) - still same error.
Changed min. platform for 21 - still error,
Used custom gradle with “v2SigningEnabled false” - still this error,
Upgraded XR plugin to new XR, clicking “yes” for every question of removing old XR plugin files etc. - still this error,
Also disabled V2 Signing in new plugin - still same error.
Did I forgot to check some small hidden checkbox somewhere, because it obviously cannot be that simple like disabling V2 Signing in options of course ?
In Project Settings / Publishing Settings, in section Build :
Check Custom Launcher Gradle Template
A file is created : Assets/plugins/Android/launcherTemplate.Gradle
Open this file with any text editor
Between nodes lintOptions {…} and buildTypes {…} insert :
Sideload the apk and check it runs on Quest and Go (it was ok for me)
This apk was then sucessfully uploaded to the Oculus Store (ie the message “ERROR: The APK file is signed using the unsupported Signature Scheme V2 standard. etc” is not displayed anymore)
Huge Thank you @BleuCobalt ! You saved my day and a lot of time.
My situation was, that I had to upgrade a long term VR project from Unity 2018 to 2019.4.11 → and with it to URP and Shader and Input System… this already was a task but at least everything is running fine again and successful tested on the oculus go. But the last day when I upload to the oculus store (preview channel) I got these signing errors and this drove my crazy. Until I today came back with a cooled mind and saw you entry and voila: upload successful.
I can say: Tested with Unity 2019.4.11 and the APK was successful signed with V1 for the oculus go.
Thank you for sharing your solution!
P.S.: under XR → Oculus Settings there’s a checkbox: V2 Signing, but this seem to do nothing in this case. Unity seems to overwrite always with V2 unless you use a “Custom Launcher Gradle Template”
When uploading to the Oculus platform, I get the error ERROR: Please sign your APK and then resubmit.
Apksigner verify yields:
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1```
Anyone have a sense of where the correct Quest signing settings are in Unity 2020? It worked fine in our 2019 LTS builds. (The above solution by BlueCobalt didn't work for us for Quest.)
@jj-unity — any guesses on what might have changed, or how to ensure we're signing these Quest 1+2 builds the right way? Many thanks.
[SOLUTION]: For anyone that got caught in the same issue we did, you need to make sure for Quest/Quest 2 that “minimum API level” = 23 (not higher!) or the builds will not be signed with v1 (only v2), and will be rejected by the Oculus Store uploader.
This was extra confusing because we have had builds with minimum API of 25 on the store platform for almost a year with no problem. This seems to be a recent change in the required specs? Either way, it works now.
I’m having this same problem. GLES 3 gets stripped out of the AndroidManifest during build regardless of Unity’s only target graphics API being GLES 3 AND manually including the “uses-feature” in the AndroidManifest. Did you ever figure this one out?