前言
Google LvL 是個保護apk外流氾濫的保護措施,可避免apk被外流後,還可以讓人用.
簡單來說就是固定取得來源 -> 只能從google play下載
License Verification Library (LVL)
LVL 是Google 開放用戶者驗證APP合法的機制,及最主要的目的在於,
防範付費APP外流的機制(擋谷歌生意,嘿嘿)
當然免費下載的App也是可以用的,看該開發團隊的想法.
其一般用法在於,開啟APP後便可阻擋用戶使用APP,
之前接到的暗紫做法也蠻有趣的,擋住大部分的功能,留下首頁畫面給他們看(菸)
LVL Add Your Application
下載 Library
至 SDK Manager 下載Google Play Licesing Library
導入至專案中
使用import modules至你的sdk底下找尋"/extras/google/market_licensing" , 把專案匯入其中.
選擇llibrary或 AndroidManifest把lvl library匯入其專案中,
AS 導入後,會自動幫你build, 但因為build version版本問題,這邊我換成專案目前的版本
buildToolsVersion "23.0.2"
在app的build.gradle的dependencies依赖内添加上module
1. compile project("剛剛匯入的專案名稱")
點擊 Gradle sync 應該就成功了,其他具体可以参考官方文档
實作LVL
1. 加入LVL權限
<!-- google license-->
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
參考Sample 實作專案
預備資料
- 現在google develop console 中的APP取得public key (服務與API中)
- 設定 salt 中 20個隨機參數(寫個random 跑一下吧)
加入LicenseCheckerCallback
在所要擋住的activity中 implements LicenseCheckerCallback,會增加三個抽象method, 並依照需求處理
@Override
public void allow(int reason) {
}
@Override
public void dontAllow(int reason) {
}
@Override
public void applicationError(int errorCode) {
}
初始化 google licensing
private LicenseChecker mChecker;
private void initGoogleLicense(){
String deviceId = Settings.Secure.getString(getContentResolver(),
Settings.Secure.ANDROID_ID);
mChecker = new LicenseChecker(this, new ServerManagedPolicy(this,
new AESObfuscator(SALT, getPackageName(), deviceId)), your public key);
mChecker.checkAccess(this);
}
Android 5.0+ 問題處理
如果你運行程序在Android5.0+的設備上,你會發現應用直接crash.
因為Library中的遠程綁定服務時使用的是隱式綁定,而Android5.0+已經不在支持隱式遠程綁定了,
所以我們需要修改一下Library的源碼:
首先搜索定位到LicenseChecker.java文件的checkAccess()方法,對應於源文件的第153行
改為
模擬測試
若每次測試都需要上架,會有很長得等待時間,這樣效率也不好,好在google 後台那邊有設定測試者權限
這邊可以用來模擬權限處理, 其內容如下:
使用jar檔匯入
使用project方式,並在以下路徑找尋jar檔
build/intermediates/bundles/release/
參考資料如下:
http://melodyxxx.com/2016/08/21/use_google_play_lvl/
留言列表