Właśnie dostałem problem związany z metodą 64k w Unity, dlatego nie mogę zbudować swojego projektu. Pokazuje ograniczenie metody przekraczające limit liczby metod 64k. Czy ktoś może mi pomóc w rozwiązaniu tego problemu?
źródło
Właśnie dostałem problem związany z metodą 64k w Unity, dlatego nie mogę zbudować swojego projektu. Pokazuje ograniczenie metody przekraczające limit liczby metod 64k. Czy ktoś może mi pomóc w rozwiązaniu tego problemu?
Ta odpowiedź zależy w dużej mierze od oficjalnej dokumentacji Androida (w szczególności cytowanych części).
Jak skonfigurować obsługę Multidex dla Unity Project
Co to jest Multidex:
Pliki aplikacji na Androida (APK) zawierają wykonywalne pliki kodu bajtowego w postaci plików wykonywalnych Dalvik (DEX), które zawierają skompilowany kod użyty do uruchomienia aplikacji. Specyfikacja pliku wykonywalnego Dalvik ogranicza całkowitą liczbę metod, do których można odwoływać się w pojedynczym pliku DEX, do 65 536, w tym metod frameworku Androida, metod bibliotecznych i metod we własnym kodzie. Przekroczenie tego limitu wymaga skonfigurowania procesu kompilacji aplikacji w celu wygenerowania więcej niż jednego pliku DEX, znanego jako konfiguracja wielu dexów.
Kiedy używamy Multidex:
Kiedy przekroczymy całkowitą liczbę metod, które mogą się odnosić w jednym pliku DEX, do 65 536 - w tym metody frameworku Android, metody biblioteczne i metody we własnym kodzie.
Unikaj limitu 64 KB
Przed skonfigurowaniem aplikacji w celu umożliwienia używania odwołań do metod o wielkości 64 KB lub więcej, należy podjąć kroki w celu zmniejszenia całkowitej liczby odwołań wywoływanych przez kod aplikacji, w tym metod zdefiniowanych przez kod aplikacji lub dołączone biblioteki. Następujące strategie mogą pomóc uniknąć przekroczenia limitu odniesienia DEX:
Przejrzyj bezpośrednie i przechodnie zależności aplikacji - upewnij się, że wszelkie duże zależności biblioteki zawarte w aplikacji są używane w sposób, który przewyższa ilość kodu dodawanego do aplikacji. Powszechnym anty-wzorcem jest dołączanie bardzo dużej biblioteki, ponieważ użyteczne było kilka metod narzędziowych. Zmniejszenie zależności kodu aplikacji może często pomóc w uniknięciu limitu odniesienia DEX.
Usuń nieużywany kod za pomocą ProGuard - Włącz zmniejszanie kodu, aby uruchomić ProGuard dla kompilacji wersji. Włączenie zmniejszania zapewnia, że nie wysyłasz nieużywanego kodu z pakietami APK.
Oprócz tych oficjalnych wskazówek, budując projekt Unity, następujące kroki pomogą ci dalej:
Skonfigurowanie projektu aplikacji do korzystania z konfiguracji multi dex wymaga dokonania następujących modyfikacji.
Jeśli minSdkVersion jest ustawiony na 21 lub wyższy, wszystko co musisz zrobić, to ustawić
multiDexEnabled
, abytrue
w pliku build.gradle moduł poziomu, jak pokazano poniżej:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
Jeśli jednak masz
minSdkVersion
ustawioną wartość 20 lub niższą, musisz użyć biblioteki obsługi multidex w następujący sposób:3.1 Zmodyfikuj plik build.gradle na poziomie modułu, aby włączyć multidex i dodaj bibliotekę multidex jako zależność, jak pokazano tutaj:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2 W zależności od tego, czy przesłonisz klasę aplikacji, wykonaj jedną z następujących czynności:
- Jeśli nie zastąpisz
Application
klasy, edytuj plik manifestu, aby ustawić goandroid:name
w<application>
znaczniku w następujący sposób:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<application
android:name="android.support.multidex.MultiDexApplication" >
...
</application>
</manifest>
- Jeśli przesłonisz
Application
klasę, zmień ją, aby rozszerzyć MultiDexApplication (jeśli to możliwe) w następujący sposób:
public class MyApplication extends MultiDexApplication { ... }
- Lub jeśli przesłonisz klasę aplikacji, ale nie można zmienić klasy podstawowej, możesz zamiast tego zastąpić metodę attachBaseContext () i wywołać MultiDex.install (this), aby włączyć multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
Sprawdź błąd z manifestu innych wtyczek i wyczyść projekt. Ponownie sysc.
Jeśli w projekcie występuje jakikolwiek problem z zależnością, uruchom to polecenie w terminalu Android
% Gradle clean App."App name"
Skopiuj te zależności do klasy aplikacji, w zależnościach:
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
Dodaj signingConfig w swoich głównych projektach Gradle.
Lub ustaw tryb podpisywania w tryb debugowania ręcznie, przejdź do Plik -> Struktura projektu -> W modułach Kliknij swój projekt iw obszarze Typy kompilacji wybierz Debuguj -> wybierz Konfiguracja podpisywania-> debuguj
Teraz zsynchronizuj Gradle i skompiluj projekt.
Poleciłbym przejść przez ten link, który pomoże ci tworzyć gry obsługujące wiele filmów bezpośrednio przez jedność.
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
Uwaga: To włączy multideks tylko w samej jedności (i powinno rozwiązać problemy z multideksami). Nie rozwiąże problemów związanych z gradem.
źródło