ฉันเพิ่งมีปัญหาเกี่ยวกับวิธี 64k ใน Unity ดังนั้นฉันจึงไม่สามารถสร้างโครงการของฉันได้ มันแสดงให้เห็นข้อ จำกัด วิธีการเกินขีด จำกัด ของวิธีการนับ 64k ดังนั้นทุกคนที่นี่สามารถช่วยฉันแก้ไขปัญหานี้ได้หรือไม่
ฉันเพิ่งมีปัญหาเกี่ยวกับวิธี 64k ใน Unity ดังนั้นฉันจึงไม่สามารถสร้างโครงการของฉันได้ มันแสดงให้เห็นข้อ จำกัด วิธีการเกินขีด จำกัด ของวิธีการนับ 64k ดังนั้นทุกคนที่นี่สามารถช่วยฉันแก้ไขปัญหานี้ได้หรือไม่
คำตอบ:
คำตอบนี้ขึ้นอยู่กับเอกสารทางการของ Android เป็นอย่างมาก (ส่วนที่ยกมาโดยเฉพาะ)
วิธีการตั้งค่าการสนับสนุน Multidex สำหรับ Unity Project
Multidex คืออะไร:
ไฟล์แอปพลิเคชัน Android (APK) มีไฟล์ bytecode ที่เรียกใช้งานได้ในรูปแบบของไฟล์ Dalvik Executable (DEX) ซึ่งมีรหัสที่คอมไพล์ซึ่งใช้ในการเรียกใช้แอปของคุณ ข้อมูลจำเพาะของปฏิบัติการ Dalvik จำกัด จำนวนวิธีการทั้งหมดที่สามารถอ้างอิงได้ภายในไฟล์ DEX เดียวที่ 65,536 รวมถึงวิธีเฟรมเวิร์ก Android, วิธีไลบรารีและวิธีการในรหัสของคุณเอง การผ่านพ้นขีด จำกัด นี้กำหนดให้คุณต้องกำหนดค่ากระบวนการสร้างแอปของคุณเพื่อสร้างไฟล์ DEX มากกว่าหนึ่งไฟล์หรือที่เรียกว่าการกำหนดค่าหลาย dex
เมื่อเราใช้ Multidex:
เมื่อเราเกินจำนวนวิธีการทั้งหมดที่สามารถอ้างอิงได้ภายในไฟล์ DEX เดียวถึง 65,536- รวมถึงวิธีเฟรมเวิร์ก Android วิธีการไลบรารีและวิธีการในรหัสของคุณเอง
หลีกเลี่ยงการ จำกัด 64K
ก่อนกำหนดค่าแอพของคุณเพื่อให้สามารถใช้การอ้างอิงวิธี 64K ขึ้นไปคุณควรดำเนินการตามขั้นตอนเพื่อลดจำนวนการอ้างอิงทั้งหมดที่เรียกโดยรหัสแอปของคุณรวมถึงวิธีที่กำหนดโดยรหัสแอปหรือไลบรารีที่รวม กลยุทธ์ต่อไปนี้สามารถช่วยคุณหลีกเลี่ยงการกดขีด จำกัด การอ้างอิง DEX:
ตรวจสอบการพึ่งพาโดยตรงและการถ่ายทอดแอพของคุณ - ตรวจสอบให้แน่ใจว่ามีการใช้งานไลบรารีขนาดใหญ่ที่คุณรวมในแอพของคุณในลักษณะที่เกินดุลจำนวนรหัสที่เพิ่มเข้ากับแอป รูปแบบการต่อต้านทั่วไปคือการรวมไลบรารีที่มีขนาดใหญ่มากเนื่องจากวิธีการอรรถประโยชน์บางอย่างมีประโยชน์ การลดการพึ่งพารหัสแอปของคุณมักจะช่วยให้คุณหลีกเลี่ยงข้อ จำกัด การอ้างอิง DEX
ลบรหัสที่ไม่ได้ใช้ด้วย ProGuard - เปิดใช้งานการย่อขนาดโค้ดเพื่อเรียกใช้ ProGuard สำหรับรุ่นบิลด์ของคุณ การเปิดใช้งานการย่อขนาดทำให้คุณไม่ได้จัดส่งรหัสที่ไม่ได้ใช้กับ APK ของคุณ
นอกเหนือจากเคล็ดลับอย่างเป็นทางการเหล่านี้เมื่อสร้างโครงการ Unity ของคุณการทำตามขั้นตอนเหล่านี้จะช่วยคุณเพิ่มเติม:
การตั้งค่าโปรเจ็กต์แอพของคุณเพื่อใช้การกำหนดค่า dex แบบมัลติต้องการให้คุณทำการแก้ไขต่อไปนี้
หาก minSdkVersion ของคุณถูกตั้งค่าเป็น 21 หรือสูงกว่าสิ่งที่คุณต้องทำคือการกำหนด
multiDexEnabled
ที่จะtrue
อยู่ในแฟ้ม build.gradle ระดับโมดูลของคุณเป็นที่แสดงที่นี่:
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
อย่างไรก็ตามหากคุณ
minSdkVersion
ตั้งค่าไว้ที่ 20 หรือต่ำกว่าคุณต้องใช้ไลบรารีการสนับสนุนแบบหลายไฟล์ดังนี้:3.1 แก้ไขไฟล์ build.gradle ระดับโมดูลเพื่อเปิดใช้งาน multidex และเพิ่มไลบรารี multidex เป็นการอ้างอิงดังแสดงที่นี่:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
3.2 ขึ้นอยู่กับว่าคุณแทนที่คลาสของแอปพลิเคชันหรือไม่ให้ทำหนึ่งในสิ่งต่อไปนี้:
- หากคุณไม่แทนที่
Application
คลาสให้แก้ไขไฟล์รายการเพื่อตั้งค่าandroid:name
ใน<application>
แท็กดังต่อไปนี้:
<?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>
- ถ้าคุณแทนที่
Application
คลาสให้เปลี่ยนเป็นขยาย MultiDexApplication (ถ้าเป็นไปได้) ดังนี้:
public class MyApplication extends MultiDexApplication { ... }
- หรือถ้าคุณลบล้างคลาสแอปพลิเคชัน แต่ไม่สามารถเปลี่ยนคลาสพื้นฐานได้คุณสามารถแทนที่เมธอด attachBaseContext () และโทร MultiDex.install (นี่) เพื่อเปิดใช้งาน multidex:
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
ตรวจสอบข้อผิดพลาดในรูปแบบปลั๊กอินอื่น ๆ อย่างชัดแจ้งและทำความสะอาดโครงการและ sysc อีกครั้ง
หากมีปัญหาการพึ่งพาใด ๆ ในโครงการของคุณเรียกใช้คำสั่งนี้ใน Android Terminal
% Gradle clean App."App name"
คัดลอกการอ้างอิงเหล่านี้ใน Application Gradle ของคุณภายใต้การอ้างอิง:
compile fileTree(include: ['*.jar'], dir: 'bin')
compile fileTree(include: ['*.jar'], dir: 'libs')
เพิ่มการลงนาม Config ในโครงการหลักของคุณ Gradle
หรือตั้งค่าโหมดการลงชื่อเป็นโหมดแก้ไขข้อบกพร่องด้วยตนเองไปที่ไฟล์ -> โครงสร้างโครงการ -> ภายใต้โมดูลคลิกที่โครงการของคุณและภายใต้ประเภทการสร้างเลือกดีบั๊ก -> เลือกลงชื่อเข้าใช้กำหนดค่า> debug
ตอนนี้ซิงค์ Gradle ของคุณและสร้างโครงการ
ฉันอยากจะแนะนำให้คุณไปที่ลิงค์นี้ซึ่งจะช่วยให้คุณสร้างเกมที่เปิดใช้งาน multidex โดยตรงผ่านความเป็นเอกภาพ
https://medium.com/@abhpatidar/solving-unity-dex-issue-538e134c8809
หมายเหตุ: สิ่งนี้จะเปิดใช้งาน multidex ในเอกภาพเท่านั้น (และควรแก้ไขปัญหา multidex) มันจะไม่แก้ไขปัญหาที่เกี่ยวข้องกับการไล่ระดับสี