簡單的安卓應用授權認證(JNI)

來源:互聯網
上載者:User

標籤:android   style   io   ar   使用   java   sp   strong   on   

最近一直在做公司的一個安卓開發架構,含so庫,接近尾聲了,領導提出一個需求,要求使用這個架構的開發人員必須有我們的授權才可以,但是對方發布的應用後又不能被此授許可權制——要不然所有的應用都來要授權那就麻煩了。

分析:

既然是限制開發人員,那麼就必須要區分debug版本和release版本,也就是架構的授許可權制功能只對debug版本有效,而對release版本無效;然後就是需要一個調試裝置的一個唯一ID,這樣授權碼是綁定在固定的裝置的,只要有新的調試裝置就需要新的授權碼,一般公司裡也就是十幾個裝置吧,這個申請量級完全可以接受。

思路:

因為正好這個架構需要so庫的支援,這樣在so庫載入時的int JNI_OnLoad(JavaVM* jvm, void* reserved)方法中可以完成驗證。

關於debug和release版本的區分,安卓系統提供了一個debugable屬性可以實現,只要是從Eclipse或者ADT的Integration Environment裡直接運行或者調試,都可以判斷出是否是debug版本;

關於安卓裝置的ID,安卓本身提供好幾種ID的擷取,我最終使用的是security類的ID,   Settings.Secure.getString(ContentResolver,Settings.Secure.ANDROID_ID),這個ID是在安卓裝置第一次啟動的時候自動產生的,如果刷機的話則可能會改變。

授權碼的存放位置就放在AndroidManifest中的application結點下,增加一個meta結點,並可以自訂資訊的名稱,那麼現在就是準備工作就全了.

實現:

1. JNI層的int JNI_OnLoad(JavaVM* jvm, void* reserved)完成驗證

2.JNI層判斷程式是否為debug版本,為防止java代碼被反編譯,所以擷取debug屬性和判斷都在JNI層進行,可以參考java層的如下代碼,即將一下代碼改編為C++代碼:

public  boolean isDebugMode(){ApplicationInfo info = this.getApplicationInfo();return (0!=((info.flags) & ApplicationInfo.FLAG_DEBUGGABLE));}

3.JNI層擷取安卓裝置的唯一ID,可以參考java代碼,即將一下代碼改編為C++代碼:

 String id = Settings.Secure.getString(this.mainActivity.getContentResolver(),              Settings.Secure.ANDROID_ID);

4.擷取Manifest中的meta中的授權碼,這個就沒必要非得在JNI層實現了,可以在java層擷取,然後傳遞給JNI層,參考是如下的java代碼:

ApplicationInfo info=context.getPackageManager().getApplicationInfo(con.getPackageName(),PackageManager.GET_META_DATA);String key=info.metadata.getString("permissionKey");


5.接下來就是加密解密以及最後的適當加花加殼的取捨了,就不再細說了。


簡單的安卓應用授權認證(JNI)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.