Android Studio 生成混淆后的jar包

昨天有个朋友问我怎么弄出个混淆后的jar包,因为不希望里面的关键代码轻易的泄露出去,我找了找一些文章,也算是完成了最终效果,这里也小记一下,免得将来需要用到了却忘了。

开发工具:Android Studio;

1.首先在工程中新建一个 Module ,这个 Module 就专门来放置我们需要进行混淆的代码,如下图:

创建玩了之后就将我们的代码拷贝到 src 。

2.接下来是编写此 Module 的 build.gradle 文件,新增一个 task,如下图所示:

具体代码如下:

task makeJar(type:proguard.gradle.ProGuardTask,dependsOn:"build"){
    delete ‘build/outputs/jar/jar2.jar‘                        //先删除输出文件夹中之前已经混淆好的旧jar
    injars ‘build/intermediates/bundles/release/classes.jar‘   //输入流的源文件地址
    outjars ‘build/outputs/jar/jar2.jar‘                       //输出流的文件地址
    configuration ‘proguard-rules.pro‘                         //混淆配置
}

然后是添加混淆配置,关于混淆的语法,网上有很多,我也没有一一记下来,用到了再去查,这里只讲和jar混淆的内容,打开混淆配置文件,加上如下代码:

-libraryjars "C:\Program Files\Java\jre1.8.0_45\lib\rt.jar"
-libraryjars "D:\Users\xxx\AppData\Local\Android\sdk\platforms\android-23\android.jar"

#代码迭代优化的次数,默认5
-optimizationpasses 5
#混淆时不会产生形形色色的类名
-dontusemixedcaseclassnames

-keep class linwg.org.jarlibrary.PublicInterface{
    <methods>;
}

-libraryjars 是声明引用了哪些 jar 包,这里我引用了 java 的 rt.jar 和android 的 android.jar;

-keep 包名.类名{} 这里是为了避免接口类和方法被混淆,若果没有这句代码,则 src 中的代码将全部被混淆,最终会报错,说这个jar包是空的。

这些都做好了以后,在控制台 Terminal 输出:gradlew makeJar 执行混淆打包任务,成功后我们会在build/outputs/jar/中找到混淆后的jar包。在其他 module中 使用这个包,我们就能看到里面真正的业务代码被混淆了,见图

混淆前:

混淆后:

其中 methodOne 和 methodTwo 都调用工具类里面的实例方法,而 methodThree 和 methodFour 调用了工具类的静态方法,最终真正的实现却在接口类中,个中缘由还需要进一步的探索,单总体来说,我们的目标还是达到了。

时间: 2024-10-12 14:05:10

Android Studio 生成混淆后的jar包的相关文章

Android NDK——使用Android Studio引用so库,jar包及module并使用JNI的正确姿势

引言 由于项目中需要用到JNI,以前虽然在Eclipse上使用过JNI和SO 文件,移植到Android Studio上的时候是花费好些力气的,也处理过不少常见的错误,而且网上很多文章都是只写了大致的步骤,忽略了很多细节,为了让新手们少走弯路,同时也是加强自己的理解,把自己一步一步的操作记录下来. 一.Android studio引入jar 不同于eclipse的配置build path,Android Studio可以通过图形界面Project Structure来配置dependencies

Android Studio使用技巧:导出jar包

转自http://blog.csdn.net/lincyang/article/details/44457799 AS中并没有独立的Module 工程,但是可以在普通的Project中加入Module.所谓的Module就是我们通常所指的模块化的一个单元,并常常以jar包的形式存在.下面以一个获取手机信息的例子演示AS中的模块化. 一.项目中新建Module File—>New Module,详细见下图.    二.导入代码到模块中 将你需要打包的代码拷进对应模块的main->java文件夹下

Android实战技巧之十二:Android Studio导入第三方类库、jar包和so库

第三方类库源码 将一网友的XMPP代码从ADT转到AS时,发现其使用了第三方类库,源码放在了lib下,直接在AS中Import project,第三方类库并没有自动导入进来,看来需要自己动手了. 项目的目录结构如下: XMPP$ ls app build.gradle gradlew import-summary.txt XMPP.iml build gradle gradlew.bat local.properties settings.gradle 1 2 3 1 2 3 将第三方源码qqE

Android studio中使用asmack的jar包的前期准备工作

1.下载相应的jar包,官网:http://asmack.freakempire.de/SNAPSHOTS/ 将下载好的jar包拷贝到工程文件的libs文件夹下 2.右击app,然后依次操作 然后点击ok就可以用了

android studio 关联项目导入,jar包导入

关于AS 开发工具的导入Eclipse 关联项目的导入 百度上有很多,但是都不全,现在我来介绍导入关联项目的导入过程 写得不好请大神指点 Eclipse 导出 选中你需要导出关联的项目 这样就多了几个文件 AS 导入 首先在你创建的的项目里面 ,选中项目 -> 右键 点击  +  选中开发模式 选中导入项目 找到项目地址 导入成功就是这样的 报错了 原来是版本号不对,改一下跟你现在AS使用的版本号就可以了 右键选中 项目 -> open module settings  打开选中你刚刚导入的关

Android studio的深坑 导jar包重复的异常处理

导包重复这个问题折磨了整整一天!! 第一个方法在gradle文件下看看有没有重复的包  如果有那么一切都是浮云分分钟搞定 ,最可恶的是在gradle里面没有. 在gradle里面找不到的话就要考虑一下去项目根目录查看了  在项目的根目录里有一个.idea文件夹.在该文件夹下有一个 libraries目录这里把项目中导入的包编译成了xml文件  把相应重复的包删除掉就好了  ..小小的问题折腾一天也是没谁了.

android studio 代码混淆如何忽略第三方jar包

最近在打包混淆时,遇到一个问题,混淆编译都不出错,运行出错,一般遇到这种问题,肯定是在运行的地方有代码被混淆了,经过错误排查,发现是程序中用到第三方的jar包的方法出现问题了,原来android studio混淆打包时把第三方的jar包给混淆了. 于是想这个问题很简单,保持jar包不混淆就好,于是直接在app目录下的proguard-rules.pro(或者proguard-rules.txt)混淆规则文件直接-libraryjars libs/xx.jar避免混淆.但是却引出了另一个错误: E

关于Android Studio打包混淆以及上传mapping文件

关于android Studio打包混淆以及上传mapping文件 转载请注明出处: http://blog.csdn.net/u014163726?viewmode=contents 本文出自Wrh的博客 打包 android studio的打包很简单 然后如果已经有keystore的一路next下去,如果没有的可能需要先创建keystore,最后我们就会得到一个apk文件 混淆 现在网上关于反编译的博客很多了,我在此就不多做介绍了,放上个传送门传送门 那么我们已经知道了反编译是如此的简单,我

【Android端】代码打包成jar包/aar形式

Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/debug(release)/classes.jar *.aar:库/build/outputs/aar/libraryname.aar 区别:jar包只包含了classes文件,不包含资源文件:aar不仅包含了classes文件,还包含资源文件 并且,aar的这个可以发布到maven库,然后使用者直