记一下jar包的封装
前言:最近公司提出个这么个需求,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$* {
;
;
}-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.** {
;
;
}-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 (android.content.Context,java.lang.String,android.widget.LinearLayout);
public void openDoor();
}-keep interface* {
;
;
}-keep public interfacecom.feiyu.haokanlivelib.network.ResponseListener {
;
;
}# Gson specific classes
-keep class sun.misc.Unsafe {
;
;
}# -keep class com.google.gson.stream.** { *;
}
-keep class com.google.gson.** {
;
;
}# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** {
;
;
}-keep class com.android.volley.** {
;
;
}-keep class com.android.volley.toolbox.** {
;
;
}-keep class com.android.volley.Response$* {
;
;
}-keep abstract class com.android.volley.Response {
;
;
}-keep class com.android.volley.Request$* {
;
;
}-keep class com.android.volley.RequestQueue$* {
;
;
}-keep class com.android.volley.toolbox.HurlStack$* {
;
;
}-keep class com.android.volley.toolbox.ImageLoader$* {
;
;
}-keep class org.apache.** {
;
;
}-keep class com.mediatek.common.featureoption.* {
;
;
}-keepclasseswithmembers,allowshrinking public class com.feiyu.haokanlivelib.HaokanMgr {
;
}-keepclasseswithmembers,allowshrinking public class com.feiyu.haokanlivelib.network.* {
;
}-keepclasseswithmembers,allowshrinking public class com.feiyu.haokanlivelib.utils.* {
;
}
3.Process-》Process!成功后输出目录找到混淆后的jar包即可使用
混淆过程中可能遇到的问题
混淆规则书法不规范会导致load原.pro文件失败
【记一下jar包的封装】
文章图片
推荐阅读
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 野营记-第五章|野营记-第五章 讨伐梦魇兽
- 20170612时间和注意力开销记录
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 叙述作文
- 2019年12月24日
- 人生感悟记#环境仪器宋庆国成长记#072
- 2019.4.18感恩日记
- 四首关于旅行记忆的外文歌曲
- Android中的AES加密-下