Remove Wave XR permissions from AndroidManifest in Unity - unity3d

I am building onto both Vive and Oculus platforms in my Unity project. I need the VIVE Wave XR plugin in my packages to build to Vive. However, this means when I build to Oculus, I have Vive permissions in the AndroidManifest within my APK so I am blocked from uploading it by Oculus. What is the best way to remove them?
Tried solutions:
I can use Android Studio to 'Analyze APK...' then edit it manually but this is not suitable for me as I need the process to be automated.
I can use a pre and post build processor to remove and then replace the offending file from the Vive package so that when Gradle merges all of the manifests it will not detect the Vive one. This sort of works but is rather hacky and the post-processor doesn't run if the build fails, leaving the offending file in the incorrect location.
I have looked into using a 'Custom Main Manifest' in (Project Settings -> Player -> Publishing Settings -> Build) but this only seems to add to the final manifest rather than remove from. There are other options to change Gradle templates in the Publishing Settings but I don't understand how to use them. Would any of those be helpful?

I found the solution here: https://developer.android.com/studio/build/manage-manifests
Specifically this section

Related

Unity Ads with Mediation causes Android builds to fail

When I install "Advertisement with Mediation (ver. 1.5.0)" in a project, I can no longer build for Android.
This applies to new, empty projects as well as legacy projects.
The following error message appears:
“…It looks like there are a few files missing from Assets\Plugins\Android. You can fix this by resolving dependencies again…”
When I click Resolve, the build process starts right away and hangs. I have to force quit Unity. If I don’t click Resolve, the build hangs up on building the first scene in the project and I have to force quit.
Nothing at all happens via Assets -> Mobile Dependency Resolver -> Android Resolver -> Force Resolver.
I am using Unity 2021.3.13.
Does anyone know what is occurring and how to fix it?
I attempted to resolve as stated in the pop up and it causes Unity to hang. I attempted to resolve beforehand and it appears to do nothing.
I attempted to delete my library folder and it had no effect on reimport.
I attempted to export the project, and the project hangs.
I have a similar issue with both Unity Ads with Mediation and the newer Ironsource Ads Mediation(com.unity.services.levelplay). When I run Assets -> Mobile Dependency Resolver -> Android Resolver -> Resolve I get the following error on the console:
Win32Exception: ApplicationName='C:\Users\D\Documents\app\Test\Temp\PlayServicesResolverGradle\gradlew.bat', CommandLine='--daemon -b "C:\Users\D\Documents\app\Test\Temp\PlayServicesResolverGradle\PlayServicesResolver.scripts.download_artifacts.gradle" "-PANDROID_HOME=C:/Program Files/Unity/Hub/Editor/2021.3.14f1/Editor/Data/PlaybackEngines/AndroidPlayer\SDK" "-PTARGET_DIR=C:\Users\D\Documents\app\Test\Assets\Plugins\Android" "-PMAVEN_REPOS=https://android-sdk.is.com/;https://maven.google.com/" "-PPACKAGES_TO_COPY=com.ironsource.sdk:mediationsdk:7.2.5;com.google.android.gms:play-services-ads-identifier:17.0.0;com.google.android.gms:play-services-basement:17.2.1" "-PUSE_JETIFIER=0" "-PDATA_BINDING_VERSION=4.0.1"', CurrentDirectory='C:\Users\D\Documents\app\Test\Temp\PlayServicesResolverGradle', Native error= The system cannot find the file specified.
The file gradlew.bat doesn't exist. I found a gradlew.bat here: https://github.com/googlesamples/unity-jar-resolver. I copied the file into: C:\Users\D\Documents\app\Test\Temp\PlayServicesResolverGradle and then I could run the the resolver from Unity.
But it leads to this questions: Why does Unity MobileDependencyResolver not create gradlew.bat? It does create gradlew, the gradle start up script for Unix. Why the Unix script and not the Windows script?
Advertisement with Mediation is not being properly supported by Unity anymore post IronSource merger. They suggest using Ironsource’s mediation platform. We use AdMob given I already know how to deal with its obvious bugs.

HoloLens2 Application made with unity throws Exception "Could not create a device for ''Hand - Right (XRInputV1)"

Since I updated my HoloLens2 Unity Project to Unity 2020.3 my deployed HoloLens2-Application (in Unity Editor they never happen) always throws the following Exceptions :
Could not create a device for 'Hand - Right (XRInputV1)'
(Exception: System.ArgumentException: Expected control positionAccuracy to be of type 'AxisControl' but is of type 'IntegerControl' instead;)
at UnityEngine.InputSystem.InputControll
Could not create a device for 'Hand - Left (XRInputV1)'
(Exception: System.ArgumentException: Expected control positionAccuracy to be of type 'AxisControl' but is of type 'IntegerControl' instead;)
at UnityEngine.InputSystem.InputControll
Does anybody know, how to get rid of those Exceptions?
I am using the MixedRealityToolkit 2.7.3 HoloLens2 default Configuration and noticed this problem at Unity Versions 2020.3.8, 2020.3.22 and 2020.3.26.
Firstly, please double check the MRTK Input profile setting. You can easily configure the project in Unity Menu: Mixed Reality > Toolkit > Utilities > Configure Project for MRTK
Then, please check out your XR setting, Since you are using Unity 2020.x, you can use OpenXR plugin, see Choosing an XR configuration.
If the issue is still there, this may also be caused by your hand control code. Here is discussion with the same exception as yours, see WikkidEdd's reply in this github issue. In their case, they need to use IntegerControl instead of AxisControl.
OK I fixed the Error-Problem by updating to OpenXR plugin. It fixed basically every problem I had so far within my project. By coincidence I came across the plugin as a tarball file while downloading this sample-project from Github.
I´d wish to find a place where I can get all the plugins which can be installed via Microsoft FeatureTool on one place as manual download! Maybe someday it will exist. :)

LGSVL AssetBundles files are zero-length

I have following general setup for LGSVL simulator:
Windows 10
Unity 2019.3.15.f1
2020.06
In the options I selected only Windows support.
The issue is that after doing WebUI/main build the AssetBundles files, like environment files or vehicle file have zero length and thus cannot be used by the simulator.
I haven't done anything special to assets after cloning Git repos, but I followed all steps for building the simulator as per instructions.
Do I miss some preparation steps with assets?
Do I have to prepare/build them somehow separately?
My mistake was I selected Windows support only.
After reinstalling proper Unity version with Linux Mono enabled, it worked like a charm.

Gradle Android SDK integration with Unity [duplicate]

My project uses these plugins:
OneSignal
GooglePlayServices
Adjust
Google Analytics
Unity IAP
Facebook SDK
Those plugins are used in almost every project.
But I am over field references count
This is my .aar file list
What should I do to decrease reference count?
So What should i do to decrease reference count ?
You have so many plugins with many functions/fields. There is a limit when building this from Unity's Editor and you have reached that limit.
To decrease reference count, you have to delete some these plugins but I am sure that you need them and deletion may not be the appropriate solution in this case.
The only way to actually get around this and build for Android at this moment is to export the Project as Android Project then build it with Android Studio. This removes the reference limit imposed by Unity's Editor.
EDIT
I forgot to mention that you have to enable multidex after exporting it out. Since many people go through this problem daily, I decided to add a thorough instruction on how to fix this problem by exporting it out and also how to fix it without exporting it.
FIX BY EXPORTING THE PROJECT
1A.Export the Unity Project as Android Project.
1B.Import into Android Studio:
If you get grade error when importing into Android Studio like the one below:
Error:org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection
cannot be cast to
org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
In the "dependencies" block which is in the "buildscript" block in the build.gradle file, change:
classpath 'com.android.tools.build.gradle.2.1.0'
to
classpath 'com.android.tools.build:gradle:2.2.3'
If you export the Project and still get the-same error, you need to manually enable multidex. Below is a simplified step to follow from Google's doc that will be shown to you in the error:
2.Add android:name="android.support.multidex.MultiDexApplication" > to the
application tag in the AndroidManifest.xml file.
3.Add compile 'com.android.support:multidex:1.0.1' to the "dependencies" block in the build.gradle file.
4.Add multiDexEnabled true to the "defaultConfig" block which is in the "android" block in the build.gradle file.
Build APK and see if it works. If the reference count error is gone, stop here.
5.Getting a GC overhead exception like the one below?
java.lang.OutOfMemoryError: GC overhead limit exceeded
Increase the heap size that will be used when performing dex operation. From this solution, add the following to the "android" block in the build.gradle file:
dexOptions {
javaMaxHeapSize "4g"
}
FIX WITHOUT EXPORTING THE PROJECT
Must have Unity 5.5 and above to do this:
1.Go to <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\GradleTemplates, Copy the mainTemplate.gradle file to your <ProjectName>Assets\Plugins\Android folder.
2.Go to <UnityInstallationDirecory>\Editor\Data\PlaybackEngines\AndroidPlayer\Apk, Copy the AndroidManifest.xml file to your <ProjectName>Assets\Plugins\Android
3.Open both the mainTemplate.gradle and AndroidManifest.xml file you just copied with Visual Studio then do the modification from the FIX BY EXPORTING THE PROJECT instruction above. Skip/Ignore step #1A and #1B. Just do steps from #2 to #5. That's it.
This is what the final mainTemplate.gradle should look like and this is what the final AndroidManifest.xml should look like. This is only for reference purposes. I suggest you don't use mine but instead follow the copy steps above to create yours because future Unity versions can come with different files. You want to make sure you use the latest one or you may have problems building it.
4.Build APK and see if it works:
--
If the reference count error is gone, stop here:
5.Getting an error like the one below?
Build Failure Release builds have to be signed when using Gradle
Just sign the apk from the Publishing Settings in the Build Settings. You can create new keystore or use an existing one.
6.Another error like below?
Error: Avoid hardcoding the debug mode; leaving it out allows debug
and release builds to automatically assign one [HardcodedDebugMode]
Remove android:debuggable="true"> from the AndroidManifest.xml file.
If this non exporting solution did not work for you then you have to
use the exporting solution.
IMO, The accepted answer isn't correct (or only partly correct). Exporting an Android studio will not "magically" fix this issue. Also, from my experience, the exported Android studio project does not always build right away and you have to fix lots of things before you can actually build it.
You are using lots of plugins and so you faced an Android limitation of not being able to reference more than 64k methods.
There are a few things you can try to solve this:
Delete some of these plugins, if possible (as already suggested in the accepted answer).
Use multidex. In the past this was only possible by exporting the project to Android studio and building it there. Starting with Unity 5.5 you can build your project using Gradle right from Unity. This means you can create a custom gradle file that configures your game to use Multidex. This doesn't reduce the method ref count, but it works around it by splitting your native Java count into multiple dex files.
Use ProGuard - since you can use Gradle from Unity, you can also define ProGuard to run and remove any code that is not used.

Building Unity3d Project reloads SteamVR plugin

I'm Building my Unity project with a custom script.
The crucial line is the following
BuildPipeline.BuildPlayer(new string[] {}, path + filename + ".exe",
BuildTarget.StandaloneWindows,
BuildOptions.None);
If I execute this, Unity will reload the Scene in a way that the SteamVR plugin is reinitialized.
Effectively this Plugin asks me to accept some settings with a dialog every time I build the project.
When I build the Project using the standart Build and Run option (ctrl+B) this does not happen.
Is there a way to prevent this reloading from happening with the BuildPipeline ?