檢視APK包名2種方法
方法1:adb shell "logcat | grep START"
執行該命令,等一小會logcat輸出資訊完畢,然後點選要檢視包名的APP, 我這裡點選的是訊飛輸入法,看到資訊彈出的第一條,com.iflytek.inputmethod 就是訊飛輸入法的包名 09-10 19:27:52.030 1594 1661 I ActivityManager: START u0 {flg=0x34000000 cmp=com.iflytek.inputmethod/.setting.container.CusPreferenceActivity (has extras)} from uid 10081 on display 0
方法2:apk包名和類名,可通過到AndroidManifest.xml檔案查詢得到 參考:https://blog.csdn.net/luzhenrong45/article/details/78195466 因此,如果有輸入法的原始碼,可直接跳轉到第三步檢視AndroidManifest.xml。但現實中大多數情況,我們都是隻有apk,沒有原始碼的。 這裡以Google自家的 Gboard.apk 輸入法為例,介紹一下配置Gboard輸入法所需要的包名和類名獲取方法。
第一步: 解壓Gboard.apk檔案,得到AndroidManifest.xml檔案
apk檔案可以直接使用解壓工具進行解壓,但是解壓出來的AndroidManifest.xml使用文字編輯工具開啟會發現是亂碼的,因此需要對其進一步解析。
第二步: 反編譯解析AndroidManifest.xml,得到正常可讀的到AndroidManifest.xml
一般可以通過反編譯工具AXMLPrinter2(點選可下載) 解析上一步得到的AndroidManifest.xml,使用方法如下:
java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.xml_new
1 2
第三步: 從解析後的 AndroidManifest.xml中得到包名和類名 解析後的 AndroidManifest.xml其實就是沒有經過混淆加密的原檔案, 檔案內容大致如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="26641613" android:versionName="6.4.16.162469584-release-armeabi-v7a" coreApp="true" package="com.google.android.inputmethod.latin" --->這個就是輸入法要配置的包名,位於檔案開頭! platformBuildVersionCode="26" platformBuildVersionName="8.0.0" >
<application android:theme="@7F110010" android:label="@7F10016B" android:icon="@7F030000" android:name="com.google.android.apps.inputmethod.latin.LatinApp" android:debuggable="false" android:backupAgent="com.google.android.apps.inputmethod.latin.core.LatinBackupAgent" android:allowBackup="true" android:killAfterRestore="false" android:restoreAnyVersion="true" android:supportsRtl="true" android:roundIcon="@7F030001" > <meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIl3fO6Spo7vqdonbORA0gOqfXPTnKWTdG6eHJNA" > </meta-data> <service android:label="@7F10016B" android:name="com.android.inputmethod.latin.LatinIME" android:permission="android.permission.BIND_INPUT_METHOD" android:directBootAware="true" >
...(此處略去N多內容)
<service android:label="@7F10016B" android:name="com.android.inputmethod.latin.LatinIME" android:permission="android.permission.BIND_INPUT_METHOD" ---> 找到 “android.permission.BIND_INPUT_METHOD” 這個許可權的標籤元件 android:directBootAware="true" >
注意:包含“android.permission.BIND_INPUT_METHOD”這個許可權宣告的標籤元件,其指定的android:name就是要配置的輸入法的類名, 在這裡具體是指 “com.android.inputmethod.latin.LatinIME”
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="26641613" android:versionName="6.4.16.162469584-release-armeabi-v7a" coreApp="true" package="com.google.android.inputmethod.latin" --->這個就是輸入法要配置的包名,位於檔案開頭! platformBuildVersionCode="26" platformBuildVersionName="8.0.0" >
<application android:theme="@7F110010" android:label="@7F10016B" android:icon="@7F030000" android:name="com.google.android.apps.inputmethod.latin.LatinApp" android:debuggable="false" android:backupAgent="com.google.android.apps.inputmethod.latin.core.LatinBackupAgent" android:allowBackup="true" android:killAfterRestore="false" android:restoreAnyVersion="true" android:supportsRtl="true" android:roundIcon="@7F030001" > <meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIl3fO6Spo7vqdonbORA0gOqfXPTnKWTdG6eHJNA" > </meta-data> <service android:label="@7F10016B" android:name="com.android.inputmethod.latin.LatinIME" android:permission="android.permission.BIND_INPUT_METHOD" android:directBootAware="true" >
...(此處略去N多內容)
<service android:label="@7F10016B" android:name="com.android.inputmethod.latin.LatinIME" android:permission="android.permission.BIND_INPUT_METHOD" ---> 找到 “android.permission.BIND_INPUT_METHOD” 這個許可權的標籤元件 android:directBootAware="true" >
注意:包含“android.permission.BIND_INPUT_METHOD”這個許可權宣告的標籤元件,其指定的android:name就是要配置的輸入法的類名, 在這裡具體是指 “com.android.inputmethod.latin.LatinIME”
因此,便可知,如果要配置Gboard為出廠預設輸入法,即可將上面介紹的config_default_input_method配置為如下:
com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
或
com.google.android.inputmethod.latin/.LatinIME (這裡是類名的簡寫)