`
coderplay
  • 浏览: 578010 次
  • 性别: Icon_minigender_1
  • 来自: 广州杭州
社区版块
存档分类
最新评论

proguard是怎样把类的方法连接起来

阅读更多
java 代码
  1. //MethodLinker.java里面
  2. // 这个函数实现了MemberVisitor的接口.
  3. public void visitAnyMember(Clazz clazz, Member member)
  4. {
  5. // 取得类成员的名称和描述符
  6. String name = member.getName(clazz);
  7. String descriptor = member.getDescriptor(clazz);
  8. // 特殊情况: 如果是初始化或构造函数,保持原样不变
  9. // 我们这儿忽略它
  10. if (name.equals(ClassConstants.INTERNAL_METHOD_NAME_CLINIT) ||
  11. name.equals(ClassConstants.INTERNAL_METHOD_NAME_INIT))
  12. {
  13. return ;
  14. }
  15. // 取得链表中最后一个方法
  16. Member thisLastMember = lastMember(member);
  17. // 看看是否已经存在一个相当名称和描述符的方法
  18. String key = name + ' ' + descriptor;
  19. Member otherMember = (Member)memberMap.get(key);
  20. if (otherMember == null )
  21. {
  22. // 把新的类方法存到map中
  23. memberMap.put(key, thisLastMember);
  24. }
  25. else
  26. {
  27. // 从其它方法链表中找到最后一个元素
  28. Member otherLastMember = lastMember(otherMember);
  29. // 检查两个链表是否以相同元素为尾结点
  30. if (!thisLastMember.equals(otherLastMember))
  31. {
  32. // 以库成员为尾结点,合并两个链表
  33. if (otherLastMember instanceof LibraryMember)
  34. {
  35. thisLastMember.setVisitorInfo(otherLastMember);
  36. }
  37. else
  38. {
  39. otherLastMember.setVisitorInfo(thisLastMember);
  40. }
  41. }
  42. }
  43. }
分享到:
评论

相关推荐

    Android连接MySQL方法

    在Android开发中,连接到MySQL数据库通常用于实现服务器端数据的存取,这对于构建网络应用程序至关重要。本项目提供了一个示例工程源码,演示了如何在Android应用中连接到远程MySQL数据库。以下将详细讲解这一过程...

    【Android解决方案】连接SQL

    在Android开发中,连接SQL数据库是一项常见的需求,尤其是在构建数据驱动的应用时。本文将深入探讨如何在Android环境中使用SQL,以及如何通过JTDS驱动程序实现与远程SQL Server的连接。 首先,Android原生支持...

    蓝牙4.0连接测试代码

    6. **断开连接**:完成数据交互后,需要调用`BluetoothGatt.disconnect()`和`BluetoothGatt.close()`方法安全地断开连接并释放资源。 压缩包中的文件列表包含了构建和运行Android项目的必要组件: - `.classpath`...

    MusicPlay.zip

    - `proguard.cfg`:这是ProGuard的基本配置文件,用于指定哪些类、方法和字段应该被保留,哪些可以被删除或混淆。混淆是将公开的类和方法名改为难以理解的形式,以提高代码的安全性。 - `proguard (3).cfg`和`...

    java混淆器

    Java混淆器是一种用于保护Java应用程序源代码安全的工具。它通过改变代码的可读性和可理解性,使得恶意用户难以反...同时,对于数据库相关的类和方法,混淆规则需要谨慎设定,确保不影响到数据库连接和查询的正确执行。

    以太网jar包

    1. `framework-noproguard.classes.jar`:这是一个未经过 ProGuard 优化的框架类库,包含了 Android 框架中的原始类,用于调试或研究目的。ProGuard 是一个代码混淆工具,用于减少代码大小并提高应用安全性,但在...

    android的蓝牙通信,支持蓝牙模块(稳定可用已编译,注释完美)

    Android提供了BluetoothAdapter类作为主要接口来处理蓝牙功能,包括开启/关闭蓝牙,扫描蓝牙设备,以及建立连接。BluetoothDevice类代表一个蓝牙设备,而BluetoothSocket则用于创建数据传输通道。 2. **蓝牙搜索与...

    TestBrightness.zip

    在“proguard.cfg”中,开发者可以定义保留某些类或方法不被混淆,这对于调试和理解代码运行过程非常有帮助。 2. **.classpath**: 这个文件包含了项目构建路径的所有信息,包括Java库、源代码目录等。在Android ...

    诗歌查询类,访问网络。

    标题中的“诗歌查询类,访问网络”表明这是一个Android应用程序,主要功能是检索和展示诗歌,同时需要通过网络连接获取数据。这个应用可能是从一个在线诗词数据库或者API接口获取信息,为用户提供浏览和搜索诗词的...

    android blue tooth 聊天实例

    接着,我们要创建一个蓝牙服务类,该类将处理蓝牙的开启、搜索、连接和数据传输。在`src`目录下,可以创建一个名为`BluetoothService`的Java类,继承自`Service`。这个类中,我们需要实现`BluetoothAdapter`的回调...

    android WIFI 扫描 Demo

    你可以把这些信息展示在界面上,让用户选择连接的网络。 在`res`目录下,`layout`文件夹通常会包含一个XML布局文件(如`activity_main.xml`),用于设计应用程序的界面,可能包含一个按钮用于触发扫描操作,以及一...

    java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource

    在这个特定的错误中,我们看到的是`org.apache.commons.dbcp.BasicDataSource`,这是Apache Commons DBCP库中的一个类,用于管理数据库连接池。这个异常通常意味着在应用的类路径(ClassPath)中没有包含DBCP的jar...

    【国开搜题】国家开放大学 一网一平台 Android网络开发技术19 期末考试押题试卷.docx

    3. **解析**: 获取 WiFi 当前状态的正确方法是 `WifiManager.getWifiState()`。这个方法返回 WiFi 当前的状态,如是否已连接等信息。 #### 七、使用 MediaPlayer 播放 mp3 文件 1. **题目**: 使用 MediaPlayer 播放...

    安卓Android源码——AidlDemo(简单aidl的例子).7z

    客户端通过`bindService`方法连接到服务端,并传入`Intent`对象,指定要绑定的服务。连接成功后,`onServiceConnected`回调会返回一个实现了AIDL接口的Binder对象,客户端可以通过这个对象调用服务端的方法。 6. *...

    复件 weiboSina.zip

    它们可能包含了应用的默认配置信息,如数据库连接字符串、服务器端口等,是理解程序运行环境的关键。 2. **assets**:在Android开发中,这是一个特殊目录,用于存放非编译代码的资源,比如字体、音频文件、JSON数据...

    安卓蓝牙打印源码

    在安卓平台上实现蓝牙打印功能,通常涉及到多个技术层面,包括蓝牙连接管理、数据格式转换以及打印指令的发送等。以下是对这些关键知识点的详细说明: 1. **蓝牙连接管理**: - 安卓系统提供了`BluetoothAdapter`...

    Android高级应用源码-蓝牙项目有注释BluetoothComm.zip

    开发者通常会创建一个或多个类来管理蓝牙的连接、扫描设备、发送和接收数据等功能。这里的代码可能使用了Android的`BluetoothAdapter`、`BluetoothDevice`、`BluetoothSocket`等API进行编程,通过这些API可以实现...

    wifi状态实时更新与控制系统wifi

    1. **实时状态更新**:在Android系统中,开发者可以通过调用`ConnectivityManager`类的`getNetworkInfo()`方法来获取网络连接的状态,包括WiFi的状态。当WiFi状态发生改变时,系统会广播`CONNECTIVITY_ACTION`意图,...

    环境变量配置和eclipse插件的安装方法

    ### 环境变量配置与Eclipse插件安装方法 #### 一、环境变量配置 在进行开发工作之前,正确地配置环境变量是至关重要的一步。环境变量可以帮助系统找到所需的库和其他资源,对于Java开发来说尤其如此。下面将详细...

    Android SDK Platform Tools

    6. **dexdump**:此工具可以分析和打印.DEX文件(Android应用的字节码文件)的详细信息,包括类、字段和方法定义,有助于理解和调试应用的运行时行为。 7. **apksigner**:用于签名APK文件,确保应用的完整性和安全...

Global site tag (gtag.js) - Google Analytics