Sean's Note: How to use proguard for library project(module)?

2015年11月12日 星期四

How to use proguard for library project(module)?

發現如果在 application project 跟 library project 裡都有定義

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

就會有一堆 cannot find symbol class 的 errors。
解決的方法有兩種:
  1. 把 library project 的 proguard-rules.pro 裡的定義都搬到 application project 的 proguard-rules.pro,再把 library project 的 minifyEnabled 設為 false。
  2. 另一種就是把 library project 的 proguardFiles 改成 consumerProguardFiles 就行了 (minifyEnabled 也不須設定,minifyEnabled 是對應 proguardFiles 的)。
consumerProguardFiles 的定義是:
ProGuard rule files to be included in the published AAR.
These proguard rule files will then be used by any application project that consumes the AAR (if ProGuard is enabled).
This allows AAR to specify shrinking or obfuscation exclude rules.
This is only valid for Library project. This is ignored in Application project.

Ref:
  1. http://stackoverflow.com/questions/30820915/android-studio-proguard-handling-in-multi-library-projects
  2. http://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.BuildType.html


沒有留言:

張貼留言