Adnroid studio生成混淆的jar 【已解决】Execution failed for task ':app:lint'

Adnroid studio生成混淆的jar方法


1. 概述

以下为android studio 导出jar包的流程

2.打包jar步骤

  1. 在项目中新建一个Module并选择选择Android Libraray
    File-New-New Modele-Android Libraray
  2. 需要生成jar的源文件java都放在新建的Library中
  3. 配置Library build.gradle  Android Studio Gradle环境变量配置https://blog.csdn.net/qq402164452/article/details/70207308
  4. 配置混淆文件

3. 详细步骤

3.1 配置Library的build.gradle文件

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.3"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
}

//=======生成jar包脚本 start=============================================
def SDK_BASENAME = "httpUtil";
def SDK_VERSION = "_V1.0";
def sdkDestinationPath = "build";//生成jar存放目录

//打包release目录下的classes.jar(开启混淆后这个jar就是混淆的源码)----注意由于as版本原因有的在default目录
def releaseJar = file('build/intermediates/bundles/release/classes.jar')
//打包debug目录下的classes.jar
def debugJar = file('build/intermediates/bundles/debug/classes.jar')
//将libs目录下的gson打入jar包
def thirdPartyJar = file('libs/gson-2.8.0.jar')

//打包jar前先删除原先的jar
task deleteBuild(type: Delete) {
    delete sdkDestinationPath + SDK_BASENAME + SDK_VERSION + ".jar"
}

task makeJar(type: Jar) {
    from zipTree(releaseJar)//导出混淆的jar
    //from zipTree(debugJar)//导出未混淆的jar
    //from zipTree(thirdPartyJar)将第三方jar包打入jar包
    //from fileTree(dir: 'src/main', includes: ['assets/**'])//将assets目录打入jar包
    exclude('**/BuildConfig.class')//排除不必要的class文件
    baseName = SDK_BASENAME + SDK_VERSION
    destinationDir = file(sdkDestinationPath)
}

makeJar.dependsOn(deleteBuild, build)
//=======生成jar包脚本 end=============================================

//运行脚本
//1.命令行方式:在Terminal输入gradlew makeJar
//2.图形界面方式:Gradle   :ModuleName Tasks   other   markJar
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

3.2 配置Library的混淆文件

#============以下为自己添加的混淆规则======================
#-libraryjars 'C:\Program Files\Java\jre1.8.0_121\lib\rt.jar'

#忽略警告
#-ignorewarnings

#不要压缩(这个必须,因为开启混淆的时候 默认 会把没有被调用的代码 全都排除掉)
-dontshrink

#避免混淆泛型 如果混淆报错建议关掉
#-keepattributes Signature


#============保持相应的类不被混淆===========================

#保持BuildConfig不被混淆(因为混淆之后就无法在导出jar时排除该类)
#同理 相应的TestActivity以及TestService也需要保持不被混淆
-keep class com.kok.http.BuildConfig{
public *;
}
#保持调用接口不被混淆
-keep class com.kok.http.core.HttpUtils{
public *;
}
-keep class com.kok.http.core.HttpErrorCode{
public *;
}
-keep class com.kok.http.callback.**{*;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

3.3 其他

android studio 使用命令打包 需配置Gradle环境变量
例如:
变量名:GRADLE_HOME
变量值:C:\Users\Administrator.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv\gradle-2.14.1
然后在Path中添加GRADLE_HOME


4. 相关流程截图

4.1 配置Gradle

配置Gradle

4.2 配置混淆文件

配置混淆文件

4.3 打包jar

打包jar
遇到的問題及解決方法

【已解决】Execution failed for task ':app:lint'

错误如下

<strong><span style="font-size:18px;">Execution failed for task ':mvpretrofit:lint'.
> Lint found errors in the project; aborting build.</span></strong>

解决如下

build.gradle文件中插入

<strong><span style="font-size:18px;">lintOptions {//设置编译的lint开关,程序在buid的时候,会执行lint检查,有任何的错误或者警告提示,都会终止构建
        abortOnError false
    }</span></strong>

效果如下

猜你喜欢

转载自blog.csdn.net/gxflh/article/details/80522821