记一下jar包的封装
来源:互联网 发布:淘宝批发货源网 编辑:程序博客网 时间:2024/06/14 05:43
前言:最近公司提出个这么个需求,app作为一个内嵌功能性模块提供给第三方调用使用,需求直接调用,不需要做其他任何二次开发,同时保证交出去的代码的安全性。
通过以下方法解决了需求,moudle依赖的方式去提供入口,api及部分逻辑代码封装jar混淆保证核心代码的安全性。不过jar包的方式并不能完全的保证安全性,只是提高了破译的难度。
简要记下
jar提取步骤
1.新建moudle并设为android library,需要封装进jar的逻辑代码及api放进moudle。build.gradle中添加下面的代码(jar配置)
task makeJar(type: Copy) { from('build/intermediates/bundles/release/') into('build/libs/')//导出后jar所在目录 include('classes.jar') rename ('classes.jar', 'haokan_sdk.jar')//前者原文件名,后者重命名文件}makeJar.dependsOn(build)
注:逻辑代码及api放进jar包内需要考虑到调用的场景,做相应的逻辑更改。公共方法需要暴露出来。常量不可直接调用
2.命令行运行./gradlew makeJar导出jar包
3.在build/libs/文件夹下即可找到jar包
jar混淆
1.打开sdk自带工具proguardgui.jar 路径/Users/sung/android-sung/tools/android-sdk-macosx/tools/proguard/lib/proguardgui.jar
2.运行proguardgui.jar,首次运行先生成配置文件
配置基础设置
Process -》Save configuration 保存.pro混淆规则文件,下次打开就可以直接从ProGuard选项卡load。保存完了之后用txt打开.pro文件根据项目需要编辑混淆规则(贴出我的,规则不做赘述)默认生成的一些部分没有贴上来,只贴了我自定义的部分,混淆规格和项目中的混淆规则的使用是一样的
-injars /Users/sung/AndroidStudioProjects/MyLiveApplication/haokanlivelib/build/libs/haokan_sdk.jar-outjars /Users/sung/Desktop-libraryjars /Users/sung/AndroidStudioProjects/MyLiveApplication/haokanlivelib/libs/gson-2.2.2.jar-libraryjars /Users/sung/AndroidStudioProjects/MyLiveApplication/haokanlivelib/libs/org.apache.http.legacy.jar-dontshrink-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*-optimizationpasses 5-dontusemixedcaseclassnames-keepattributes *HaokanSDK*,Signature-dontpreverify-verbose-dontnote org.apache.**,com.feiyu.haokanlivelib.**-dontwarn com.google.gson.**,com.android.volley.jar.**,org.apache.**,com.feiyu.haokanlivelib.**-keep class **.R$* { <fields>; <methods>;}-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService-keep class com.lidroid.xutils.** { <fields>; <methods>;}-keepclasseswithmembers public class com.feiyu.haokanlivelib.HaokanMgr//**重点说明 一定要保留一个jar包引用的入口以防使用报错 **-keepclasseswithmembers public class com.feiyu.haokanlivelib.network.*-keepclasseswithmembers public class com.feiyu.haokanlivelib.utils.*-keepclasseswithmembers public final class com.mzc.demo.MyDemo { public <init>(android.content.Context,java.lang.String,android.widget.LinearLayout); public void openDoor();}-keep interface * { <fields>; <methods>;}-keep public interface com.feiyu.haokanlivelib.network.ResponseListener { <fields>; <methods>;}# Gson specific classes -keep class sun.misc.Unsafe { <fields>; <methods>;}# -keep class com.google.gson.stream.** { *; } -keep class com.google.gson.** { <fields>; <methods>;}# Application classes that will be serialized/deserialized over Gson -keep class com.google.gson.examples.android.model.** { <fields>; <methods>;}-keep class com.android.volley.** { <fields>; <methods>;}-keep class com.android.volley.toolbox.** { <fields>; <methods>;}-keep class com.android.volley.Response$* { <fields>; <methods>;}-keep abstract class com.android.volley.Response { <fields>; <methods>;}-keep class com.android.volley.Request$* { <fields>; <methods>;}-keep class com.android.volley.RequestQueue$* { <fields>; <methods>;}-keep class com.android.volley.toolbox.HurlStack$* { <fields>; <methods>;}-keep class com.android.volley.toolbox.ImageLoader$* { <fields>; <methods>;}-keep class org.apache.** { <fields>; <methods>;}-keep class com.mediatek.common.featureoption.* { <fields>; <methods>;}-keepclasseswithmembers,allowshrinking public class com.feiyu.haokanlivelib.HaokanMgr { <methods>;}-keepclasseswithmembers,allowshrinking public class com.feiyu.haokanlivelib.network.* { <methods>;}-keepclasseswithmembers,allowshrinking public class com.feiyu.haokanlivelib.utils.* { <methods>;}3.Process-》Process!成功后输出目录找到混淆后的jar包即可使用
混淆过程中可能遇到的问题
混淆规则书法不规范会导致load原.pro文件失败
- 记一下jar包的封装
- eclipse封装jar包的简单过程
- jython未能封装jar包的原因
- 命令行封装jar包
- 记录一下jar包运行
- 记录一下spring jar包的一些相关信息
- android jar包封装引用
- Android-万能 Adapter 封装(实现textview,imageView 的简单封装,封装 jar 包)
- 使用eclipse进行封装成jar包以及包含其他jar包的技巧
- commons-dbutils的再封装JAR包(可下载)
- 封装json数据 需要导入的jar包
- 自己封装的Android sqlite-helper.jar包使用方法
- Android工程封装打包的jar包混淆,有图有真像!
- java封装json所需的相关jar包
- java端报表工具jxsl封装好的jar包
- java私人封装的加密jar包以及使用
- Android 中jar包封装及调用>>>>>
- Android中jar包封装及调用
- Tesseract试用过程及结果分析
- 人脸识别主要算法原理
- 轮廓检测
- Sphinx全文检索之PHP使用教程
- mysql服务器cpu使用率过高100%
- 记一下jar包的封装
- 一个很值得思考的问题,求解决!
- swoole 文件IO方式
- rocketmq总体理解
- Docker中使用supervisord不能停止docker解决
- 我的读书心得
- javaw.exe in your current path的解决方法
- 二分(最小值当中的最大值)_POJ 2456 Aggressive cows
- java的浅拷贝与深拷贝