记一下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文件失败

0 0