騰訊開放平台的應用接入,可以接入應用寶、QQ物聯等平台,為開發者提供釋出和推廣應用的管道。
近日,筆者在騰訊開放平台上新增一個應用,出現已有相同應用存在的提示,并且平台提示進行應用認領,筆者在應用寶市場對要送出的應用進行搜尋,不管中英文、長短詞都搜尋不到,奇怪之下,問了下官方,騰訊開放平台服務團隊回複:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyNyYTNxgDM2EzNyIDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在騰訊開放平台上進行應用認領,如下界面所示:
在第3步,需要下載下傳一個空apk包“tap_unsign.apk”,并且用你要釋出應用的簽名為這個“tap_unsign.apk”簽名,然後在第4步上傳回騰訊開放平台,以作驗證。(應用認領這招倒是可以杜絕不少盜用和惡意移植的路子)
在第3步,官方頁面給了指令行打簽名的例子:
如何簽名:
jarsgner-verbose-keystore[keystorePath]-singnedjar [apkOut] [apkln] [alias]
jarsgner指令格式:-verbose輸出詳細資訊-keystore密鑰庫位置-alias demo.keystore 别名 demo.keystore
-keyalg RSA 使用RSA算法對簽名加密
-validity 40000 有效期限4000天
-keystore demo.keystore
D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
例如
D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
(注:一鍵簽名的工具很多,騰訊自己也有:http://legu.qcloud.com/tool/index)
筆者工作環境是MacOS,對于jarsigner指令在終端中直接可用,如果有問題,可cd到jdk目錄下同名目錄再執行指令。Windows環境下同理,注意路徑即可。
假如你的簽名檔案是:mysign.keystore,
第一次指令如下:
jarsigner -verbose -keystore /Users/xxx/Developer/Android/mysign.keystore -signedjar /Users/xxx/Downloads/tap_signed.apk /Users/long/Downloads/tap_unsign.apk mysign.keystore
MacOS終端執行後,問題來了:
輸入密鑰庫的密碼短語:
jarsigner: 找不到mysign.keystore的證書鍊。mysign.keystore必須引用包含私有密鑰和相應的公共密鑰證書鍊的有效密鑰庫密鑰條目。
問題原因:-signedjar後面參數格式應該是:參數1=簽名後包完整路徑;參數2=原始包完整路徑;參數3=你的簽名中的别名,即Alias。
第二次指令如下:
jarsigner -verbose -keystore /Users/xxx/Developer/Android/mysign.keystore -signedjar /Users/xxx/Downloads/tap_signed.apk /Users/xxx/Downloads/tap_unsign.apk this is my alias
MacOS終端執行後,問題來了:
隻能指定一個别名
那這樣執行指令如何:
jarsigner -verbose -keystore /Users/xxx/Developer/Android/mysign.keystore -signedjar /Users/xxx/Downloads/tap_signed.apk /Users/xxx/Downloads/tap_unsign.apk this
結果是更糟:
輸入密鑰庫的密碼短語:
jarsigner 錯誤: java.lang.RuntimeException: 密鑰庫加載: Keystore was tampered with, or password was incorrect
問題原因:指令行中空格就相當于斷句了,如果你的參數字元串中有空格,在指令行中用單引号或雙引号包起來就可以正常執行了。
第三次指令如下:
jarsigner -verbose -keystore /Users/xxx/Developer/Android/mysign.keystore -signedjar /Users/xxx/Downloads/tap_signed.apk /Users/xxx/Downloads/tap_unsign.apk "this is my alias"
然後回車,終端就要求你輸入密碼,這次就成功完成簽名打包了。
也就是說jarsigner指令的簡單格式為:
jarsigner -verbose -keystore 簽名檔案的完整路徑 -signedjar 簽名後apk包的完整路徑 原始apk包的完整路徑 "不怕空格的别名"
---------------- END ----------------
順便說一句,如果按照騰訊頁面向導送出簽名驗證包,最後系統發消息提示你認領未通過稽核,涉嫌侵權之類的,其實還可以走人工認領那條路,騰訊規定系統自動驗證認領不通過後,可以走人工認領。