app-release-unsigned.apk ไม่ได้ลงชื่อ


201

ฉันดาวน์โหลดไฟล์ zip ของแอพ Android บน github และฉันพยายามเรียกใช้ แต่ฉันได้รับข้อความโต้ตอบกับข้อความนี้

app-release-unsigned.apk is not signed. Please configure the signing information for the selected flavor using the Project Structure dialog.

ฉันใช้ Android Studio ฉันควรจะทำอย่างไร?

คำตอบ:


438

หากใครต้องการที่จะแก้ปัญหาการสร้างการเปิดตัวโดยใช้ Android Studio ทำตามขั้นตอนเหล่านี้:

  1. ตั้งค่าตัวแปรบิวด์เป็นโหมดรีลีส

ป้อนคำอธิบายรูปภาพที่นี่

  1. คลิกขวาที่แอปในบานหน้าต่างนำทางซ้ายคลิกเปิดโมดูลการตั้งค่า

  2. ไปที่แท็บการลงชื่อ เพิ่มการกำหนดค่าการเซ็นชื่อและกรอกข้อมูล เลือกพวงกุญแจของคุณเช่นกัน

ป้อนคำอธิบายรูปภาพที่นี่

  1. ไปที่แท็บBuild Type เลือกโหมดการปล่อยและการตั้งค่า:

-Debuggable ไปจริง

-Signing Config ไปที่การตั้งค่า (สิ่งที่คุณเพิ่งสร้างขึ้น)

ป้อนคำอธิบายรูปภาพที่นี่

ซิงค์เกรดของคุณ สนุก!


3
เราควรตั้งให้ Debuggable เป็นเท็จเมื่อสร้าง APK สำหรับการผลิตจริงหรือไม่ หรือสตูดิโอจะทำเอง
Ishaan Garg

7
@IshaanGarg คุณควรตั้งค่า debuggable เป็นเท็จในขณะที่ปล่อย apk
NightFury

1
คุณจะคิดว่ามันจะเริ่มต้นกับคนแรกที่สร้างขึ้นสงสัยว่าทำไมมันไม่ ... บางทีมันอาจจะไม่ดีสำหรับบางคนที่จะลงนามแพคเกจที่พวกเขาไม่ต้องการลงชื่อ ... แต่ขอบคุณคนที่ฉันลืมตั้งประเภทการสร้าง " การลงชื่อเข้าใช้งานการกำหนดค่า "และจนกระทั่งภาพหน้าจอฉันไม่จำ
CrandellWS

14
มีไม่จำเป็นต้องที่จะตั้งแก้ปัญหาได้จะเป็นจริง (ยกเว้นในกรณีที่ตั้งใจจริงๆ)
computingfreak

4
คุณควรระวังแม้ว่าหลังจากตั้งค่าคอนฟิกเป็นประเภทบิลด์แล้วข้อมูลคีย์ทั้งหมดของคุณ (รวมถึงรหัสผ่าน) จะปรากฏในไฟล์ gradle ...
Jacob.B

95

ตรวจสอบให้แน่ใจว่าชุดตัวเลือกการสร้างถูกตั้งค่าเป็นดีบั๊ก (และไม่ปล่อย ) ใน Android Studio (ตรวจสอบแผงการสร้างชุดตัวเลือก)

หากตั้งค่าเป็นดีบั๊กมันควรลงชื่อแอปโดยอัตโนมัติด้วยที่เก็บคีย์การดีบักที่สร้างขึ้นอัตโนมัติโดยไม่ต้องแก้ไขสคริปต์บิลด์

อย่างไรก็ตามคุณจะต้องสร้างและกำหนดค่าที่เก็บคีย์เฉพาะสำหรับการเปิดตัว

เอกสารอย่างเป็นทางการซึ่งครอบคลุมโหมดแก้ไขข้อบกพร่องและการเปิดตัว: https://developer.android.com/tools/publishing/app-signing.html


54

เซ็นชื่อบิลด์ของคุณโดยใช้สคริปต์ build.gradle DSL ดังนี้:

    android {
    signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androidotherkey"
            keyPassword "android"
        }
    }

    buildTypes {
        bar {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.debug
        }
        foo {
            debuggable false
            jniDebugBuild false
            signingConfig signingConfigs.myConfig
        }
    }
}

หากคุณต้องการทำความเข้าใจระบบ Gradle build ที่เกี่ยวข้องกับ Android Studio ให้มากขึ้นเพียงไปที่:

คู่มือผู้ใช้ Gradle Plugin


แต่ทำไมฉันต้องทำอย่างนั้น? ในคำแนะนำพวกเขาพูดว่า "โดยค่าเริ่มต้นมีการกำหนดค่าการดีบักที่ตั้งค่าให้ใช้ที่เก็บคีย์การดีบักด้วยรหัสผ่านที่รู้จักและรหัสเริ่มต้นที่มีรหัสผ่านที่รู้จัก" ฉันไม่มีปัญหากับแอปพลิเคชันอื่น
andrew

หากรหัสผ่านของคุณใช้ได้และ debug.keystore สามารถเข้าถึงได้ฉันไม่รู้ ปัญหาปกติที่ฉันเคยเห็นเมื่อก่อนนี้คือการอนุญาตไฟล์หรือการอนุญาตไดเรกทอรี บางทีโครงการที่คุณดาวน์โหลดกำลังเก็บไฟล์ในเครื่อง Android Studio ซึ่งชี้ไปยังที่เก็บคีย์ดีบักอื่น ๆ กว่าของคุณ ในกรณีใด ๆ บันทึกการไล่ระดับสีของคุณจะต้องแสดงข้อผิดพลาดของเส้นทางโปรดรวมบันทึกนั้นเพื่อขอความช่วยเหลือเพิ่มเติม
Martin Revert

อืมไม่ได้ผลสำหรับฉันเช่นกัน ไม่มีข้อผิดพลาดในการไล่ระดับสี แต่ยังคงได้รับข้อผิดพลาดในการเซ็นชื่อ (และชี้ไปที่ไฟล์ของฉัน)
Brian Knoblauch

สวัสดีไบรอัน! คุณลองลบ debug.keystore ของคุณได้ไหม จากนั้นเริ่มโครงการจำลองใหม่และต้องสร้างที่เก็บคีย์ใหม่ หลังจากนั้นเปิดโครงการจริงของคุณใหม่แล้วลอง มันเป็นสิ่งเดียวที่ฉันสามารถแนะนำได้หากมีสิ่งใดที่แสดงความคิดเห็นก่อนที่จะล้มเหลว
Martin Revert

1
ไม่ได้debug.keystoreอยู่ใน.androidโฟลเดอร์ใช่ไหม คุณอาจต้องการให้เส้นทางแบบเต็มเว้นแต่ว่าคุณได้ย้ายเข้าไปในโครงการของคุณ
Gokhan Arik

36

ฉันสามารถดีบัก APK ที่ลงชื่อได้สำเร็จให้ทำตามขั้นตอนนี้: -

  1. เลือกรุ่น "release" ในแถบเครื่องมือ "Build Variant"
  2. ในBuild.gradleสำหรับโมดูลที่กำหนดไว้debuggable trueสำหรับชนิดบิลด์
  3. ไปที่ไฟล์ -> โครงสร้างโครงการ -> ภายใต้แท็บการเซ็นชื่อกรอกข้อมูลทั้งหมด -> ภายใต้แท็บรสชาติ -> เลือกการกำหนดค่าการเซ็นชื่อที่คุณเพิ่งสร้าง
  4. กำหนดจุดพัก
  5. เรียกใช้แอปพลิเคชันในโหมดแก้ไขข้อบกพร่อง

ไม่ทำงานสำหรับฉัน ฉันได้ตั้งค่า debuggable เป็นจริงสำหรับชุดตัวแปร แต่ยังจำเป็นต้องลงชื่อ apk ก่อนสร้าง
Nishant Tanwar

20

หากใครต้องการตรวจแก้จุดบกพร่องและปล่อยรุ่นบิลด์แยกต่างหากโดยใช้ Android Studio 3.5 ให้ทำตามขั้นตอนด้านล่าง: 1. ตั้งค่าตัวแปรรุ่นบิลด์เป็นโหมดเผยแพร่

สร้างตัวแปร

  1. ไปที่ไฟล์ >> โครงสร้างโครงการ
  2. เลือก Modules จากนั้น Signing Config
  3. คลิกที่ไอคอนเครื่องหมายบวกใต้การกำหนดค่าการลงชื่อ

การลงนามการกำหนดค่า

  1. เลือกส่วนของการวางจำหน่ายและระบุข้อมูลแอพของคุณจากนั้นนำไปใช้และตกลง

เข้าสู่ระบบ

  1. ไปที่ระดับแอปของคุณbuild.gradleและเปลี่ยนbuildTypesส่วน "ปล่อย" เช่นภาพหน้าจอด้านล่าง

สุดท้าย

จากนั้นเรียกใช้โครงการของคุณ Happy Coding


คุณได้รับไฟล์. jks จากที่ใด
Marc Alexander

@MarcAlexander ที่นี่ไม่มีรหัส. jks ที่สร้างภาพหน้าจอ คุณสามารถสร้างไฟล์. jks จากโปรแกรมแก้ไขสตูดิโอ Android
Shohel Rana

14

signConfigs ควรอยู่ก่อน buildTypes

signingConfigs {
        debug {
            storeFile file("debug.keystore")
        }

        myConfig {
            storeFile file("other.keystore")
            storePassword "android"
            keyAlias "androidotherkey"
            keyPassword "android"
        }
    }

    buildTypes {
        bar {
            debuggable true
            jniDebugBuild true
            signingConfig signingConfigs.debug
        }
        foo {
            debuggable false
            jniDebugBuild false
            signingConfig signingConfigs.myConfig
        }
    }

12

หากคุณต้องการเรียกใช้แอปในโหมดแก้ไขข้อบกพร่อง

1) ดูที่ด้านล่างซ้ายด้านบนรายการโปรดมีBuild Variants

2) คลิกที่ Build Variants คลิกที่ปล่อยและเลือกการแก้ปัญหา

มันใช้งานได้สมบูรณ์แบบ !!!


10

โครงการแอพที่คุณดาวน์โหลดอาจมีข้อมูลที่เซ็นชื่อในไฟล์ build.gradle หากคุณเห็นรหัสเช่นนี้:

buildTypes {
    debug {
        signingConfig signingConfigs.release
    }
    release {
        signingConfig signingConfigs.release
    }
}

คุณสามารถลบและลองอีกครั้ง


9

สำหรับ gradot Kotlin dsl

signingConfigs {
    create("releaseConfig") {
        storeFile = file("your keystore file path")
        storePassword = "storePassword"
        keyAlias = "keyAlias"
        keyPassword = "keyPassword"
    }
}
buildTypes {
    getByName("release") {
        signingConfig = signingConfigs.getByName("releaseConfig")
        isMinifyEnabled = true
        isShrinkResources = true
        proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
    }
}

7

ปัญหาของฉันได้รับการแก้ไขโดยการเปลี่ยนชุดตัวสร้างตามที่Stéphaneแนะนำถ้าใครก็ตามที่พยายามหา "ตัวสร้างสายพันธุ์" ดังที่ฉันทำที่นี่เป็นภาพหน้าจอที่คุณสามารถหาได้

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันกำลังประสบปัญหาหลังจากเปลี่ยนรุ่นตัวเลือกจาก Debug เป็น Release
Parth Patel

6

เพื่อเหตุผลด้านความปลอดภัยคุณไม่สามารถติดตั้ง apk ที่ไม่ได้ลงชื่อบน Android ดังนั้นหากคุณมี apk ที่ไม่ได้ลงชื่อ: คุณต้องลงชื่อ นี่คือวิธีการ: ลิงก์

โปรดทราบว่าคุณสามารถลงชื่อ apk ด้วยใบรับรองที่ลงนามเองได้

ทางเลือกสามารถเป็นได้ทั้ง:

  • เพื่อดาวน์โหลด apk ที่ลงชื่อถ้ามี
  • เพื่อดาวน์โหลดแหล่งข้อมูลรวบรวม (กับ Android-Studio หรือ gradle หรือ ... ) มันจะผลิตหลาย apks และหนึ่งในนั้นจะได้รับการลงนามด้วย debug-key ของคุณ (และดังนั้นคุณจะสามารถติดตั้งได้)

1
ฉันไม่แน่ใจว่าฉันเข้าใจ ฉันดาวน์โหลด zip ของรหัสของแอพและฉันพยายามรวบรวมมันกับ Android Studio ...
andrew

ดังนั้นคุณต้องรวบรวมรุ่นที่เซ็นชื่อ โดยทั่วไปแล้วรุ่นที่เซ็นชื่อจะถูกสร้างในเวลาเดียวกันและอยู่ในไดเรกทอรีเดียวกันกับรุ่นที่ไม่ได้ลงชื่อ
ben75

ถ้าฉันสร้าง apk ที่ลงชื่อแล้วมันใช้งานได้ แต่ฉันทำไม่ได้ทุกครั้งที่ต้องทดสอบแอพ ฉันขาดอะไรที่นี่ฉันแค่อยากลองใช้แอพเหมือนกับที่ฉันทำกับแอพพลิเคชั่นของตัวเอง ...
แอนดรูว์


2

ฉันจะแก้ไขสิ่งนี้ได้อย่างไร

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากคุณได้ตั้งค่าชุดตัวสร้างของคุณเป็นโหมดการเปิดใช้งาน ตั้งเป็นโหมดการสร้างและเรียกใช้โครงการอีกครั้ง

หากคุณต้องการที่จะทำงานในโหมดปล่อยให้สร้าง apk ที่ลงชื่อแล้วในแบบที่เราทำตามปกติเมื่อปล่อยแอพ


ฉันมีตัวเลือก "debug" และ "release" เท่านั้นหรือ
Steve Smith

0

โซลูชันของฉันคือเปลี่ยนชื่อการกำหนดค่าการลงชื่อของฉันจาก "การกำหนดค่าเริ่มต้น" เป็น "การแก้ปัญหา" ในการตรวจสอบฉันเปลี่ยนเป็นชื่อสุ่มอื่นและได้รับข้อผิดพลาดอีกครั้งจากนั้นเปลี่ยนกลับเป็น "ดีบั๊ก" และข้อผิดพลาดนั้นหายไป ดังนั้นในขณะที่ดูเหมือนว่าประดิษฐ์และฉันมักจะไม่เชื่อว่านี่คือเรื่องราวทั้งหมดลองใช้วิธีแก้ปัญหานี้


0

ฉันยังปรากฏปัญหานี้และรหัสของฉันด้านล่าง

        storeFile file(properties.getProperty("filepath"))
        storePassword properties.getProperty("keypassword")
        keyAlias properties.getProperty("keyAlias")
        keyPassword properties.getProperty("keypassword")

เหตุผลคือข้อผิดพลาดชื่อคุณสมบัติควรเป็น keyPassword ไม่ใช่ keypassword


0

สิ่งที่ได้ผลในที่สุดสำหรับฉันและฉันก็ไม่รู้ว่าทำไมคือ:

  • ไป LastPass (บริการที่ฉันใช้เพื่อเก็บรหัสผ่านทั้งหมดของฉัน)
  • เลือกรหัสผ่านของฉันโดยวางเคอร์เซอร์ไว้ด้านบนของรหัสผ่านและดับเบิลคลิก
  • เมื่อเลือกแล้วฉันกด cmd C เพื่อคัดลอก
  • ไปศึกษา Android และ cmd V เพื่อวาง

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

มันแปลก แต่ใช้งานได้โดยดับเบิลคลิกที่ด้านบนของรหัสผ่านเพื่อคัดลอก

นอกจากนี้ฉันใช้การตั้งค่าโมดูลแบบเปิด> การลงชื่อ ... วิธีการที่อธิบายโดย @NightFury ในโพสต์นี้


0

การเพิ่มบรรทัดด้านล่างของรหัสในไฟล์ build.gradel ทำงานสำหรับฉันเพิ่มภายใต้ buildTypes บล็อกด้านล่างปล่อยตามที่แสดง

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
        applicationIdSuffix ".debug"
        debuggable true
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.