zoukankan      html  css  js  c++  java
  • [Android]proguard重新编译和如何不混淆第三方jar包

    转载自:http://glblong.blog.51cto.com/3058613/1536516

    一、ant安装、环境变量配置及验证

    (一)安装ant

    到官方主页http://ant.apache.org下载新版(目前为Ant1.9.4)的ant,得到的是一个apache-ant-1.9.4-bin.zip的压缩包。将其解压到你的硬盘上,例如:C:apache-ant-1.9.4。

    (二)配置环境变量

    window中设置ant环境变量:

    ANT_HOME    C:/ apache-ant-1.9.4

    path             C:/ apache-ant-1.9.4/bin

    classpath      C:/apache-ant-1.9.4/lib

    注意:

    配置环境变量:我的电脑----属性-----高级----环境变量

    如:ANT_HOME:C:apache-ant-1.9.4

        PATH:%ANT_HOME%in (为了方便在dos环境下操作)

    实验了总是失败,没办法换成地址 C:/ apache-ant-1.8.1/bin,而不再使用变量。。。成功了。。

    (三)验证ant

    为了验证ant是否成功安装,可以进行如下操作:

    依次选择:开始->运行->cmd,输入如下命令:ant

    如果出现如下内容,说明安装成功:

    Buildfile: build.xml does not exist!

    Build failed

    wKiom1Ph9nHz2wx3AACfOJYRBFY704.jpg

    【说明ant安装成功!因为ant默认运行build.xml文件,这个文件需要我们建立。】

    二、运行ant打包proguard

    cmd进入proguard目录下的build.xml所在目录,如我的:

    D:Program Filesadt-bundle-windows-x86_64-20130729sdk oolsproguarduild

    然后运行ant便会在lib目录下重新生成新的的proguard.jar文件。

    wKioL1Pi2oiiiAruAAHydpv5G9Q345.jpg

    如何不混淆第三方jar包

    今天遇到了一个混淆的问题,怎么用语法解决都不行

    看了下错误日志:发现是在proguard读取jar包里的类的时候,有个类导致了java I.O异常

    由于是第三方的包,于是就去跟第三方沟通了。

    结果第三方也无法解决。

    这个时候我本来的思路是重新修改proguard的源代码,在读取到这个有问题的jar包时跳过,并且直接编译一个自定义的版本。

    做到一半的时候被老大点醒了,于是想到之前的另一种方法:这种方法还是我先试过的,真是惭愧。

    当你怎么-keep 第三方jar包都没有用的时候,参考一下下面方法:

    1,拿一个未混淆的包,对其反编译,在反编译出来的smali文件中,找到第三方jar包的路径:

    D:JianTiLianYunaidupacker empsmalicomzhangyueutil

    这是我的一个路径,然后把出问题的包的smali文件全拷贝了;

    2,对你原来的包进行混淆,可这时混淆失败怎么办呢?

    直接打开jar包,将出问题的类删除掉,然后rebuild一下项目,再混淆;

    如果是整个JAR包,且这些jar包被代码使用了,不能随意删。

    那这个时候,理论上可以手动引用该jar包(不要放在lib文件夹中),

    在android studio中,需要在项目设置里将dependency中的改jar包的scope改为provided,如果是compiled还是会报混淆错误。

    然后,混淆成功!

    3,将混淆成功的apk反编译,手动加入第一步中获取到的smali文件,再重新打包。

    这时候发现程序正常运行!

  • 相关阅读:
    ChromeDriver下载
    LR基础理论详解
    python中assert详解
    python定义类()中写object和不写的区别
    python list初始化技巧
    python list中append()方法和extend()方法区别
    python生成器(generator)、迭代器(iterator)、可迭代对象(iterable)区别
    使用__slots__节省python内存技巧
    lambda表达式详解
    python处理数据问题详解
  • 原文地址:https://www.cnblogs.com/androidkay/p/5444134.html
Copyright © 2011-2022 走看看