android 将library打包jar 混淆

1 打包jar

1.1 在library的build.gradle的根目录中配置:

task makeJar(type: Copy) {
    delete 'build/libs/XYSDK-2018-12-27.jar' //删除已经存在的jar包
    from('build/intermediates/packaged-classes/release/')//从该目录下加载要打包的文件
    into('build/libs/')//jar包的保存目录
    include('classes.jar')//设置过滤,只打包classes文件
    rename('classes.jar', 'XYSDK-2018-12-27.jar')//重命名
}
makeJar.dependsOn(build)

1.2 添加混淆规则

1.2.1 在library的build.gradle的android目录配置:

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

1.2.2 proguard-rules.pro文件配置:根据自己需求配置混淆规则

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-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 com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

#保留该包下的类名不会被混淆
-keep class 完整包名.*
-keep class 完整包名.*
-keep class 完整包名.*

#指定包名下的所有类及子包中所有的类不被混淆
-keep class 完整包名.**{*;}

#保持指定类里面public修饰的成员变量和public修饰的方法。
-keep class 完整包名{
    public <fields>;
    public <methods>;
}

#忽略警告
-ignorewarnings
#保证是独立的jar,没有任何项目引用,如果不写就会认为我们所有的代码是无用的,从而把所有的代码压缩掉,导出一个空的jar
-dontshrink
#保护泛型
-keepattributes Signature
-keepattributes Exceptions

1.3 在terminal输入 gradlew makeJar 命令 或 在点击studio右侧的gradle,点击你的library->tasks->other,双击makejar

如果不需要混淆,1.2可以跳过

如果在运行 gradlew makeJar 命令时出现如下错误:

Execution failed for task ':mylibrary:lint'. > Lint found errors in the project; aborting build.

可在library的build.gradle的android目录配置:

lintOptions {

abortOnError false

}

然后重新执行命令即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值