Tanda tangani file apk. Kami menerbitkan aplikasi di Google Play dan menghasilkan jutaan. Apa yang harus dilakukan jika kuncinya hilang atau diretas

Terkadang beberapa aplikasi di Android tidak sesuai dengan pengguna dalam beberapa hal. Contohnya adalah iklan yang mengganggu. Dan kebetulan program ini bagus untuk semua orang, tetapi terjemahan di dalamnya salah atau tidak ada sama sekali. Atau misalnya programnya uji coba, tapi dapat versi lengkap tidak ada kemungkinan. Bagaimana cara mengubah situasi?

Perkenalan

Pada artikel ini kita akan membahas tentang cara membongkar paket APK dengan suatu aplikasi, melihat struktur internalnya, membongkar dan mendekompilasi bytecode, dan juga mencoba membuat beberapa perubahan pada aplikasi yang dapat memberi kita satu manfaat atau lainnya.

Untuk melakukan semua ini sendiri, Anda memerlukan setidaknya pengetahuan dasar bahasa jawa, tempat aplikasi untuk Android ditulis, dan bahasa XML yang digunakan di mana pun di Android - mulai dari deskripsi aplikasi itu sendiri dan hak aksesnya hingga penyimpanan string yang akan ditampilkan di layar. Anda juga memerlukan kemampuan untuk menggunakan perangkat lunak konsol khusus.

Jadi, apa itu paket APK yang benar-benar semua perangkat lunak Android didistribusikan?

Dekompilasi aplikasi

Pada artikel ini, kami hanya bekerja dengan kode aplikasi yang dibongkar, tetapi jika perubahan yang lebih serius dilakukan pada aplikasi besar, akan jauh lebih sulit untuk memahami kode kecil. Untungnya, kita dapat mendekompilasi kode dex menjadi kode Java, yang meskipun tidak asli dan tidak dikompilasi kembali, namun jauh lebih mudah untuk membaca dan memahami logika aplikasi. Untuk melakukan ini, kita memerlukan dua alat:

  • dex2jar adalah penerjemah bytecode Dalvik ke bytecode JVM, yang menjadi dasar kita dapat memperoleh kode dalam bahasa Java;
  • jd-gui adalah dekompiler itu sendiri yang memungkinkan Anda mendapatkan kode Java yang dapat dibaca dari bytecode JVM. Sebagai alternatif, Anda dapat menggunakan Jad (www.varaneckas.com/jad); Meskipun sudah cukup tua, dalam beberapa kasus ini menghasilkan kode yang lebih mudah dibaca daripada Jd-gui.

Beginilah cara penggunaannya. Pertama, kita meluncurkan dex2jar, menentukan jalur ke paket apk sebagai argumen:

% dex2jar.sh mail.apk

Hasilnya, paket Java mail.jar akan muncul di direktori saat ini, yang sudah bisa dibuka di jd-gui untuk melihat kode Java.

Pengaturan paket APK dan penerimaannya

Kantong plastik Aplikasi Android, sebenarnya, adalah file ZIP biasa, tidak diperlukan alat khusus untuk melihat konten dan mengekstraknya. Cukup memiliki pengarsip - 7zip untuk Windows atau konsol unzip di Linux. Tapi itu tentang bungkusnya. Apa yang ada di dalamnya? Secara umum, kami memiliki struktur berikut di dalamnya:

  • META-INF/- berisi sertifikat digital aplikasi, identifikasi pembuatnya, dan checksum file paket;
  • res/ - berbagai sumber daya yang digunakan aplikasi dalam pekerjaannya, seperti gambar, deskripsi deklaratif antarmuka, serta data lainnya;
  • AndroidManifest.xml- deskripsi aplikasi. Ini termasuk, misalnya, daftar izin yang diperlukan, yang diperlukan versi Android dan resolusi layar yang diperlukan;
  • kelas.dex- bytecode aplikasi yang dikompilasi untuk mesin virtual Dalvik;
  • sumber daya.arsc- juga sumber daya, tetapi jenisnya berbeda - khususnya, string (ya, file ini dapat digunakan untuk Russification!).

File dan direktori yang terdaftar, jika tidak semuanya, mungkin ada di sebagian besar APK. Namun, ada beberapa file/direktori yang kurang umum yang perlu disebutkan:

  • aktiva- analog sumber daya. Perbedaan utamanya adalah untuk mengakses sumber daya Anda perlu mengetahui pengenalnya, namun daftar aset dapat diperoleh secara dinamis menggunakan metode AssetManager.list() dalam kode aplikasi;
  • lib- perpustakaan Linux asli yang ditulis menggunakan NDK (Native Development Kit).

Direktori ini digunakan oleh produsen game, yang menempatkan mesin game yang ditulis dalam C/C++, serta oleh pembuat aplikasi berkinerja tinggi (misalnya, Google Chrome). Kami menemukan perangkatnya. Namun bagaimana cara mendapatkan file paket dari aplikasi yang Anda minati? Karena tidak mungkin mengambil file APK dari perangkat tanpa root (file tersebut terletak di direktori /data/app), dan rooting tidak selalu disarankan, setidaknya ada tiga cara untuk mendapatkan file aplikasi ke komputer Anda:

  • Ekstensi Pengunduh APK untuk Chrome;
  • Aplikasi APK Leecher asli;
  • berbagai file hosting dan Varezniks.

Yang mana yang akan digunakan tergantung selera; kami lebih suka menggunakan aplikasi terpisah, jadi kami akan menjelaskan penggunaan Real APK Leecher, terutama karena ini ditulis dalam Java dan, karenanya, akan berfungsi di Windows atau Nix.

Setelah memulai program, Anda perlu mengisi tiga bidang: Email, Kata Sandi, dan ID Perangkat - dan pilih bahasa. Dua yang pertama adalah email dan kata sandi akun Google yang Anda gunakan di perangkat. Yang ketiga adalah pengenal perangkat, dan dapat diperoleh dengan mengetikkan kode pada dialer # #8255## dan kemudian menemukan baris ID Perangkat. Saat mengisi, Anda hanya perlu memasukkan ID tanpa awalan android-.

Setelah diisi dan disimpan, sering muncul pesan “Error while connection to server”. Itu tidak ada hubungannya dengan Google Play, jadi silakan abaikan saja dan cari paket yang Anda minati.

Lihat dan Ubah

Katakanlah Anda menemukan sebuah paket yang Anda minati, mengunduhnya, membongkarnya... dan ketika Anda mencoba melihat beberapa file XML, Anda terkejut menemukan bahwa file tersebut bukan teks. Bagaimana cara mendekompilasinya dan cara bekerja dengan paket secara umum? Apakah benar-benar perlu menginstal SDK? Tidak, SDK tidak perlu diinstal sama sekali. Faktanya, semua langkah untuk mengekstrak, memodifikasi, dan mengemas paket APK memerlukan alat berikut:

  • Pengarsip ZIP untuk membongkar dan mengemas;
  • kecil- perakit/pembongkar bytecode mesin virtual Dalvik (code.google.com/p/smali);
  • tepat- alat untuk mengemas sumber daya (secara default, sumber daya disimpan dalam bentuk biner untuk mengoptimalkan kinerja aplikasi). Termasuk dalam Android SDK, tetapi dapat diperoleh secara terpisah;
  • penandatangan- alat untuk menandatangani paket yang dimodifikasi secara digital (bit.ly/Rmrv4M).

Anda dapat menggunakan semua alat ini secara terpisah, tetapi ini merepotkan, jadi lebih baik menggunakan perangkat lunak tingkat tinggi yang dibuat berdasarkan alat tersebut. Jika Anda bekerja di Linux atau Mac OS X, ada alat bernama apktool. Ini memungkinkan Anda untuk membongkar sumber daya dalam bentuk aslinya (termasuk file XML biner dan arsc), membangun kembali paket dengan sumber daya yang diubah, tetapi ia tidak tahu cara menandatangani paket, jadi Anda harus menjalankan utilitas penandatanganan secara manual. Terlepas dari kenyataan bahwa utilitas ini ditulis dalam Java, instalasinya agak tidak standar. Pertama, Anda perlu mendapatkan file jar itu sendiri:

$ cd /tmp $ wget http://bit.ly/WC3OCz $ tar -xjf apktool1.5.1.tar.bz2

$ wget http://bit.ly/WRjEc7 $ tar -xjf apktool-install-linux-r05-ibot.tar.bz2

$ mv apktool.jar ~/bin $ mv apktool-install-linux-r05-ibot/* ~/bin $ ekspor PATH=~/bin:$PATH

Jika Anda bekerja di Windows, maka ada alat luar biasa yang disebut Virtuous Ten Studio, yang juga mengumpulkan semua alat ini (termasuk apktool itu sendiri), tetapi alih-alih antarmuka CLI, alat ini menyediakan antarmuka grafis intuitif yang dapat digunakan pengguna. melakukan operasi untuk membongkar, membongkar, dan mendekompilasi dalam beberapa klik. Alat ini bersifat Donation-ware, yaitu terkadang muncul jendela yang meminta Anda untuk mendapatkan lisensi, namun pada akhirnya hal tersebut dapat ditoleransi. Tidak ada gunanya menjelaskannya, karena Anda dapat memahami antarmukanya dalam beberapa menit. Namun apktool, karena sifatnya yang konsol, perlu dibahas lebih detail.


Mari kita lihat opsi apktool. Singkatnya, ada tiga perintah dasar: d (decode), b (build) dan if (install framework). Jika semuanya jelas dengan dua perintah pertama, lalu apa yang dilakukan pernyataan kondisional ketiga? Ini membongkar kerangka UI yang ditentukan, yang diperlukan jika Anda membedah paket sistem apa pun.

Mari kita lihat opsi paling menarik dari perintah pertama:

  • -S- jangan membongkar file dex;
  • -R- jangan membongkar sumber daya;
  • -B- jangan memasukkan informasi debugging ke dalam hasil pembongkaran file dex;
  • --jalur bingkai- gunakan kerangka UI yang ditentukan alih-alih yang ada di apktool. Sekarang mari kita lihat beberapa opsi untuk perintah b:
  • -F- perakitan paksa tanpa memeriksa perubahan;
  • -A- tunjukkan jalur ke aapt (alat untuk membuat arsip APK), jika karena alasan tertentu Anda ingin menggunakannya dari sumber lain.

Cara menggunakan apktool sangat sederhana; untuk melakukan ini, cukup tentukan salah satu perintah dan jalur ke APK, misalnya:

$apktool d mail.apk

Setelah ini, semua file paket yang diekstraksi dan dibongkar akan muncul di direktori email.

Persiapan. Menonaktifkan iklan

Teorinya tentu saja bagus, tetapi mengapa diperlukan jika kita tidak tahu apa yang harus dilakukan dengan paket yang belum dibongkar? Mari kita coba menerapkan teori tersebut untuk keuntungan kita, yaitu memodifikasi beberapa perangkat lunak agar tidak menampilkan iklan kepada kita. Misalnya saja, Obor Virtual - obor virtual. Perangkat lunak ini ideal bagi kami, karena dipenuhi dengan iklan yang mengganggu dan, terlebih lagi, cukup sederhana untuk tidak tersesat di tengah hutan kode.


Jadi, dengan menggunakan salah satu metode di atas, unduh aplikasi dari pasar. Jika Anda memutuskan untuk menggunakan Virtuous Ten Studio, cukup buka file APK di aplikasi dan ekstrak, lalu buat proyek (File -> Proyek baru), lalu di menu konteks proyek, pilih Impor File. Jika pilihan Anda jatuh pada apktool, jalankan saja satu perintah:

$ apktool d com.kauf.particle.virtualtorch.apk

Setelah ini, pohon file yang mirip dengan yang dijelaskan di bagian sebelumnya akan muncul di direktori com.kauf.particle.virtualtorch, tetapi dengan direktori smali tambahan, bukan file dex dan file apktool.yml. Yang pertama berisi kode yang dibongkar dari file dex aplikasi yang dapat dieksekusi, yang kedua - informasi resmi, dibutuhkan oleh apktool untuk membangun kembali paket tersebut.

Tempat pertama yang harus kita lihat tentu saja adalah AndroidManifest.xml. Dan di sini kita langsung menjumpai baris berikut:

Tidak sulit untuk menebak bahwa ia bertanggung jawab untuk memberikan izin aplikasi untuk menggunakan koneksi Internet. Faktanya, jika kita hanya ingin menghilangkan iklan, kemungkinan besar kita hanya perlu memblokir aplikasi tersebut dari Internet. Mari kita coba melakukan ini. Kami menghapus baris yang ditentukan dan mencoba membangun perangkat lunak menggunakan apktool:

$ apktool b com.kauf.particle.virtualtorch

File APK yang dihasilkan akan muncul di direktori com.kauf.particle.virtualtorch/build/. Namun, tidak mungkin untuk menginstalnya, karena tidak memiliki tanda tangan digital dan checksum file (tidak memiliki direktori META-INF/). Kita harus menandatangani paket menggunakan utilitas apk-signer. Diluncurkan. Antarmuka terdiri dari dua tab - yang pertama (Key Generator) kami membuat kunci, yang kedua (APK Signer) kami menandatangani. Untuk membuat kunci pribadi kami, isi kolom berikut:

  • Berkas Sasaran- file keluaran keystore; biasanya menyimpan sepasang kunci;
  • Kata sandi Dan Mengonfirmasi- kata sandi untuk penyimpanan;
  • Alias- nama kunci dalam penyimpanan;
  • Kata sandi alias Dan Mengonfirmasi- kata sandi kunci rahasia;
  • Keabsahan- masa berlaku (dalam tahun). Nilai defaultnya optimal.

Bidang lainnya, secara umum, opsional - tetapi setidaknya satu bidang harus diisi.


PERINGATAN

Untuk menandatangani aplikasi menggunakan apk-signer, Anda harus menginstal Android SDK dan menentukan path lengkap ke aplikasi tersebut di pengaturan aplikasi.

Semua informasi disediakan untuk tujuan informasi saja. Baik editor maupun penulis tidak bertanggung jawab atas segala kemungkinan kerugian yang disebabkan oleh materi artikel ini.

Sekarang Anda dapat menandatangani APK dengan kunci ini. Pada tab APK Signer, pilih file yang baru dibuat, masukkan kata sandi, alias kunci, dan kata sandi, lalu temukan file APK dan klik tombol “Sign”. Jika semuanya berjalan dengan baik, paket akan ditandatangani.

INFORMASI

Karena kami menandatangani paket dengan kunci kami sendiri, itu akan bertentangan dengan aplikasi aslinya, yang berarti ketika kami mencoba memperbarui perangkat lunak melalui pasar, kami akan menerima kesalahan.

Tanda tangan digital hanya diperlukan untuk perangkat lunak pihak ketiga, jadi jika Anda memodifikasi aplikasi sistem, yang diinstal dengan menyalin ke direktori /system/app/, Anda tidak perlu menandatanganinya.

Setelah itu, unduh paket tersebut ke ponsel cerdas Anda, instal dan luncurkan. Voila, iklannya hilang! Namun, sebaliknya, muncul pesan bahwa kami tidak memiliki Internet atau tidak memiliki izin yang sesuai. Secara teori, ini mungkin cukup, tetapi pesannya terlihat mengganggu, dan sejujurnya, kami hanya beruntung dengan aplikasi yang bodoh. Perangkat lunak yang biasanya ditulis kemungkinan besar akan mengklarifikasi kredensialnya atau memeriksa koneksi Internet dan sebaliknya menolak untuk diluncurkan. Apa yang harus dilakukan dalam kasus ini? Tentu saja, edit kodenya.

Biasanya, pembuat aplikasi membuat kelas khusus untuk menampilkan iklan dan memanggil metode kelas ini ketika aplikasi atau salah satu “aktivitas”-nya (dalam istilah sederhana, layar aplikasi) diluncurkan. Mari kita coba mencari kelas-kelas ini. Kita masuk ke direktori smali, lalu com (org hanya berisi perpustakaan grafis terbuka cocos2d), lalu kauf (di sinilah tempatnya, karena ini adalah nama pengembang dan semua kodenya ada di sana) - dan ini dia, direktori pemasaran. Di dalamnya kami menemukan banyak file dengan ekstensi smali. Ini adalah kelas-kelas, dan yang paling menonjol adalah kelas Ad.smali, dari namanya mudah ditebak bahwa kelas itulah yang menampilkan iklan.

Kita dapat mengubah logika operasinya, namun akan lebih mudah jika kita menghapus panggilan ke salah satu metodenya dari aplikasi itu sendiri. Oleh karena itu, kami meninggalkan direktori pemasaran dan pergi ke direktori partikel yang berdekatan, dan kemudian ke virtualtorch. Perhatian khusus File MainActivity.smali layak mendapatkan ini. Ini adalah kelas Android standar yang dibuat oleh Android SDK dan diinstal sebagai titik masuk ke aplikasi (analog dengan fungsi utama di C). Buka file untuk diedit.

Di dalamnya ada kode smali (assembler lokal). Ini cukup membingungkan dan sulit dibaca karena sifatnya yang tingkat rendah, jadi kami tidak akan mempelajarinya, tetapi hanya akan menemukan semua referensi ke kelas Iklan dalam kode dan mengomentarinya. Kami memasukkan baris "Iklan" dalam pencarian dan sampai ke baris 25:

Iklan pribadi bidang:Lcom/kauf/marketing/Ad;

Di sini bidang iklan dibuat untuk menyimpan objek kelas Iklan. Kami berkomentar dengan memberi tanda ### di depan baris. Kami melanjutkan pencarian. Baris 423:

Versi baru v3, Lcom/kauf/marketing/Ad;

Di sinilah pembuatan objek terjadi. Mari berkomentar. Kami melanjutkan pencarian dan menemukan di baris 433, 435, 466, 468, 738, 740, 800 dan 802 panggilan ke metode kelas Iklan. Mari berkomentar. Sepertinya itu saja. Menyimpan. Sekarang paket tersebut perlu dipasang kembali dan diperiksa fungsionalitasnya dan keberadaan iklannya. Demi kemurnian percobaan, kami mengembalikan baris yang dihapus dari AndroidManifest.xml, merakit paket, menandatanganinya, dan menginstalnya.

Kelinci percobaan kami. Iklan terlihat

Ups! Iklan tersebut menghilang hanya saat aplikasi sedang berjalan, namun tetap berada di menu utama, yang kita lihat saat kita meluncurkan perangkat lunak. Jadi tunggu dulu, tapi entry pointnya adalah kelas MainActivity, dan iklannya hilang saat aplikasi sedang berjalan, tetapi tetap ada di menu utama, jadi entry pointnya berbeda? Untuk mengidentifikasi titik masuk sebenarnya, buka kembali file AndroidManifest.xml. Dan ya, itu berisi baris berikut:

Mereka memberi tahu kita (dan, yang lebih penting, android) bahwa aktivitas bernama Start harus diluncurkan sebagai respons terhadap pembuatan sebuah maksud (peristiwa) android.intent.action.MAIN dari kategori android.intent.category.LAUNCHER. Event ini dihasilkan ketika Anda mengetuk ikon aplikasi di peluncur, sehingga menentukan titik masuknya, yaitu kelas Mulai. Kemungkinan besar, pemrogram pertama-tama menulis aplikasi tanpa menu utama, titik masuknya adalah kelas MainActivity standar, dan kemudian menambahkan jendela (aktivitas) baru yang berisi menu dan dijelaskan di kelas Mulai, dan secara manual menjadikannya entri titik.

Buka file Start.smali dan cari lagi baris “Ad”, kita temukan pada baris 153 dan 155 penyebutan kelas FirstAd. Itu juga ada dalam kode sumber dan, dilihat dari namanya, ini bertanggung jawab untuk menampilkan iklan di layar utama. Mari kita lihat lebih jauh, ada pembuatan instance kelas FirstAd dan maksud yang, sesuai dengan konteksnya, terkait dengan instance ini, dan kemudian label cond_10, transisi bersyarat yang dilakukan tepat sebelum membuat instance dari kelas:

Jika-ne p1, v0, :cond_10 .line 74 new-instance v0, Landroid/content/Intent; ... :lanjut_10

Kemungkinan besar, program entah bagaimana secara acak menghitung apakah iklan harus ditampilkan di layar utama, dan, jika tidak, langsung melompat ke cond_10. Oke, mari sederhanakan tugasnya dan ganti transisi bersyarat dengan transisi tanpa syarat:

#jika-ne p1, v0, :cond_10 goto:cond_10

Tidak ada lagi penyebutan FirstAd dalam kode, jadi kami menutup file dan memasang kembali obor virtual kami menggunakan apktool. Salin ke ponsel cerdas Anda, instal, luncurkan. Voila, semua iklan telah hilang, dan kami ucapkan selamat kepada kita semua.

Hasil

Artikel ini hanyalah pengenalan singkat tentang metode meretas dan memodifikasi aplikasi Android. Banyak masalah yang tertinggal di balik layar, seperti menghapus perlindungan, menguraikan kode yang dikaburkan, menerjemahkan dan mengganti sumber daya aplikasi, serta memodifikasi aplikasi yang ditulis menggunakan Android NDK. Namun, dengan memiliki pengetahuan dasar, hanya masalah waktu saja untuk mengetahui semuanya.

Terakhir diperbarui: 30/10/2015

Setelah membuat aplikasi, mengujinya, dan men-debugnya, kita dapat mulai menerbitkannya. Inti dari publikasi adalah membuat file dengan ekstensi .apk, yang akan mewakili aplikasi, dan penempatan selanjutnya di Google Play Market atau situs eksternal lainnya. Secara default, selama proses debugging dan pembuatan aplikasi, file apk sudah dibuat, dan kita dapat menemukannya di folder proyek di sepanjang jalur. Nama_proyek\app\build\outputs\apk. Secara default, file tersebut dipanggil app-debug.apk dan menyajikan versi debug.

Namun file ini mungkin tidak cukup untuk dipublikasikan secara penuh. Dan kami masih perlu melakukan beberapa persiapan tambahan untuk proyek yang akan dirilis. Untuk melakukan ini, Anda harus menentukan elemen dalam file manifes atribut android:versionCode dan android:versionName telah disetel. Juga di file manifes elemen tidak boleh berisi atribut android:debuggable

Selain itu, pada tahap ini Anda dapat mengatur ikon aplikasi yang akan ditampilkan di layar kerja gadget, nama aplikasi (atribut elemen android:label), dan Anda juga dapat mengatur perjanjian lisensi.

File manifes juga harus menentukan nama paket (atribut paket dari elemen ), yang nantinya akan digunakan untuk aplikasi. Secara default, saat mengembangkan di Android Studio, paket aplikasi dimulai dengan com.example. Anda tidak boleh meninggalkan nama ini, karena nama paket akan berfungsi sebagai pengidentifikasi unik untuk aplikasi Anda. Misalnya, di bawah ini dalam kasus saya nama paketnya adalah "com.maverics.eugene.telephonelist":

Apalagi jika pada file kode java nama paket di awal file juga harus sesuai dengan paket aplikasinya.

Persyaratan Pengaturan

Selama fase pra-rilis, Anda juga dapat menetapkan persyaratan API. Misalnya, aplikasi kita memiliki versi minimum OS Android tertentu, sehingga kita dapat mengatur atribut yang sesuai untuk elemen di file manifes

    android:minSdkVersion - versi Android minimum

    android:targetSdkVersion - versi API optimal

    android:maxSdkVersion - versi sistem maksimum

Misalnya, versi minimum Jelly Beans adalah 4.1.2, dan versi optimal KitKat adalah 4.4.4:

//.............................

Tanda tangan lamaran

Ketika semuanya sudah siap, aplikasi Android harus ditandatangani dengan sertifikat, sehingga pembuat aplikasi dapat diidentifikasi. Saat kami menguji aplikasi dengan menginstalnya melalui Android Studio di perangkat, aplikasi tersebut ditandatangani secara otomatis. Namun untuk membuat versi rilis, kita perlu melakukan sejumlah tindakan tambahan.

Saat membuat sertifikat, ingatlah bahwa saat memperbarui aplikasi, sistem akan membandingkan sertifikat versi lama dan baru. Dan pembaruan akan terjadi jika sertifikat kedua versi cocok. Namun jika versi baru ditandatangani dengan sertifikat baru, maka aplikasi tersebut akan dianggap benar-benar baru, tidak terkait dengan versi lama dan mewakili aplikasi yang sama sekali berbeda. Dalam hal ini, untuk menginstalnya, versi baru harus memiliki nama paket yang berbeda dari versi lama.

Pertama, di Android Studio, pilih Build -> Generate Signed APK dari menu. Setelah ini, jendela wizard akan terbuka:

Klik pada tombol Buat baru.... Setelah ini, jendela pembuatan kunci akan terbuka:

Di kolom Jalur penyimpanan kunci, masukkan jalur ke file sertifikat jaringan yang akan dibuat. Jika folder yang ditentukan tidak ada, maka folder tersebut harus dibuat atau folder yang ada harus ditentukan.

Di kolom Kata Sandi/Konfirmasi, masukkan kata sandi.

Di bidang Alias ​​​​kami menunjukkan alias. Anda dapat memasukkan nama khusus.

Di kolom Nama Depan dan Belakang, masukkan nama depan dan belakang Anda. Lalu kita tulis divisi, organisasi, kota, negara dan kode negaranya.

Terakhir, klik OK.

Setelah ini, jendela pertama akan diperbarui secara otomatis:

Jendela terakhir akan menunjukkan kepada kita jalur ke direktori tempat aplikasi apk yang ditandatangani dalam versi rilis akan ditempatkan. Klik Selesai.

Sekarang di jalur yang ditentukan Anda dapat menemukan apk yang ditandatangani, yang akan memiliki nama rilis-aplikasi.apk:

Kami dapat mengganti nama file, mempertahankan ekstensinya, dan mengunggahnya ke Play Market atau situs web apa pun, atau segera mengunduhnya ke perangkat seluler. Setelah diunduh ke ponsel/tablet Anda, cukup klik dan aplikasi akan diinstal menggunakan penginstal paket standar. Namun disini kita juga perlu memperhitungkan bahwa jika kita menginstal aplikasi bukan dari Play Market, maka dalam pengaturan kita perlu mengizinkan instalasi dari sumber lain - Keamanan->Sumber tidak dikenal (Izinkan instalasi aplikasi dari sumber lain)

Utilitas keytool yang dijelaskan di bagian sebelumnya membuat sertifikat digital, yang merupakan salah satu parameter alat jarsigner. Parameter lainnya adalah paket Android yang perlu ditandatangani. Untuk menghasilkan paket Android, Anda harus menggunakan utilitas Ekspor Paket Aplikasi yang Tidak Ditandatangani dari modul ADT untuk Eclipse. Untuk memanggil utilitas ini, Anda perlu mengklik kanan proyek Android di Eclipse, memilih Alat Android dari menu konteks, lalu memilih opsi Ekspor Paket Aplikasi yang Tidak Ditandatangani. Setelah diluncurkan, utilitas ini menghasilkan file .apk yang tidak ditandatangani dengan sertifikat debug.

Untuk mencobanya, jalankan utilitas Ekspor Paket Aplikasi yang Tidak Ditandatangani di salah satu proyek Android Anda dan simpan file .apk yang dihasilkan di suatu tempat. Dalam contoh ini, kita akan menggunakan folder keystore yang dibuat sebelumnya dan menghasilkan file .apk bernama C:\android\release\myappraw.apk.

Sekarang kita memiliki file .apk dan item keystore, kita dapat menjalankan alat jarsigner untuk menandatangani file .apk (lihat 14.2). Dalam hal ini, jalur lengkap harus ditentukan untuk file keystore dan file .apk.

Untuk menandatangani file .apk, utilitas jarsigner meneruskan lokasi keystore, kata sandi keystore, kata sandi kunci rahasia, jalur ke file .apk, dan alias item keystore. Jarsigner kemudian menandatangani file .apk menggunakan sertifikat digital dari item keystore. Untuk menjalankan utilitas jarsigner, Anda harus membuka jendela alat (lihat Bab 2), atau membuka jendela Command Prompt atau jendela Terminal dan membuka folder bin di direktori

JDK (jika folder ini tidak ditentukan dalam variabel lingkungan PATH). Untuk alasan keamanan, yang terbaik adalah tidak meneruskan kata sandi sebagai argumen perintah, dalam hal ini jarsigner akan meminta Anda memasukkan kata sandi saat runtime. Pada Gambar. Gambar 14.3 menunjukkan contoh pemanggilan utilitas jarsigner. Anda mungkin telah memperhatikan hal itu pada Gambar. 14.3 utilitas jarsigner hanya meminta satu kata sandi. Hal ini karena keypass tidak diminta jika storepass dan keypass sama. Sebenarnya, perintah jarsigner di e 14.2 hanya perlu menentukan kata sandi -keypass jika berbeda dengan kata sandi -storepass.

Seperti disebutkan sebelumnya, Android mengharuskan aplikasi Anda ditandatangani secara digital untuk mencegah pemrogram jahat mengganti aplikasi Anda dengan versi mereka sendiri. Untuk melakukan hal ini, Android mengharuskan pembaruan aplikasi ditandatangani dengan tanda tangan yang sama seperti aplikasi aslinya. Jika suatu aplikasi ditandatangani dengan tanda tangan yang berbeda, Android menganggapnya sebagai aplikasi yang berbeda. Oleh karena itu, kami mengingatkan Anda sekali lagi: tangani file keystore dengan hati-hati agar tersedia untuk Anda nanti saat Anda perlu merilis pembaruan aplikasi.

Jadi, Anda telah bekerja berhari-hari (dan mungkin bahkan bermalam), dan sekarang aplikasi seluler hybrid pertama Anda sudah siap. Ini cukup stabil, sebagian besar bug kritis telah ditutup. Masih ada sedikit yang tersisa, tetapi mengingat perfeksionisme itu jahat, Anda membuat keputusan berkemauan keras untuk mempublikasikan aplikasi tersebut.

Prasyarat untuk ini adalah adanya file APK yang ditandatangani. Anda akan mempelajari cara menandatangani file apk di artikel ini.

Retret kecil

Ketika proyek kesayangan saya hampir dirilis, saya mulai mencari informasi tentang cara mempublikasikan aplikasi dengan cepat dan mudah. Banyak instruksi yang ditemukan tampak sederhana. Saya memilih instruksi dari penulis kerangka Ionic, tempat aplikasi dikembangkan. Tidak semuanya berhasil pada kali pertama; ada beberapa keanehan. Proses penandatanganan dijelaskan dalam artikel ini, dengan poin-poin penting yang disorot.

Data awal

Saya berasumsi Anda sudah menyiapkan segalanya untuk mengembangkan aplikasi seluler hybrid menggunakan Apache Cordova. Harus dipasang:
  • Apache Cordova
  • Kit Pengembangan Java
  • Alat SDK Android
Nama proyek dan aplikasinya adalah lcf. Ganti dengan nama proyek Anda jika perlu.

Pergi

Pertama, Anda perlu membuat versi rilis aplikasi Anda. Namun sebelum itu, pastikan semua plugin yang tidak diperlukan telah dihapus. Misalnya, kita tidak memerlukan plugin yang menampilkan informasi debug ke konsol. Mari kita hapus:

$ plugin cordova rm cordova-plugin-konsol
Untuk menghasilkan build rilis untuk Android, gunakan perintah membangun dengan bendera --melepaskan:

$ cordova build --rilis Android
Perintah ini akan dibuat tidak ditandatangani File APK di direktori:

Platform/Android/build/output/apk
Misalnya, platform/android/build/outputs/apk/ android-rilis-unsigned.apk. Kemudian kita perlu menandatangani file ini dan menjalankan utilitasnya zipalign untuk mengoptimalkan dan menyiapkan file untuk Google Play.

Untuk menandatangani file, Anda memerlukan sertifikat. Mari kita membuatnya menggunakan utilitas alat kunci yang termasuk dalam JDK:

$ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validitas 10000
Penting

Nilai parameter -alias harus diingat, atau lebih baik lagi dituliskan. Pada contoh di atas sama dengan lcf (berdasarkan huruf pertama nama aplikasi Loyal Client Free). Disini saya tidak akan memberikan detailnya, jika anda tertarik tulis di kolom komentar, saya akan ceritakan lebih detail.

Alias ​​​​digunakan setiap kali Anda menandatangani * aplikasi. Agar lebih mudah mengingatnya, gunakan nama file keystore sebagai alias, misalnya:


-keystore hello-world.keystore -alias hello-world -keystore cuaca-app.keystore -alias cuaca-app -keystore todo.keystore -alias todo
* Anda harus menandatangani aplikasi setiap kali pembaruan dirilis

Kegunaan alat kunci menanyakan serangkaian pertanyaan. Totalnya akan ada 8. Untuk mengetahui gambaran pertanyaan dan perkiraan jawaban terlebih dahulu, semuanya diberikan di bawah ini, di bawah spoiler.

Pertanyaan alat kunci dan contoh jawabannya

1. Masukkan kata sandi keystore:
Di sini Anda harus memasukkan kata sandi untuk file tersebut (minimal 6 karakter). Kata sandi yang dimasukkan harus ditulis di tempat yang aman; itu diperlukan setiap kali Anda menandatangani aplikasi.

2. Masukkan kembali kata sandi baru:
Masukkan kembali kata sandi Anda.

3. Siapa nama depan dan belakangmu?
: Ivan Petrov
Nama depan dan belakang Anda. Nilai dalam tanda kurung siku adalah nilai default.

4. Apa nama unit organisasi anda?
: DIA
Nama divisi perusahaan Anda. Anda dapat membiarkannya kosong, saya tunjukkan.

5. Apa nama organisasi anda?
: 2pengembang
Nama organisasi Anda. Harap sebutkan jika tersedia.

6. Apa nama Kota atau Daerah anda?
: Moskow
Nama Kota

7. Apa nama Negara Bagian atau Provinsi anda?
: MO.
Nama daerah

8. Apa kode negara dua huruf untuk unit ini?
: ru
Kode negara. Saya menunjukkan RU.

: kamu

Konfirmasikan apakah semuanya sudah benar atau tekan Enter untuk masuk lagi.


Pada akhirnya, sebuah pesan yang menunjukkan pembuatan kunci berhasil akan muncul. Anda akan diminta untuk menyetel kata sandi untuk kunci pribadi (jika Anda ingin membiarkannya sama seperti untuk sertifikat, tekan Enter):

Menghasilkan 2 pasangan kunci RSA 048 bit dan sertifikat yang ditandatangani sendiri (SHA256withRSA) dengan validitas 10.000 hari untuk: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Enter key kata sandi untuk (KEMBALI jika sama dengan kata sandi keystore):
Sebuah file akan dibuat di direktori saat ini lcf.keystore.

Penting

File yang dibuat harus disimpan di tempat yang aman. Jika Anda menggunakan repositori pribadi, file dapat dikomit bersama dengan kode sumber aplikasi. Secara umum, lebih baik menyimpan sertifikat secara terpisah. Jika Anda kehilangan sertifikat, Anda tidak akan dapat mengeluarkan pembaruan aplikasi.

Tinggal dua langkah lagi dan Anda akan memiliki file APK yang siap untuk didistribusikan. Mari kita beralih ke penandatanganan.

Untuk menandatangani file apk Anda, gunakan utilitas jarsigner, yang juga termasuk dalam JDK.

$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf
Nama sertifikat ditunjukkan setelah parameter -penyimpan kunci, alias - setelah nama file.

Terakhir, untuk mengoptimalkan file apk, kita akan menggunakan utilitas zipalign:

$ zipalign -v 4 android-rilis-unsigned.apk LoyalClientFree.apk
Parameter terakhir adalah nama file yang akan Anda unggah ke Google Play.

Penting.

Kegunaan zipalign itu adalah bagian dari Alat SDK Android dan dapat ditemukan di sini:

/path/ke/Android/sdk/build-tools/VERSION/zipalign

Kesimpulan

Anda sekarang memiliki file apk siap distribusi yang dapat diunggah ke Google Play. Isi deskripsi, tentukan rating aplikasi Anda dan silakan klik “Terbitkan”.

Karena saya sendiri yang mencari pertanyaan di Google " cara menandatangani file apk?", Saya tahu bahwa tidak mudah untuk menemukan instruksi yang benar-benar berfungsi dan sepenuhnya dapat dimengerti. Itu sebabnya saya memutuskan untuk menulis materi sendiri tentang cara menandatangani program atau game Anda dengan benar di Android.

Seperti yang kita ketahui sekarang, tanpa tanda tangan digital, kreasi Anda tidak dapat ditempatkan di Pasar, dan ini sudah serius. Saya telah memperhatikan banyak pengembang Android muda, sehingga para pemula benar-benar lupa untuk menandatangani aplikasi mereka dan kemudian mencoba melakukan sesuatu dengan itu dan itu saja yang membuat mereka bertanya-tanya mengapa mereka tidak dapat melakukan tindakan ini atau itu dengan file APK mereka.

Jadi, jangan berlarut-larut dan segera mulai dengan bagaimana Anda dapat menandatangani file APK Anda dan apa yang sebenarnya perlu Anda gunakan untuk mencapai hasil yang diinginkan.

Cara ini adalah yang paling benar dari semua cara di atas, jadi kami akan menjelaskannya di materi ini. Kami akan membuat kunci kami sendiri dengan data dan sertifikat kami sendiri dan menggunakannya untuk menandatangani aplikasi yang Anda buat.

Untuk bekerja kita membutuhkan: OpenSSL dan SignApk.

Pertama, mari buat sertifikat dan kunci penandatanganan. Instal OpenSSL. Selama instalasi, penginstal akan meminta Anda untuk menyalin komponen ke map jendela, pilih folder Bin, yang akan menjadi tempat Anda menginstal semua OpenSSL.

Sekarang buka sebagai administrator sistem(ini sangat penting!) baris perintah. Lalu pergi ke garis komando ke folder bin, yang terletak di folder tempat Anda menginstal OpenSSL (Misalnya, C:\OpenSSL\Bin\ atau C:\Program Files\OpenSSL\Bin\). Jika belum tahu, mengganti ke folder lain dilakukan dengan perintah CD. Artinya, untuk pergi ke folder yang diinginkan Anda harus menjalankan perintah seperti ini:

cd C:\OpenSSL\Bin\

Setelah Anda berada di folder Bin, Anda dapat langsung melanjutkan pembuatan sertifikat dan kunci.

Langkah 1(Kami menghasilkan kunci dengan panjang 1024 bit)

Jalankan perintah:

openssl genrsa -out key.pem 1024

Langkah 2(Kami membuat permintaan sertifikat berdasarkan kunci)

Jalankan perintah:

openssl req -baru -kunci kunci.pem -keluar permintaan.pem

Pada tahap ini, Anda harus memasukkan data Anda, yang akan mengidentifikasi Anda di sertifikat.

Melangkah 3 (Kami menghasilkan kunci pribadi dari sertifikat)

Jalankan perintah:

openssl x509 -req -hari 9999 -dalam permintaan.pem -kunci tanda kunci.pem -sertifikat keluar.pem

Langkah 4(Kami menghasilkan kunci publik)

Jalankan perintah:

openssl pkcs8 -topk8 -outform DER -in key.pem -informasikan PEM -out key.pk8 -nocrypt

Pada tahap ini, pembuatan file yang kami perlukan untuk menandatangani game dan aplikasi Anda telah selesai. Dengan menggunakan kunci dan sertifikat yang dibuat, Anda dapat menandatangani game dan aplikasi di Android sebanyak yang Anda suka.

Sekarang mari kita mulai menandatangani aplikasinya. Buka paket arsip SingApk yang diunduh dari tautan di atas. Pindahkan 2 file dari folder Bin tempat kita membuat sertifikat dan kunci: sertifikat.pem Dan kunci.pk8 ke folder tempat Anda mengekstrak SingApk. Windows akan menampilkan dialog penggantian file - ganti.

Sekarang untuk menandatangani berkas apk unik tanda tangan digital, yang Anda buat sendiri, cukup gunakan mouse Anda untuk menyeret file apk Anda ke sana tanda_APK.bat. Agar tidak menyeret file dari satu jendela ke jendela lain (ini tidak nyaman), pindahkan file apk Anda ke folder dengan SingApk. Setelah dieksekusi, sebuah file akan muncul di folder dengan SingApk apk_signed.apk, yang akan menjadi aplikasi atau game yang Anda tandatangani.