幫助中心 | 我的帳號 | 關於我們

ASM全埋點開發實戰

  • 作者:王灼洲//張偉|責編:張天怡
  • 出版社:人民郵電
  • ISBN:9787115612618
  • 出版日期:2023/07/01
  • 裝幀:平裝
  • 頁數:388
人民幣:RMB 99.8 元      售價:
放入購物車
加入收藏夾

內容大鋼
    本書由業內專業團隊神策數據的專業人士編寫,結合實戰案例,深入淺出地介紹了ASM技術和Android全埋點技術。
    作者從神策數據服務超過2000家客戶的經歷中,發現了行業用戶對全埋點技術的迫切需求。本書針對這一點,詳細、客觀地闡述了ASM在Android全埋點中的應用,涵蓋各種真實商業場景,並清晰地講解其技術原理和實現步驟,以幫助用戶利用好全埋點技術的特長和優勢。
    本書作為一本技術參考書,特別適合非專業開發工程師在日常工作中使用。

作者介紹
王灼洲//張偉|責編:張天怡

目錄
1 Gradle插件介紹
  1.1 什麼是Gradle插件
  1.2 Gradle基礎知識
    1.2.1 學習前提
    1.2.2 Gradle項目結構
    1.2.3 生命周期
    1.2.4 Project API介紹
    1.2.5 Gradle任務介紹
    1.2.6 生命周期回調
    1.2.7 Gradle執行流程
    1.2.8 獲取屬性的幾種常見方式
    1.2.9 任務執行后的幾種狀態
    1.2.10 增量構建
  1.3 插件類型
    1.3.1 腳本插件
    1.3.2 buildSrc插件
    1.3.3 單獨項目插件
    1.3.4 單獨項目插件優化
    1.3.5 插件使用方式
    1.3.6 小結
  1.4 Gradle擴展
    1.4.1 什麼是擴展
    1.4.2 ExtensionContainer API介紹
    1.4.3 創建擴展
    1.4.4 添加和查找擴展
    1.4.5 擴展嵌套
    1.4.6 NamedDomainObjectContainer
  1.5 綜合示例
    1.5.1 概述
    1.5.2 集成步驟
  1.6 插件發布
    1.6.1 Gradle Plugin Portal
    1.6.2 Maven Central簡介
    1.6.3 上傳到Maven Central
  1.7 插件調試
    1.7.1 輸出日誌
    1.7.2 斷點調試
  1.8 小結
2 Transform介紹
  2.1 Android應用的構建
    2.1.1 什麼是APK文件
    2.1.2 什麼是DEX文件
    2.1.3 Android應用的構建流程
  2.2 Transform簡介
  2.3 Transform的簡單應用
  2.4 Transform API詳細介紹
    2.4.1 getName()
    2.4.2 getInputTypes()
    2.4.3 getScopes()
    2.4.4 transform()

    2.4.5 getReferencedScopes()
    2.4.6 isIncremental()
    2.4.7 isCacheable()
    2.4.8 getSecondaryFiles()
  2.5 Transform模板
  2.6 併發編譯
  2.7 Transform原理介紹
  2.8 小結
3 位元組碼基礎
  3.1 Java虛擬機
  3.2 javap工具介紹
  3.3 特定名稱介紹
    3.3.1 欄位描述符、方法描述符
    3.3.2 全限定名
    3.3.3
  3.4 .class文件結構
    3.4.1 初識 .class文件
    3.4.2 .class文件的組成
  3.5 小結
4 位元組碼指令
  4.1 Java虛擬機棧
  4.2 棧幀
  4.3 局部變數表
  4.4 操作數棧
  4.5 位元組碼指令介紹
    4.5.1 載入和存儲指令
    4.5.2 算術指令
    4.5.3 類型轉換指令
    4.5.4 對象的創建和操作指令
    4.5.5 操作數棧管理指令
    4.5.6 控制轉移指令
    4.5.7 方法調用和返回指令
    4.5.8 異常拋出指令
    4.5.9 同步指令
  4.6 方法調用
    4.6.1 invokevirtual指令
    4.6.2 invokestatic指令
    4.6.3 invokespecial指令
    4.6.4 invokeinterface指令
    4.6.5 方法調用指令的區別和方法分派
    4.6.6 invokedynamic指令
  4.7 案例分析
    4.7.1 System.out.println
    4.7.2 switch-case與String
    4.7.3 for循環原理
    4.7.4 try-catch-finally原理
  4.8 載入、鏈接、初始化
    4.8.1 載入時機
    4.8.2 載入過程
    4.8.3 位元組碼剖析

  4.9 位元組碼指令偏移
  4.10 Java虛擬機中的數據類型
    4.10.1 基本數據類型
    4.10.2 引用數據類型
  4.11 小結
5 ASM基礎
  5.1 ASM簡介
  5.2 ASM組成
  5.3 ClassReader API介紹
    5.3.1 構造方法
    5.3.2 accept()方法
  5.4 ClassVisitor API介紹
    5.4.1 ClassVisitor()構造方法
    5.4.2 visit()
    5.4.3 visitSource()
    5.4.4 visitModule()
    5.4.5 visitNestHost()
    5.4.6 visitNestMember()
    5.4.7 visitInnerClass()
    5.4.8 visitOuterClass()
    5.4.9 visitField()
    5.4.10 visitMethod()
    5.4.11 visitAnnotation()
    5.4.12 visitTypeAnnotation()
    5.4.13 visitPermittedSubclass()
    5.4.14 visitRecordComponent()
    5.4.15 visitEnd()
  5.5 ClassWriter API介紹
    5.5.1 構造方法
    5.5.2 toByteArray()
  5.6 類的轉換和修改
    5.6.1 轉換類的方式
    5.6.2 刪除Class成員
    5.6.3 增加Class成員
    5.6.4 修改Class成員
  5.7 MethodVisitor API介紹
    5.7.1 visitParameter()
    5.7.2 visitAnnotationDefault()
    5.7.3 visitAnnotation()
    5.7.4 visitTypeAnnotation()
    5.7.5 visitAnnotableParameterCount()和visitParameterAnnotation()
    5.7.6 visitAttribute()
    5.7.7 visitCode()
    5.7.8 visitInsn()
    5.7.9 visitIntInsc()
    5.7.10 visitVarInsn()
    5.7.11 visitTypeInsn()
    5.7.12 visitFieldInsn()
    5.7.13 visitMethodInsn()
    5.7.14 visitInvokeDynamicInsn()

    5.7.15 visitLabel()
    5.7.16 visitJumpInsn()
    5.7.17 visitLdcInsn()
    5.7.18 visitIincInsn()
    5.7.19 visitTableSwitchInsn()
    5.7.20 visitLookupSwitchInsn()
    5.7.21 visitTryCatchBlock()
    5.7.22 visitLocalVariable和visitLineNumber()
    5.7.23 visitFrame()
    5.7.24 visitMaxs()
    5.7.25 visitEnd()
  5.8 方法的轉換和修改
    5.8.1 方法生成
    5.8.2 刪除方法和方法體內容
    5.8.3 優化方法中的指令
  5.9 ASM工具包介紹
    5.9.1 Type
    5.9.2 TraceClassVisitor
    5.9.3 CheckClassAdapter
    5.9.4 ASMifier
    5.9.5 TraceMethodVisitor
    5.9.6 CheckMethodAdapter
    5.9.7 LocalVariableSorter
    5.9.8 GeneratorAdapter
    5.9.9 AdviceAdapter
  5.10 其他實例
    5.10.1 方法替換
    5.10.2 方法參數復用
  5.11 小結
6 ASM基礎之Tree API
  6.1 Tree API簡介
  6.2 ClassNode API介紹
    6.2.1 類的生成
    6.2.2 類的轉換和修改
  6.3 ClassNode與Core API相互轉換
    6.3.1 ClassNode的特性
    6.3.2 與Core API相互轉換
  6.4 MethodNode API介紹
    6.4.1 方法的生成
    6.4.2 方法的轉換和修改
  6.5 MethodNode與Core API相互轉換
    6.5.1 MethodNode的特性
    6.5.2 與Core API相互轉換
  6.6 Core API和Tree API如何選擇
  6.7 其他
    6.7.1 方法分析
    6.7.2 兼容性探討
    6.7.3 Attribute
    6.7.4 ASM框架分析
  6.8 小結

7 ASM實現全埋點——基礎部分
  7.1 目標
  7.2 實現步驟
    7.2.1 創建Demo工程和SDK模塊
    7.2.2 創建插件框架
    7.2.3 編寫插件邏輯
    7.2.4 驗證
    7.2.5 發布
  7.3 小結
8 ASM實現全埋點——進階部分
  8.1 黑名單
  8.2 防止多次插入
  8.3 方法前插還是后插
  8.4 支持Lambda和方法引用
    8.4.1 原因分析
    8.4.2 Lambda表達式的實現原理
    8.4.3 Lambda設計參考
    8.4.4 Hook Lambda和方法引用
  8.5 小結
9 ASM實踐分享和未來展望
  9.1 是否可以註冊多個Transform
  9.2 插入代碼是否會改變行號
  9.3 是否支持Kotlin
  9.4 ASM如何處理繼承關係
    9.4.1 ClassLoader方式
    9.4.2 類圖方式
  9.5 慎用static變數
  9.6 AGP 7的變化
  9.7 小結

  • 商品搜索:
  • | 高級搜索
首頁新手上路客服中心關於我們聯絡我們Top↑
Copyrightc 1999~2008 美商天龍國際圖書股份有限公司 臺灣分公司. All rights reserved.
營業地址:臺北市中正區重慶南路一段103號1F 105號1F-2F
讀者服務部電話:02-2381-2033 02-2381-1863 時間:週一-週五 10:00-17:00
 服務信箱:bookuu@69book.com 客戶、意見信箱:cs@69book.com
ICP證:浙B2-20060032