จะแก้ปัญหา apk ที่ลงนามเพื่อปล่อยได้อย่างไร?


114

ฉันมี apk ที่ฉันได้ลงนามและอัปโหลดไปยัง Android Market และติดตั้งไว้ในโทรศัพท์ของฉัน ฉันต้องการแก้ปัญหา apk รุ่นนี้ (โดยใช้ Eclipse) ในขณะที่มันทำงานบนโทรศัพท์ของฉัน ฉันเคยทำสิ่งนี้มาก่อน (และจำได้ว่ามันใช้เครื่องมือพัฒนา Android ตัวใดตัวหนึ่งอาจจะเป็น Dalvik Debug Monitor) แต่น่าเสียดายที่จำวิธีการทำไม่ได้และไม่สามารถค้นหาบทความออนไลน์ได้ ไม่มีใครรู้ว่าสามารถทำได้อย่างไร?

หมายเหตุ:ฉันได้ตั้งค่าandroid:debuggable="true"ในรายการและเปิดใช้งาน USB Debugging บนโทรศัพท์ของฉันแล้ว


คุณกำลังพยายามอะไรอยู่ คุณไม่รู้วิธีใช้มุมมองอุปกรณ์ใน Eclipse หรือไม่?
Sam Dozor

ตอนนี้ฉันมีมุมมองอุปกรณ์ที่แสดงใน Eclipse ฉันสามารถดูอุปกรณ์ของฉันในรายการอุปกรณ์ ฉันคลิกที่มัน แต่ปุ่ม "แก้ไขข้อบกพร่องของกระบวนการที่เลือก" ถูกปิดใช้งานแม้ว่าแอปพลิเคชันจะทำงานบนโทรศัพท์และมีโครงการต้นทางอยู่และเปิดอยู่ในพื้นที่ทำงาน ความคิดใด ๆ !
Adil Hussain

คุณคลิกชื่อแพ็กเกจสำหรับแอปของคุณหรือไม่
Sam Dozor

ใช่. ดูความคิดเห็นในคำตอบของคุณ (ขอบคุณสำหรับความช่วยเหลือ btw ชื่นชมมัน)
Adil Hussain

คำตอบ:


77

ตรวจสอบให้แน่ใจว่าandroid:debuggable="true"ได้ตั้งค่าไว้ในapplicationแท็กของไฟล์รายการของคุณจากนั้น:

  1. เสียบโทรศัพท์ของคุณเข้ากับคอมพิวเตอร์และเปิดใช้งานการดีบัก USB บนโทรศัพท์
  2. เปิด eclipse และพื้นที่ทำงานที่มีรหัสสำหรับแอปของคุณ
  3. ใน Eclipse ไปที่ Window-> Show View-> Devices
  4. ดูที่มุมมองอุปกรณ์ซึ่งตอนนี้ควรจะมองเห็นได้คุณจะเห็นอุปกรณ์ของคุณอยู่ในรายการ
  5. หากอุปกรณ์ของคุณไม่อยู่ในรายการคุณจะต้องติดตามไดรเวอร์ ADB สำหรับโทรศัพท์ของคุณก่อนดำเนินการต่อ
  6. หากคุณต้องการก้าวผ่านโค้ดให้ตั้งเบรกพอยต์ไว้ที่ใดที่หนึ่งในแอปของคุณ
  7. เปิดแอปบนโทรศัพท์ของคุณ
  8. ในมุมมองอุปกรณ์ขยายรายการสำหรับโทรศัพท์ของคุณหากยังไม่ได้ขยายและมองหาชื่อแพ็กเกจของแอปของคุณ
  9. คลิกที่ชื่อแพ็กเกจและที่มุมขวาบนของมุมมองอุปกรณ์คุณจะเห็นจุดบกพร่องสีเขียวพร้อมกับปุ่มเล็ก ๆ อื่น ๆ อีกมากมาย คลิกจุดบกพร่องสีเขียว
  10. ตอนนี้คุณควรแนบ / แก้ไขข้อบกพร่องแอปของคุณ

ฉันทำถึงขั้นตอนที่ 8 แต่ด้วยเหตุผลบางประการชื่อแพ็กเกจของแอปของฉันไม่แสดงเมื่อฉันเรียกใช้ apk ที่ลงชื่อ / ปล่อย (แปลกที่มันแสดงเมื่อฉันเรียกใช้แอป (debug apk) บนโทรศัพท์ของฉันโดยตรงจาก Eclipse) สับสน ...
Adil Hussain

2
รับทราบ! ฉันใส่android:debuggable="true"แอตทริบิวต์ในmanifestแท็กแทนที่จะเป็นapplicationแท็กในรายการ !! ไม่ดีของฉัน :( ขอบคุณ Sam_D มากสำหรับคำแนะนำของคุณจะไม่ทำโดยไม่มีคุณหรืออย่างดีที่สุดก็คงต้องใช้เวลานานมาก!
Adil Hussain

เมื่อฉันเพิ่มคำหลัก debuggable ใน build.gradle และต้องการเผยแพร่ใน play store มันแสดงข้อผิดพลาดนี้You uploaded a debuggable APK. For security reasons you need to disable debugging before it can be published in Google Play.
hasnain_ahmad

1
คำตอบนี้เป็นวิธีที่ล้าสมัย แทนการที่คุณควรปรับปรุงandroidManifest.xml build.gradleดูคำตอบอื่น ๆ
Antimonit

@hasnain_ahmad คุณสามารถหาวิธีแก้ปัญหานี้ได้หรือไม่?
Shashank Saxena

128

ฉันรู้ว่านี่เป็นคำถามเก่า แต่เป็นการอ้างอิงในอนาคต ใน Android Studio พร้อม Gradle:

buildTypes {
    release {
        debuggable true
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

เส้นdebuggable trueเป็นเคล็ดลับสำหรับฉัน

อัปเดต:

เนื่องจาก gradle 1.0 minifyEnabledแทนที่จะเป็นrunProguard. ดูที่นี่


5
โปรดทราบว่าตั้งแต่ gradle 1.0 เป็นminifyEnabledแทนrunProguard - ดูtools.android.com/tech-docs/new-build-system/migrating-to-1-0-0
m02ph3u5

ตามที่ทราบสำหรับคำตอบปัจจุบันนี้ตัวฉันเองจะหลีกเลี่ยงการส่งรุ่นที่แก้ไขข้อบกพร่องได้ไปยังร้านค้า Google Play และอาจไม่ให้คุณเหมือนในกรณีของ hasnain_ahmad ในคำตอบที่ล้าสมัยก่อนหน้านี้ การทำเพียงชั่วคราวเพื่อทดสอบปัญหาที่ดาวน์โหลดจากร้านค้าเช่นการติดตามรหัสการซื้อที่ไม่เหมาะสมจะมีความเสี่ยงน้อยกว่า คุณสามารถลองทำงานกับแทร็กเบต้า (ฉันไม่รู้ว่าสิ่งนี้อาจให้ข้อผิดพลาดเหมือนกับที่ hasnian ได้รับหรือไม่) หรือถ่ายโอน apk build รุ่นไปยังโทรศัพท์ของคุณจากคอมพิวเตอร์ของคุณเพื่อหลีกเลี่ยงปัญหาด้านความปลอดภัย (การจัดการกับกลุ่มนั้นยุ่งกว่า ).
Androidcoder

40

นอกจากวิธีของ Manuel แล้วคุณยังสามารถใช้ Manifest ได้

ใน Android Studio เสถียรคุณต้องเพิ่ม 2 บรรทัดต่อไปนี้applicationในAndroidManifestไฟล์:

    android:debuggable="true"
    tools:ignore="HardcodedDebugMode"

รายการแรกจะเปิดใช้งานการแก้ไขข้อบกพร่องของ APK ที่ลงชื่อและรายการที่สองจะป้องกันข้อผิดพลาดเวลาคอมไพล์

หลังจากนี้คุณสามารถแนบไปกับกระบวนการผ่านปุ่ม "แนบดีบักเกอร์กับกระบวนการ Android"


@jaibatrik จะต้องเป็น apk ของคุณและคุณต้องแนบดีบักเกอร์จากแหล่งที่มา หากคุณกำลังทำทั้งสองอย่างและยังใช้งานไม่ได้โปรดแบ่งปันข้อมูลเพิ่มเติมและฉันอาจลองช่วยได้
sandalone

2
ฉันได้รับ "[ข้อผิดพลาดร้ายแรง]: 7: 203: คำนำหน้า" เครื่องมือ "สำหรับแอตทริบิวต์" เครื่องมือ: ละเว้น "ที่เชื่อมโยงกับองค์ประกอบประเภท" แอปพลิเคชัน "ไม่ถูกผูกไว้" tools: Ignore = "HardcodedDebugMode" เป็น config ที่ถูกต้องหรือไม่
JD

1
ฉันต้องเพิ่มlintOptions { abortOnError false }ลงในแอพ / build.grade ของฉันแทนที่จะใช้tools:ignoreแบบนี้: android { lintOptions: { abortOnError false } }
YoshiJaeger

ฉันได้The prefix "tools" for attribute "tools:ignore" associated with an element type "application" is not bound.!
Oliver D

9

ฉันลองทำสิ่งต่อไปนี้แล้วและใช้งานได้:

release {
            debuggable true
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }

คำตอบนี้ได้รับไปแล้วในหัวข้อนี้โดย Manuel Lopera ... สามปีที่แล้ว! ดูที่นี่: stackoverflow.com/a/27181562/1071320
Adil Hussain

@AdilHussain แต่ฉันพยายามตอบว่ามันไม่ได้ผลสำหรับฉัน ดูว่ามีความแตกต่างในคำตอบของฉันที่ "minifyEnabled false" และอยู่runProguard trueในกรณีของเขา โปรดดูการเปลี่ยนแปลง
Shylendra Madda

ไม่ใช่เรื่องใหญ่ แต่คำตอบของเขามีการอัปเดตผลกระทบนี้ อย่างไรก็ตาม. ไม่ใช่เรื่องใหญ่. ขอบคุณสำหรับคำตอบ.
Adil Hussain

9

เพิ่มสิ่งต่อไปนี้ลงในแอป build.gradle ของคุณและเลือกเวอร์ชันบิวด์รุ่นที่ระบุและเรียกใช้

signingConfigs {
        config {
            keyAlias 'keyalias'
            keyPassword 'keypwd'
            storeFile file('<<KEYSTORE-PATH>>.keystore')
            storePassword 'pwd'
        }
    }
    buildTypes {
      release {
          debuggable true
          signingConfig signingConfigs.config
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

5

ในกรณีที่คุณตัดสินใจว่าจะทำการดีบักapk ของคุณซึ่งมีอยู่แล้วในตลาด แต่ไม่ได้ถูกกำหนดให้ดีบักและคุณไม่ต้องการเผยแพร่อีก ทำตามขั้นตอนด้านล่างนี้

  1. ถอดรหัส Apk ด้วยApkTool (เช่นapktool d <APK_PATH>)
  2. เปิด AndroidManifest.xml จากไฟล์ที่ถอดรหัส
  3. ตั้งค่าandroid:debuggable="true"ในapplicationแท็ก
  4. รวบรวมแหล่งที่มาที่แก้ไขด้วย ApkTool (เช่นapktool b <MODIFIED_PATH>)
  5. apk ที่แก้จุดบกพร่องได้ (ซึ่งหมายความว่าไม่ได้ลงนามไม่สามารถเผยแพร่ร้านค้าได้) คุณสามารถแก้ไขข้อบกพร่องได้ตามที่คุณต้องการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.