คำตอบที่ยอมรับใช้ไฟล์เพื่อควบคุมที่เก็บคีย์เพื่อใช้ลงนาม APK ที่อยู่ในโฟลเดอร์รูทเดียวกันของโครงการ เมื่อเราใช้vcsเช่นGitอาจเป็นสิ่งที่ไม่ดีเมื่อเราลืมเพิ่มไฟล์คุณสมบัติเพื่อละเว้นรายการ เพราะเราจะเปิดเผยรหัสผ่านของเราไปทั่วโลก ปัญหายังคงอยู่
แทนที่จะทำไฟล์คุณสมบัติในไดเรกทอรีเดียวกันภายในโครงการของเราเราควรทำมันนอก เราสร้างมันไว้ข้างนอกโดยใช้ไฟล์ gradle.properties
นี่คือขั้นตอน:
1. แก้ไขหรือสร้าง gradle.properties ในโปรเจ็กต์รูทของคุณและเพิ่มโค้ดต่อไปนี้อย่าลืมแก้ไขพา ธ ด้วยตัวคุณเอง:
AndroidProject.signing=/your/path/androidproject.properties
2. สร้าง androidproject.properties ใน / your / path / และเพิ่มรหัสต่อไปนี้อย่าลืมเปลี่ยน / your/path/to/android.keystore เป็นเส้นทาง keystore ของคุณ:
STORE_FILE=/your/path/to/android.keystore
STORE_PASSWORD=yourstorepassword
KEY_ALIAS=yourkeyalias
KEY_PASSWORD=yourkeypassword
3. ในโมดูลแอป build.gradle (ไม่ใช่รูท build.gradle โครงการของคุณ) เพิ่มรหัสต่อไปนี้หากไม่มีอยู่หรือปรับเปลี่ยนเป็น:
signingConfigs {
release
}
buildTypes {
debug {
debuggable true
}
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
4. เพิ่มรหัสต่อไปนี้ด้านล่างรหัสในขั้นตอนที่ 3:
if (project.hasProperty("AndroidProject.signing")
&& new File(project.property("AndroidProject.signing").toString()).exists()) {
def Properties props = new Properties()
def propFile = new File(project.property("AndroidProject.signing").toString())
if(propFile.canRead()) {
props.load(new FileInputStream(propFile))
if (props!=null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
} else {
println 'androidproject.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
} else {
println 'androidproject.properties file not found'
android.buildTypes.release.signingConfig = null
}
}
รหัสนี้จะค้นหา AndroidProject.signing คุณสมบัติในgradle.propertiesจากขั้นตอนที่ 1 ถ้าคุณสมบัติที่พบก็จะแปลมูลค่าทรัพย์สินเป็นเส้นทางของไฟล์ที่ชี้ไป androidproject.properties ที่เราสร้างในขั้นตอนที่ 2 จากนั้นค่าคุณสมบัติทั้งหมดจากมันจะถูกใช้เป็นการกำหนดค่าการลงนามสำหรับ build.gradle ของเรา
ตอนนี้เราไม่ต้องกังวลอีกครั้งถึงความเสี่ยงที่จะเปิดเผยรหัสผ่านที่เก็บคีย์ของเรา
อ่านเพิ่มเติมที่Signing Android apk โดยไม่ต้องใส่ข้อมูล keystore ใน build.gradle
build.gradle
คุณจะต้องมีสิ่งอื่นนอกเหนือจากbuild.gradle
นี้หรือไม่ นั่นคือการปรับเปลี่ยนตัวแปรสภาพแวดล้อม (ต่อหนึ่งคำตอบ), ไฟล์คุณสมบัติ (ต่อคำตอบอื่น) หรือวิธีการอื่น หากคุณมีความเต็มใจที่จะมีสิ่งที่อยู่นอกbuild.gradle
แล้วโดยความหมายข้อมูลทั้งหมดที่ลงนามจะต้องมีภายในbuid.gradle