android库工程jar打包和混淆

公司有个项目需要以库的形式提供给第三方使用,但是java代码又不想别人知道,还有资源文件也需要一起打包,很常见的需求,下面就是解决此事的过程。

1、直接将库工程提供给第三方,android库工程引用方式

被老板pass,代码客户都可以看到,不行。

2、将库工程TestLib的src导出成jar,把res目录直接发给第三方

失败。导出的jar依然是引用库工程的R文件(com.test.lib.R),但是资源提供给第三方后,生成的R为com.test.R,因此运行时找不到com.test.lib.R,引用资源报错。

3、新建一个库工程MyLib,包名和TestLib工程相同(com.test.lib),然后将MyLib的res删除,将TestLib的res全部复制到新工程,同时将TestLib中bin下生成的TestLib.jar复制到MyLib的libs文件夹下,然后第三方再引用MyLib,成功!

中间有个小插曲,我们没有使用bin下面生成的jar,二是类似第二部直接导入jar文件,其他和步骤三相同,但是运行时还是报错——知道的朋友希望告诉我为什么。

4、步骤三解决了java源码没有直接提供给第三方的问题,但是如果用jar查看器,还是可以看到源码,也就是步骤三生成的jar是没有混淆的,那么我们就要混淆jar了。

jar混淆相信步骤

4.1  找到sdk下面的混淆运行文件目录(*\android-sdk-windows\tools\proguard\bin),打开其中的proguardgui.bat;

4.2  出现如下画面,点击加载按钮,加载*\android-sdk-windows\tools\proguard\proguard-android-optimize.txt文件,点击next。

4.3 出现如下画面,点击红框所示三个按钮,分别选择要加密的jar,加密输出的jar,以及项目引用到的jar(android.jar)。点击下一步。

4.4 在下图中红框打勾,点击下一步;

4.5 一直点击下一步,直到出现如下画面,点击process:

4.6
,就会出现如上日志,可以看到和R有关的都报错了,找不到R相关的内容,因为R在jar里面没有,那么我们之间忽略就可以了(dontwarn),因为我们要把mylib提供给第三方,可以获取到R相关内容,这也是第二种方法不能凑效的原因。如下图,我们打开proguard-android-optimize.txt,天津红框里面的2句话,忽略R相关的内容。

4.7 再次重复步骤2~6,出现下图:

4.8 找到我们设置的输出目录,我们就可以看到对应的*after文件了,我们用jar查看器打开看看,让老板放心,让码农恶心的混淆后的代码出来了,妈妈再也不用担心第三方知道我们的业务流程和接口了:

4.9 至此,任务完成。[email protected] 欢迎交流。

参考资料:

1、Android代码jar打包Library项目整合

2、混淆Android JAR包的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 14:00:54

android库工程jar打包和混淆的相关文章

Android 库工程 提示case expressions must be constant expressions 错误

问题描述:  在库工程中存在如下代码: 代码示例 int id = view.getId(); switch (id) { case R.id.button1: action1(); break; case R.id.button2: action2(); break; case R.id.button3: action3(); break; } 会提示case expressions must be constant expressions 错误 问题原因: ADT14后Android库工程中

Android studio 导出jar包并混淆和aar

前些天写个了android library工程,要同时支持aar和jar两种方式,在这里分享一下自己写的gradle自动构建的脚本 命令行执行./gradlew makeJar在build/intermediates/libs/下生成jar包 在命令行执行./gradlew uploadArchives在gradle.properties中指定aar.deployPath目录下生成aar

android开发之应用打包签名混淆流程

项目做的差不多了,要签名,然后混淆防治被反编译,记录下流程 默认各种环境都是配置好了的. 主要分以下几步 1.生成ant打包所需的配置文件 2.生成应用签名的keystore,对apk签名 3.编写混淆文件,混淆代码,防止反编译 第一步,生成ant打包的配置文件 在项目根目录下执行指令:android update project -path . 会自动生成三个目录: build.xml,local.properties,proguard-project.txt 还有一个要自己建的ant.pro

Android Studio导出Jar包并混淆

在Android Studio中,自带反编译查看class文件,如果没有混淆的话,class文件跟java文件基本没有区别了,为了保护,还是混淆的好. 网上看了不少资料,都是直接下载proguard额外jar,直接生成,觉得不方便,既然apk都能混淆,为什么不直接通过Android Studio来混淆jar包呢. 做法其实很简单,一个build文件,一个proguard文件就可以了. 首先要明白jar从哪里来,以前在Eclipse中是一个project设置为library,然后另外一个主proj

Android Studio第一期 - 打包签名混淆反编译

开始先说打包签名: 1.打开你的AS选中你的project->bulid,     2.跟eclipse一样搞一个key,自己填写一下改写的什么注册的信息什么的,然后就会获得key和password,此处省略一万字--!然后就是填写了, 图2, 3.等待就可以了,project的app目录下你会找到打包签名的apk包,就这样. end 下面说混淆部分: 1.把你的build.gradle,改一下true,     2.接着就是proguard-rules.pro里面的,注意:不要写jar了哈,A

android引入unity-classes.jar之后进行混淆的问题解决

本程序引入了unity3d的程序,那么自然就使用到了jar包unity-class.jar这个jar包.在混淆的时候出现下列问题: 首先第一个问题: java.io.IOException: Can't read [unity-classes.jar] (Can't process class [com/unity3d/player/UnityPlayer.class] (Unknown verification type [191] in stack map frame)) 关于这个问题,网络

LEADTOOLS Android库入门使用教程

一.搭建Android开发环境 在使用LEADTOOLS Android库和demo之前,需要根据以下步骤搭建Android开发环境: 1.安装Java Development Kit (JDK) 1.6 ,该开发包中包含 Java Runtimes (JRE) 和库. 2.安装Eclipse. 3.安装Android SDK. 4.在web页面点击USE AN EXISTING IDE,然后点击Download the SDK Tools for Windows. 5.启动Android SD

Android 混淆打包不混淆第三方jar包

项目因为要发布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件中添加不需要混淆的类和第三方的jar包 这个是保持自己包中不需要混淆的类,如果有些类调用了jni也不需要混淆,不然会出错.还有如果项目中有其他项目作为library引入,那这些项目的一些类也不能混淆. 这个是保持项目中的第三方jar不混淆 另外加上上面几句话,不然会在控制台中报warning警告 2.在project.properties文件中把proguard.config=${sdk.dir}

Android ANT脚本打包及混淆文件

http://p.ymt360.com/w/app/wiki/tech/build_apk/ 简介 Android支持使用ANT打包.通过ANT脚本,可以对文件进行编译.打包.安装.联合SVN自动拉取等.并且支持多种方式打包,如debug.release.批量打包等场景.eclipse项目是通过调用SDK提供的ANT脚本build.xml文件进行打包的. 附件是AndroidSDK附带的打包脚本,超详细,可以参考学习下.build.xml(建议使用JDK1.6环境,在之前ANT使用过程中被1.7