6.Java流在Android中的应用

字节流有哪些?

以输出流为例,输入流除PrintStream外,和输出流是一一对应的

OutputStream

  1. ByteArrayOutputStream
  2. PipedOutputStream
  3. FilterOutputStream
    • BufferedOutputStream
    • DataOutputStream
    • PrintStream
  4. FileOutputStream
  5. ObjectOutputStream

使用案例

DataOutputStream dos = new DataOutputStream(
new BufferedOutputStream(
new FileOutputStream(
new File(file))));

字符流有哪些?

同样以输出流举例,出了打印流PrintWriter外,其他的输入流和输出流有着一一对应的关系
Writer

  1. CharArrayWriter
  2. PipedWriter
  3. FilterWriter
  4. BufferedWriter
  5. OutputStreamWriter
    • FileWriter
  6. PrintWriter

使用案例

BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(
new File(file)), "GBK"));

注意: 流使用到了装饰器设计模式
Component(抽象接口)
——> Concreate Component(具体实现类)
——>Decorator(装饰器,该抽象类持有Component的引用) ——>Concreate Component(具体实现类)

IO实践之dex文件加密

Apk文件是由哪些信息组成的?如何反编译Apk?

apk文件是由META-INF(签名文件)、res(资源文件)、AndroidManifest.xml(清单文件)、classes.dex(应用的代码)、resources.arsc组成,可以通过ZipFile解压缩apk文件得到上面的组成部分

加固的方案有哪些?

  • 反模拟器 (发现模拟器在运行我们的apk,就停止核心代码的运行)
  • 代码虚拟化 (自己创建一个虚拟执行引擎,然后将为我们的代码转换成自定义的指令进行虚拟执行)
  • 加密 (我们的核心可执行代码以压缩或加密的形式存在,我们将代码分割成多个小段,前面一段代码在执行时,先把后面一段代码从内存中解密,然后再去执行解密后的代码,如此一块一块迭代执行)

加固总体框架是怎样的?

  • 获取到apk源dex文件(ZipFile类解压缩,过滤dex文件,抛弃META-INF目录下文件)
  • 源dex文件进行加密(如:AES加密,获取到dex文件字节码数据byte[],对每一个字节进行加密)
  • 生成壳dex文件(壳module用make project生成aar包,解压缩aar包得到jar包,然后将jar包生成壳dex文件(cmd命令代码实现))
  • 源dex文件+壳dex文件+apk除源dex文件之外的所有文件,重新生成一个新的apk文件(ZipFile打包成apk)
  • 新的apk文件进行签名(cmd命令,jarsigner),替换掉META-INF中的文件才能运行,否则运行会报错

dex文件由哪些部分组成?

  • 文件头 (header,包含文件的大小、签名、格式等)
  • 索引区
    • string_ids (字符串的索引)
    • type_ids (类型的索引)
    • proto_ids (方法原型的索引)
    • field_ids (域的索引)
    • method_ids (方法的索引)
  • 数据区
    • class_defs (类的定义区)
    • data (数据区)
    • link_data (链接数据区)

apk的打包流程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Android 应用, Kotlin 可能会取代 Java 作为首选的开发语言。谷歌在 2017 年推出了 Android KTX 框架, 并将 Kotlin 作为 Android 开发的一种首选语言。此外, Kotlin 还具有许多优点, 例如更简洁的语法和更强大的编译器检查, 这使得它成为许多 Android 开发人员的首选语言。不过, Java 仍然是 Android 开发使用最广泛的语言, 并且可能会持续使用很长时间。 ### 回答2: 在Android应用开发Java是否会被Kotlin取代仍然是个有争议的话题。尽管Kotlin在近年来在Android开发社区日益流行,但Java仍然是最常用的编程语言之一。 一方面,Kotlin具有许多优点,使其对开发者来说非常有吸引力。它是一种现代的、类型安全的编程语言,具有简洁、易读的语法和更少的样板代码。Kotlin还提供了许多方便的功能,如空安全等,可以在编写Android应用时减少错误和漏洞的发生。此外,Kotlin与Java兼容,因此可以很容易地将现有的Java代码与新的Kotlin代码集成在一起。 另一方面,Java仍然是广泛使用的编程语言,特别是在传统的企业级应用开发。许多Android开发者已经习惯了使用Java,他们可能没有动力或时间学习和适应新的语言。此外,许多旧有的Android库和框架也是用Java写的,这意味着Java仍然是一种必需的语言。 综上所述,尽管Kotlin在Android开发的流行度逐渐增加,但Java不太可能完全被Kotlin取代。然而,Kotlin作为一种现代化的语言,为开发者提供了更多选择,并且在未来会继续发挥重要作用。对于新的Android开发项目,开发者可以自由选择Java或Kotlin,根据自己的需求和偏好做出决定。 ### 回答3: 在Android应用,目前没有打算完全取代Java的计划。尽管Google在2017年宣布将Kotlin作为Android开发的官方语言,并为其提供了全面的支持和工具,但这并不意味着Java会被完全取代。 首先,JavaAndroid开发领域具有很强的生态系统和广泛的应用基础。许多现有的Android应用都是用Java编写的,这些应用在市场上使用很广泛。虽然可以逐步将这些应用迁移到Kotlin,但迁移过程可能需要一定的时间和资源。因此,Java仍然是维持和改进这些应用的重要工具。 其次,Java仍然是Android开发的主要教学语言。许多开发者在学习和入门Android开发时首先学习JavaJava的学习资源丰富,社区支持也很强大,这使得Java仍然是新手开发者学习Android的首选语言。 此外,Java和Kotlin具有不同的特性和语法风格。Java是一种强大的编程语言,可以广泛应用于各种场景,而Kotlin则是一种更现代化和灵活的语言,提供了一些Java不具备的功能。在某些特定的情况下,开发者可能会选择Kotlin来编写Android应用,以发挥其更高的生产力和更简洁的代码。 因此,目前来看,JavaAndroid应用开发的地位依然稳固。尽管有逐渐增多的开发者选择使用Kotlin来编写Android应用,但Java仍然是一种重要的语言,并且继续被广泛使用。这两种语言在Android开发都有自己的优势和适用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值