Gradle+ASM實戰(zhàn)——關于隱私政策的那些思考

前言

需求背景

  • 12月底換了新公司译秦,新公司的項目架構需要重構死宣,所以也就有了上篇文章:BasicLibrary——基于kotlin+jetpack+mvvm封裝一套框架威始,提高Android開發(fā)效率
  • 同時公司項目在整改隱私政策赞庶,其中有個需求就是當彈出隱私政策胖缤,點擊取消應該進入簡版app而不是直接殺死
  • 簡版app其實有很多做法剩燥,一慢逾、直接做個h5,二灭红、限制部分功能侣滩,三、進入首頁变擒,但是點擊任何按鈕彈出需要授權的隱私彈框
  • 今天我們主要講第三種方式

解決思路

  • 每個點擊按鈕點擊事件之前進行判斷進行攔截
view.setOnClickListener(new OnClickListener() {
       public void onClick(View var1) {
                //isIntercept()自己設置是否攔截事件
                boolean isIntercept =isIntercept();
                if(!isIntercept){
                      return;
               }
              //原本的事件處理
            }
});
  • 弊端:弊端其實很明顯君珠,如果有100個點擊事件,需要每個點擊之前都拷貝一份
  • 這時候我們就可以考慮用ASM字節(jié)碼插樁娇斑,自動在每個點擊事件之前添加攔截策添,我們只需要需要攔截的時候設置攔截事件就可以
  • 直接看我們已經(jīng)做好的ASM編譯后的代碼


    image.png

功能介紹

  • 可動態(tài)配置是否開啟插件,默認是開啟
  • 可動態(tài)設置方法對點擊事件處理之前進行攔截
  • 可獲取方法的耗時時間

怎樣使用

ASM插件依賴
Add it in your root build.gradle at the end of repositories:

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "io.github.peakmain:plugin:1.0.0"
  }
}

apply plugin: "com.peakmain.plugin"

攔截事件sdk的依賴

  • Step 1. Add the JitPack repository to your build file
    Add it in your root build.gradle at the end of repositories:
    allprojects {
        repositories {
            ...
            maven { url 'https://jitpack.io' }
        }
    }
  • Step 2. Add the dependency
    dependencies {
           implementation 'com.github.Peakmain:AsmActualCombat:0.1.10'
    }

使用文檔

  • 1毫缆、Application中初始化
  SensorsDataAPI.init(this);
  • 2唯竹、動態(tài)設置是否開啟插件
    在gradle.properties中設置以下參數(shù),false代表不關閉插件苦丁,true表示關閉插件摩窃,默認是false
peakmainPlugin.disableAppClick=false
  • 3、在要攔截的頁面設置攔截事件
 SensorsDataAPI.getInstance().setOnUserAgreementListener(new SensorsDataAPI.OnUserAgreementListener() {
           @Override
            public boolean onUserAgreement() {
            
        }
 })

完整的舉例代碼如下:

    private void setUserAgreementListener(Activity activity) {
        isAcceptUserPrivacy = (Boolean) PreferencesUtils.getInstance(this).getParam(Constants.HAS_ACCEPT_USER_PRIVACY, false);
        SensorsDataAPI.getInstance().setOnUserAgreementListener(new SensorsDataAPI.OnUserAgreementListener() {
            @Override
            public boolean onUserAgreement() {
                if (!isAcceptUserPrivacy) {
                    //沒有同意
                    AlertDialog dialog = new AlertDialog.Builder(activity)
                            .setContentView(R.layout.dialog_user_agreement)
                            .setCancelable(false)//點擊空白不可取消
                            .show();
                     //設置用戶協(xié)議的攔截事件為NULL
                    SensorsDataAPI.getInstance().setOnUserAgreementListener(null);
                    dialog.setOnClickListener(R.id.stv_refuse, v -> {
                        //取消按鈕的點擊事件
                        dialog.dismiss();
                        setUserAgreementListener(activity);
                    });
                    dialog.setOnClickListener(R.id.stv_agreement, v -> {
                    //同意按鈕的點擊事件
                        com.peakmain.ui.utils.ToastUtils.showLong("同意了");
                        PreferencesUtils.getInstance(activity).saveParams(Constants.HAS_ACCEPT_USER_PRIVACY, true);
                        dialog.dismiss();
                      
                    });
                }
                return isAcceptUserPrivacy;
            }
        });
  • 4芬骄、獲取方法耗時時間
    在需要獲取耗時時間的方法上方添加以下注解
 @LogMessageTime

總結

  • 使用起來還是很方便的,如果大家也有相關需求:希望在點擊事件處理事情之前進行相關代碼攔截鹦聪,都可以使用這個庫
  • 當然账阻,大家最好自己下下來,在自己的項目中跑跑泽本,然后改成自己的淘太,可以直接讓自己的B格上升,讓你的領導對你刮目相看
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末规丽,一起剝皮案震驚了整個濱河市蒲牧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赌莺,老刑警劉巖冰抢,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異艘狭,居然都是意外死亡挎扰,警方通過查閱死者的電腦和手機翠订,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遵倦,“玉大人尽超,你說我怎么就攤上這事∥嗵桑” “怎么了似谁?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵被去,是天一觀的道長抗俄。 經(jīng)常有香客問我,道長冰啃,這世上最難降的妖魔是什么龙致? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任蛀缝,我火速辦了婚禮,結果婚禮上目代,老公的妹妹穿的比我還像新娘屈梁。我一直安慰自己,他們只是感情好榛了,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布在讶。 她就那樣靜靜地躺著,像睡著了一般霜大。 火紅的嫁衣襯著肌膚如雪构哺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天战坤,我揣著相機與錄音曙强,去河邊找鬼。 笑死途茫,一個胖子當著我的面吹牛碟嘴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播囊卜,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼娜扇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了栅组?” 一聲冷哼從身側響起雀瓢,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玉掸,沒想到半個月后刃麸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡排截,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年嫌蚤,在試婚紗的時候發(fā)現(xiàn)自己被綠了辐益。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡脱吱,死狀恐怖智政,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箱蝠,我是刑警寧澤续捂,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站宦搬,受9級特大地震影響牙瓢,放射性物質發(fā)生泄漏。R本人自食惡果不足惜间校,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一矾克、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憔足,春花似錦胁附、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揭绑,卻和暖如春弓候,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背他匪。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工菇存, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邦蜜。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓撰筷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親畦徘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容