天问

  • Blog
  • 热修复与动态加载
  • python爬虫
  • 专栏
    • 热修复与动态加载
    • NDK开发
    • 设计模式与架构
    • React Native
  • 好文转载
    • 计算机技术
    • 投资理财
    • 摄影与拍照技巧
  • 投稿
  • 关于本站及隐私政策
  • Github
计算机技术
安卓开发

使用Android Studio导出release的aar并进行混淆

通常情况aar是作为一个libary模块供主工程引用的,如果我们要导出aar也很容易,选中libary模块,然后点击AS上方菜单栏的build->make module,如图所示: 然后就会在libary模块的build/ouputs/aar/目录下生成编译好的aar,但是这样直接Make Module编译出来的aar默认是debug版本的,如果想要编译出release版本的aar需要在AS左下角的Build Variants中选择编译类型为release,如下所示: 然后Make Module之后outpu…

2018年4月29日 0条评论 2296点热度 4人点赞 天问 阅读全文
热修复

从Instant Run看安卓Application的启动流程与替换

关于Application启动流程网上有很多文章分析,但绝大多数文章都是为了讲Application启动流程而讲的,因此绝大多数文章就是分析源码流程,但是大家都懂的,Application启动流程的这个源码是相当的的复杂,绝大多数人看了不一定能够很好的理解,因为源码细节太繁琐,只见树木不见森林,没有一个很好的目标感,而我觉得分析源码最好的方式就是带着某个问题去看,即我要分析这个源码是为了解决什么疑惑?这样才能更好的做到点到为止,能放能收,不过分注重细节,也不漏掉某些重要细节(比如关于Instant Run中类加载器…

2018年4月15日 0条评论 1256点热度 16人点赞 天问 阅读全文
字节码

使用ASM操作java字节码

通常我们要修改一个java函数的方法都是修改这个函数的源码文件,然后重新编译生成修改后的字节码文件,如果代码我们自己写的还好,我们可以很方便的修改源码,但是考虑另外一个场景,如果代码不是我们自己写的,比如我们只有一个可执行jar包,但没有这个jar包的源码,然后想要修改这个类中的某个函数的功能,再比如一般而言jar包的开发者在在开发该jar包时肯定会有一些调试日志打印的,但是在发布该jar包的时候一般会通过混淆规则去除这些调试日志,我们在分析这些jar包的某些逻辑的时候可能需要像其开发者一样在运行时打印一些关键参数…

2018年3月22日 0条评论 1312点热度 8人点赞 天问 阅读全文
热修复

从ClassNotFoundException看java的类加载机制和Instant Run类加载部分的设计

我们都知道java中的类加载机制采用的是双亲委派机制(其实更严格的说法应该是未经加载过的类采用双亲委派机制加载,已经加载过的不是)。利用这种特性我们可以做到自定义ClassLoader加载额外路径的jar进而做到代码热更新,考虑如下一种场景:在宿主jar中存在一个类X,在该类中存在一个函数someFun,在另外一个插件jar中包含一个和宿主jar同包名同类名的类X,在该类中也存在和宿主jar中X的相同签名的函数someFun,在宿主jar的main函数中调用了类X的someFun函数,那么如何做到让main函数中调…

2018年2月23日 0条评论 1383点热度 16人点赞 天问 阅读全文
安卓开发

从System.loadLibrary()的执行流程看UnsatisfiedLinkError的几种情况

最近公司某部门的一款音乐产品反馈在某些用户的手机上启动有时候会出现崩溃,因为该产品接入了我们部门的云捕SDK,所以可以从后台看到崩溃后上传的日志,是加载某个so的时候出现了UnsatisfiedLinkError(强烈推荐开发者接入使用网易云捕SDK,http://crash.163.com/),然后我就在网上搜索了下UnsatisfiedLinkError相关的信息,发现网上包含了大量关于此异常的文章,在了解这个异常的过程中我意识到这个异常是一个对于上线产品而言出现概率较小(因为上线产品肯定是经过测试的,因此出现…

2017年12月9日 0条评论 1599点热度 5人点赞 天问 阅读全文
安卓安全

安卓源码的下载与编译

最近在研究对脱壳工具dexhunter进行自己需求的定制的时候涉及到了安卓源码的编译,因此记录一下,编译安卓源码是一个坑坑不息之路,各种让你意向不到的错误都会出现,而且因为编译环境的不同,每个人出现的错误可能完全不一样,因此在网上找的解决方案可能对你的环境而言根本不起作用,谁搞过谁就知道,如果说你能够第一次编译就成功的话,那我只能说你可以去买彩票了。 PS:最好自己下载安卓源码编译而不要使用从网上别人分享的网盘下载下来的源码编译,自己在使用别人下载的源码编译的时候遇到过各种奇怪的问题,但是使用自己从谷歌官网下载的源…

2017年10月21日 0条评论 1276点热度 15人点赞 天问 阅读全文
热修复

dex中类的加载流程和unexpected DEX异常

在也谈安卓dex的动态加载与MultiDex和热修复中我们讲解了安卓dex文件的加载过程,那么dex文件加载到内存后类的加载流程是怎样的呢?为何被打上预校验的类与其引用的类不在同一个dex中会出现unexpected DEX异常呢?这就需要从安卓中类加载的native层代码寻找答案了。从native代码我们能够更加清楚的明白QQ空间热修复的插桩字节码的原理以及比QQ空间更优的解决办法。 前面说过加载一个类起始于ClassLoader中的loadClass方法,关键函数的调用流程如下: ClassLoader.loa…

2017年10月15日 0条评论 1207点热度 12人点赞 天问 阅读全文
热修复

也谈安卓dex的动态加载与MultiDex和热修复

在前面从java虚拟机ClassLoader到安卓dex动态加载之ClassLoader动态加载jar的文章中讲到了java中jar的动态加载,而安卓和java一样都是使用的java语言开发,因此最终文件肯定还是字节码,只不过安卓不在使用java虚拟机来加载这些字节码,而且字节码也不再是.class/jar的文件格式,而是安卓特有的dex文件格式。也正因为这些相似性,java中的类加载机制被安卓给借鉴过来了,只不过安卓实现了自己的类加载器,而不在是java中的那些ClassLoader,因为要加载的文件格式已经不同…

2017年10月8日 0条评论 1094点热度 10人点赞 天问 阅读全文
安卓安全

使用ClassLoader动态加载jar从而实现对jar包加密

最近一直在看安卓dex动态加载相关的文章,如MultiDex,热修复等。而这些本质上是使用ClassLoader进行dex的动态加载。因此回过头来把java中的ClassLoader这块仔细的研究了下,虽然之前也了解过Class Loader相关知识,但这次有了更加深刻的理解。 我们知道java虚拟机执行的是java字节码文件,即.class文件,当我们在Eclipse中创建一个java工程然后进行编译的时候会在工程的bin目录下生成我们在项目中创建的java文件对应的字节码文件,但是有没有想过一个问题就是我们项目…

2017年9月17日 0条评论 2234点热度 6人点赞 天问 阅读全文
python

从Wnidows迁移到linux系统引起的bug谈谈python中subprocess.Popen的shell参数

最近在将某个window系统上的python脚本迁移到linux服务器上进行测试的时候发现原本在window运行好好的工程在linux上却出现了问题,不能达到预期执行效果。通过日志可以判断出是在使用python的subprocess.Popen执行某个java命令的时候未生效导致的。当时百思不其解,因为这个工程在window上已经运行过很多次了,是可以正常工作的,为何迁移到linux上就不能正常工作了呢? 在项目的Utils.py模块中有如下的一个函数用来使用subprocess.Popen执行某个命令 def e…

2017年9月2日 0条评论 1934点热度 6人点赞 天问 阅读全文
安卓开发

安卓ndk开发使用so注意事项集锦

今天在使用so库的时候出现了一个如下错误,简单记录下。 错误详情如图,出现java.lang.UnsatisfiedLinkError错误,这个错误一般是调用本地接口时会出现,在loadLibary时找不到so库而导致findLibrary returned null。这个原因就是so库未被打包到apk中,出现这个错误可以用压缩软件打开apk看下lib目录下是否存在要load的so文件。 出错场景: 自己的项目工程的目录结构如图: 其中的jni目录存放的是C++代码和android.mk/application.m…

2017年8月25日 0条评论 787点热度 3人点赞 天问 阅读全文
12345

天问

追梦追自由,穷则独善其身,达则兼济天下

最新 热点 随机
最新 热点 随机
【插件化】从插件化看Activity的启动流程 你真的会用View的post方法吗 【设计模式之】适配器模式 【设计模式之】代理模式与动态代理技术(JDK自带与CGLIB)
从Wnidows迁移到linux系统引起的bug谈谈python中subprocess.Popen的shell参数 超级易懂爬虫系列之使用多线程爬取妹纸图 【设计模式之】代理模式与动态代理技术(JDK自带与CGLIB) 【React Native】使用Code Push进行热更新
小伙伴们(排名不分先后)

尼古拉斯赵四

布兰柯基

 

COPYRIGHT © 2022 天问 ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang