Archive Date: October 26, 2026
Status: Read-only / Unsupported
EDM4U will be archived on October 26, 2026, in favor of the newly announced External Dependency Manager (EDM) from Unity.
Over the years, EDM4U (formerly the Unity Jar Resolver) has served as a convenient way for managing Android and iOS native dependency linking in Unity projects. To improve the developer experience and bring dependency management natively into the engine, we have collaborated closely with Unity. Unity has now released an officially supported fork of EDM4U, which uses the same xml format and workflows developers have previously been used to.
After the archive date on October 26, 2026, this repository will become read-only. While the original code and previous releases will remain accessible in an archived state, there will be no future updates, bug fixes, or new feature development from Google.
We strongly recommend transitioning to Unity's officially supported EDM package. Because Unity's package is built directly on top of the original EDM4U foundation. The transition is designed to be straightforward and remains fully compatible with your existing XML dependency configurations.
You can evaluate and install Unity's External Dependency Manager directly via the Unity Package Manager (UPM) for Unity 2022.3 and later. For installation instructions and migration steps, please refer to the Unity External Dependency Manager documentation.
The External Dependency Manager for Unity (EDM4U) (formerly Play Services Resolver/Jar Resolver) is intended to be used by any Unity package or user that requires:
Android specific libraries (e.g AARs)
iOS CocoaPods, Swift Packages
Version management of transitive dependencies
Management of Package Manager (PM) Registries
If you want to add and use iOS/Android dependencies directly in your project, then you should to install EDM4U in your project.
If you are a package user and the plugin you are using depends on EDM4U, and the package does not include EDM4U as a package dependency already, then you should to install EDM4U in your project.
If you are a UPM package maintainer and your package requires EDM4U, then you
should add EDM4U as a
package dependency
in your package manifest (package.json):
{
"dependencies": {
"com.google.external-dependency-manager": "1.2.178"
}
}
You should still install EDM4U to test out the package during development.
If you are a legacy .unitypackage package maintainer and your package requires
EDM4U, please ask the user to install EDM4U separately. You should install EDM4U
to test out the package during development.
Updated releases are available on GitHub
The Android Resolver and iOS Resolver components of the plugin only work with Unity version 4.6.8 or higher.
The Version Handler component only works with Unity 5.x or higher as it
depends upon the PluginImporter UnityEditor API.
The Package Manager Resolver component only works with Unity 2018.4 or above, when scoped registry support was added to the Package Manager.
Check out troubleshooting if you need help.
EDM4U is available on OpenUPM:
openupm add com.google.external-dependency-manager
EDM4U is available both in UPM and legacy .unitypackage formats on
Google APIs for Unity.
You may install the UPM version (.tgz) as a local UPM package.
You can also install EDM4U in your project as a .unitypackage. This is not
recommended due to potential conflicts.
For historical reasons, a package maintainer may choose to embed EDM4U in their
package for ease of installation. This will create a conflict when you try to
install EDM4U with the steps above, or with another package with embedded EDM4U.
If your project imported a .unitypackage that has a copy of EDM4U embedded in
it, you may safely delete it from your Assets folder. If your project depends on
another UPM package with EDM4U, please reach out to the package maintainer and
ask them to replace it with a dependency to this package. In the meantime, you
can workaround the issue by copying the package to your Packages folder (to
create an
embedded package)
and perform the steps yourself to avoid a dependency conflict.
To start adding dependencies to your project, copy and rename the SampleDependencies.xml file into your plugin and add the dependencies your project requires.
The XML file needs to be under an Editor directory and match the name
*Dependencies.xml. For example, MyPlugin/Editor/MyPluginDependencies.xml.
The Android Resolver copies specified dependencies from local or remote Maven repositories into the Unity project when a user selects Android as the build target in the Unity editor.
For example, to add the Google Play Games library
(com.google.android.gms:play-services-games package) at version 9.8.0 to the
set of a plugin's Android dependencies:
<dependencies>
<androidPackages>
<androidPackage spec="com.google.android.gms:play-services-games:9.8.0">
<androidSdkPackageIds>
<androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
</androidSdkPackageIds>
</androidPackage>
</androidPackages>
</dependencies>
The version specification (last component) supports:
Specific versions e.g 9.8.0
Partial matches e.g 9.8.+ would match 9.8.0, 9.8.1 etc. choosing the most
recent version
Latest version using LATEST or +. We do not recommend using this
unless you're 100% sure the library you depend upon will not break your
Unity plugin in future
The above example specifies the dependency as a component of the Android SDK
manager such that the Android SDK manager will be executed to install the
package if it's not found. If your Android dependency is located on Maven
central it's possible to specify the package simply using the androidPackage
element:
<dependencies>
<androidPackages>
<androidPackage spec="com.google.api-client:google-api-client-android:1.22.0" />
</androidPackages>
</dependencies>
By default the Android Resolver automatically monitors the dependencies you have
specified and the Plugins/Android folder of your Unity project. The resolution
process runs when the specified dependencies are not present in your project.
The auto-resolution process can be disabled via the Assets > External
Dependency Manager > Android Resolver > Settings menu.
Manual resolution can be performed using the following menu options:
Assets > External Dependency Manager > Android Resolver > Resolve
Assets > External Dependency Manager > Android Resolver > Force Resolve
Resolved packages are tracked via asset labels by the Android Resolver. They can
easily be deleted using the Assets > External Dependency Manager > Android
Resolver > Delete Resolved Libraries menu item.
Some AAR files (for example play-services-measurement) contain variables that
are processed by the Android Gradle plugin. Unfortunately, Unity does not
perform the same processing when using Unity's Internal Build System, so the
Android Resolver plugin handles known cases of this variable substitution by
exploding the AAR into a folder and replacing ${applicationId} with the
bundleID.
Disabling AAR explosion and therefore Android manifest processing can be done
via the Assets > External Dependency Manager > Android Resolver > Settings
menu. You may want to disable explosion of AARs if you're exporting a project to
be built with Gradle/Android Studio.
Some AAR files contain native libraries (.so files) for each ABI supported by Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does not strip native libraries for unused ABIs. To strip unused ABIs, the Android Resolver plugin explodes an AAR into a folder and removes unused ABIs to reduce the built APK size. Furthermore, if native libraries are not stripped from an APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a libraries) Android may attempt to load the wrong library for the current runtime ABI completely breaking your plugin when targeting some architectures.
AAR explosion and therefore ABI stripping can be disabled via the Assets >
External Dependency Manager > Android Resolver > Settings menu. You may want to
disable explosion of AARs if you're exporting a project to be built with
Gradle/Android Studio.
By default the Android Resolver will use Gradle to download dependencies prior to integrating them into a Unity project. This works with Unity's internal build system and Gradle/Android Studio project export.
It's possible to change the resolution strategy via the
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|