他のデバイスからAPKを取り出して、別のデバイスにインストールする場合の方法です(有料アプリなどは動作しません)。
スポンサードリンク
adb shell pm list packages -f | findstr アプリ名
「アプリ名」の部分はパッケージファイルの名前の一部を入力します
findstrコマンドは検索コマンドです。アプリ名にヒットする一覧が表示されます。
その中からapkファイルのパスが見つけましょう。通常 /data/app/○○○.○○○.apkなどに存在します。
コマンドプロンプトを起動し次のようなコマンドを入力します。
adb pull ****/****/****.apk
「****/****/****.apk」 は上で見つけたapkファイルのフルパスです。
そのまま、ADBを利用してpush、installしても次のようなエラーが出ることがあります。
Failure [INSTALL_FAILED_SHARED_USER_INCOMPATIBLE] → 署名が一致しないためのエラーです。証明書で署名してないためにインストールに失敗しています。
Signature mismatch for shared user → 署名が一致しないためのエラーです。
DexFile_isDexOptNeeded cache file → dexファイルをapkに含める必要があります
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_CERTIFICATE := platform LOCAL_MODULE := パッケージ名 LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_MODULE_TAGS := optional LOCAL_PACKAGE_NAME := パッケージ名 LOCAL_SRC_FILES := パッケージ名.apk LOCAL_DEX_PREOPT := false include $(BUILD_PREBUILT)
「LOCAL_DEX_PREOPT := false」で、 APKにdexファイルを含めるように指定します。
項目 | 説明 |
---|---|
LOCAL_CERTIFICATE | APKのビルドに使用する証明書を指定する。 |
Android標準の証明書を利用する場合は以下の3つのどれかを指定する。 | |
- shared : 一般アプリ | |
- platform : システムアプリ | |
- PRESIGNED : プレビルトしたApkが署名済みの場合 | |
- media : Med | |
LOCAL_MODULE_TAGS | APKをビルドする時のモードを指定する。 |
指定できる値(複数指定可) optional, user, eng, tests | |
LOCAL_PACKAGE_NAME | アプリの名前を指定する。 |
Androidのソース中の全てのAndroid.mkで一意である必要がある。 | |
LOCAL_DEX_PREOPT | APKにdexファイルを含めるか指定する。 |
- false | |
-- Apkにdexファイルを含める | |
- 何も指定しない | |
-- Apkにdexファイルを含めない | |
-- Apkと同じ場所にodexファイルができる |
下記コマンドを打てば分かります(もちろんJDKなどインストール済みである事が前提
jarsigner -verify xxx.apk
jarsigner -verify -verbose -certs xxx.apk
デバッグ用のキーストア/キーは以下の値で生成する。
キーストア名「debug.keystore」
キーストアのパスワード「android」
キーのエイリアス「androiddebugkey」
キーのパスワード「android」
CN「CN=Android Debug,O=Android,C=US」
DOSから
C:\>keytool -genkey -v ^
-keystore debug.keystore ^
-alias androiddebugkey ^
-keyalg RSA ^
-validity 10000 ^
-dname "CN=Android Debug,O=Android,C=US"
これで「debug.keystore」が生成されるので、-listオプションを使って確認。
C:\>keytool -list -v ^
-keystore debug.keystore ^
-storepass android
C:\>jarsigner -verbose ^
piyo.apk ^
alias_key1
> jarsigner -sigalg SHA1withDSA -digestalg SHA1 -verbose -signedjar new2.apk -keystore C:\Users\0000123921\.android\debug.keystore new.apk androiddebugkey
jarsigner -verbose ^
piyo.apk ^
alias_key1
jarsigner -sigalg SHA1withDSA -digestalg SHA1 -verbose -signedjar new2.apk -keystore C:\Users\0000123921\.android\debug.keystore new.apk androiddebugkey
キーストアのパスワードを入力してください:
追加中: META-INF/MANIFEST.MF
jarsignerエラー: java.security.SignatureException: private key algorithm is not compatible with signature algorithm
生成した鍵の -genkey 指定がおかしいようです。 正しく -genkey を指定して鍵を生成し直しましょう。
apktool.bat d testshooting.apk
apktool.bat b testshooting new.apk
jarsigner -verbose -keystore C:\Users\0000123921\.android\debug.keystore -storepass android -keypass android new.apk androiddebugkey
追加中: META-INF/MANIFEST.MF 追加中: META-INF/ANDROIDD.SF 追加中: META-INF/ANDROIDD.RSA 署名中: assets/bin/Data/Managed/Assembly-UnityScript.dll 署名中: assets/bin/Data/Managed/Boo.Lang.dll 署名中: assets/bin/Data/Managed/Mono.Security.dll 署名中: assets/bin/Data/Managed/System.Core.dll
...
署名中: res/drawable-xhdpi/app_icon.png 署名中: res/drawable-xxhdpi/app_icon.png 署名中: AndroidManifest.xml 署名中: classes.dex 署名中: resources.arsc
jarsigner -verbose -keystore C:\Users\0000123921\.android\debug.keystore ^
-storepass android -keypass android -digestalg SHA1 -sigalg MD5withRSA ^ -signedjar new2.apk ^ new.apk androiddebugkey
F/libc ( 5002): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x88 in tid 5054 (UnityMain)
E/qcom_sensors_hal( 767): hal_process_report_ind: Bad item quality: 11
I/DEBUG ( 190): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 190): Build fingerprint: 'google/hammerhead/hammerhead:L/LPV81C/1320585:user/release-keys'
「-sigfile CERT」とか余計なオプションがついてる
未署名
1. Rename the apk file into a zip file, e.g. Name.apk = Name.zip
2. Unpack/ Unzip the zip file
3. Delete the META-INF folder
4. Repack/ Rezip the folder again to a zip file
5. Rename the zip file again to an apk file
6. Open a terminal window / Command prompt and enter (the jarsigner tool is located in the bin folder of your installed java sdk
jarsigner -keystore C:\Users\0000123921\.android\debug.keystore -storepass android -keypass android testshooting.apk androiddebugkey
スポンサードリンク