歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 基於微信api Android程序簽名+代碼混淆

基於微信api Android程序簽名+代碼混淆

日期:2017/3/1 9:58:04   编辑:Linux編程

微信開放平台真是獨特啊!!!

微信的ap調用確實別新浪微博,人人,QQ互聯這些方便很多,也不用判斷綁定什麼的,讓人眼前一亮。但是到代碼混淆這一步,我真瞎了,網上關於微信簽名混淆資料講的讓人摸不著頭腦,搗鼓了很久終於弄明白了。

第一步:

申請APP_ID,然後還需要填那個“應用類型” ---下載地址地址無關緊要;重點是應用簽名,接下來會講,先空著;包名,顧名思義就算你的Android應用的包名

第二步:

在程序中調用微信api,具體步驟,微信開放平台的android上手指南講的很清楚。

第三步:

調試api,為了方便我們可以先用微信提供的demo。重點:1、找到demo根目錄下的debug.keystore文件 2、選擇Eclipse頂部菜單Window->Preferences,選擇Android目錄下的Build 3、指定Custom debugkeystore選項的路徑為sdk demo工程目錄中的debug.keystore文件 確定OK (第一步保證了微信的SDK demo可以正常使用了)

第四步:

選擇自己的程序,右鍵運行到手機,然後http://open.weixin.qq.com/download/sdk/gen_signature.apk

下載簽名應用,在手機中運行,根據提示輸入程序的包名獲得一個apk簽名字符串,最後將這個字符串填到第一步的應用簽名欄處。保存OK 可以正常調試應用了 (這一步微信的SDK Demo都已經處理好的,所以我們自己應用需要單獨處理)

第五步:

調試結束後,我們該簽名打包了,順便把代碼混淆也做了。代碼混淆配置步驟網上一搜就有。按照SDK說明在proguard.cfg中添加

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*; }
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*; }
附上我的 proguard.cfg內容:
-optimizationpasses 2
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-ignorewarnings
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembers class * {
native ;
}

-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}

-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class **.R$* {
*;
}

-keepclassmembers class * {
public (org.json.JSONObject);
}
-keep public class com.android.mydemo.R$*{
public static final int *;
}

-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

-keep class android.net.http.** {*; }
-keep class android.webkit.** {*; }
-keep class com.weibo.net.** {*; }

-keep class com.tencent.mm.sdk.openapi.WXMediaMessage {*; }
-keep class com.tencent.mm.sdk.openapi.** implements com.tencent.mm.sdk.openapi.WXMediaMessage$IMediaObject {*; }

最後選擇程序,右鍵--->android tools --->簽名發布,按步驟生成一個簽名keystore和一個經過簽名的apk,安裝該APK到手機,再重復第四步(包名改變),獲得一個apk簽名字符串,修改第一步中的第一步的應用簽名欄,保存。 可能需要稍微等一段時間,微信服務器有時反應遲鈍 大功告成!!!

第六步:

微信的簽名驗證真令人蛋疼,一起鄙視一下!

支持原創~

轉發請附加鏈接,謝謝!

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved