1. 程式人生 > >Android studio混淆第三方jar包時報錯

Android studio混淆第三方jar包時報錯

今天在做專案的混淆打包的時候。報錯:

Warning:Exception while processing task java.io.IOException: The same input jar [D:\xxApplication\app\libs\universal-image-loader-1.9.5-sources.jar] is specified twice.

Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> Job failed, see logs for details

仔細看了下報錯資訊,是在混淆libs資料夾下的 universal-image-loader時候報錯了。我是這麼寫的:

-libraryjars libs/universal-image-loader-1.9.5.jar
-libraryjars libs/universal-image-loader-1.9.5-sources.jar

我看大家都是這麼寫的,為啥別人沒有報錯,我的報錯了。我就去查了下universal-image-loader的混淆。看到還有一種寫法:

-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }

於是我將之前的刪除了,換成了上面的這種方式。,重新打包。結果打包成功了。看來上面的那種方式對我行不通。暫時不知道原因。以後我libs下的jar包我都打算用下main這種方式忽略混淆:

以 -dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }為例,
意思是不混淆com.nostra13.universalimageloader包下的各個類及類裡面的所以域和方法。
把上面的包名換成自己想要忽略的jar下面暴露的包名即可

下面貼出我的混淆檔案:

# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
#############################################
#
# 對於一些基本指令的新增
#
#############################################
# 程式碼混淆壓縮比,在0~7之間,預設為5,一般不做修改
-optimizationpasses 5

# 混合時不使用大小寫混合,混合後的類名為小寫
-dontusemixedcaseclassnames

# 指定不去忽略非公共庫的類
-dontskipnonpubliclibraryclasses

# 這句話能夠使我們的專案混淆後產生對映檔案
# 包含有類名->混淆後類名的對映關係
-verbose

# 指定不去忽略非公共庫的類成員
-dontskipnonpubliclibraryclassmembers

# 不做預校驗,preverify是proguard的四個步驟之一,Android不需要preverify,去掉這一步能夠加快混淆速度。
-dontpreverify

# 保留Annotation不混淆
-keepattributes *Annotation*,InnerClasses

# 避免混淆泛型
-keepattributes Signature

# 丟擲異常時保留程式碼行號
-keepattributes SourceFile,LineNumberTable
-keepattributes EnclosingMethod
# 指定混淆是採用的演算法,後面的引數是一個過濾器
# 這個過濾器是谷歌推薦的演算法,一般不做更改
-optimizations !code/simplification/cast,!field/*,!class/merging/*


#############################################
#
# Android開發中一些需要保留的公共部分
#
#############################################

# 保留我們使用的四大元件,自定義的Application等等這些類不被混淆
# 因為這些子類都有可能被外部呼叫
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Appliction
-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 * extends android.view.View
-keep public class com.android.vending.licensing.ILicensingService


# 保留support下的所有類及其內部類
-keep class android.support.** {*;}

# 保留繼承的
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v7.**
-keep public class * extends android.support.annotation.**

# 保留R下面的資源
-keep class **.R$* {*;}

# 保留本地native方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}

# 保留在Activity中的方法引數是view的方法,
# 這樣以來我們在layout中寫的onClick就不會被影響
-keepclassmembers class * extends android.app.Activity{
    public void *(android.view.View);
}

# 保留列舉類不被混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

# 保留我們自定義控制元件(繼承自View)不被混淆
-keep public class * extends android.view.View{
    *** get*();
    void set*(***);
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

# 保留Parcelable序列化類不被混淆
-keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
}

# 保留Serializable序列化的類不被混淆
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    !private <fields>;
    !private <methods>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

# 對於帶有回撥函式的onXXEvent、**On*Listener的,不能被混淆
-keepclassmembers class * {
    void *(**On*Event);
    void *(**On*Listener);
}

# webView處理,專案中沒有使用到webView忽略即可
-keepclassmembers class fqcn.of.javascript.interface.for.webview {
    public *;
}
-keepclassmembers class * extends android.webkit.webViewClient {
    public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
    public boolean *(android.webkit.WebView, java.lang.String);
}
-keepclassmembers class * extends android.webkit.webViewClient {
    public void *(android.webkit.webView, jav.lang.String);
}
#EventBus 3.0 混淆配置
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }

#---------------------------------1.實體類---------------------------------

-keep class com.hisw.baoshanapplication.entity.** { *; }


# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    <init>(java.lang.Throwable);
}
####################universal-image-loader########
#-libraryjars libs/universal-image-loader-1.9.5.jar
#-keep class com.nostra13.universalimageloader.** {*;}
#-dontwarn com.nostra13.universalimageloader.**
#butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
    @butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
    @butterknife.* <methods>;
}
#fastjson
-keepattributes Signature
-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.**{*; }
#okhttp
-dontwarn okhttp3.**
-keep class okhttp3.**{*;}

#okio
-dontwarn okio.**
-keep class okio.**{*;}
#Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
  **[] $VALUES;
  public *;
}
#Retrofit
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
#RxJava
-dontwarn sun.misc.**
-keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
    long producerIndex;
    long consumerIndex;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode producerNode;
}
-keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
    rx.internal.util.atomic.LinkedQueueNode consumerNode;
}
## ########## 個推混淆 ##########
## ----------------------------------

-dontwarn com.igexin.**
-keep class com.igexin.** {*;}
# universal-image-loader 混淆

-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** { *; }

#-libraryjars libs/GetuiSDK2.9.0.0.jar
#-libraryjars libs/universal-image-loader-1.9.5.jar
#-libraryjars libs/universal-image-loader-1.9.5-sources.jar
#-libraryjars libs/GetuiSDK2.9.0.0.jar
-libraryjars libs/arm64-v8a/libgetuiext2.so
-libraryjars libs/armeabi/libgetuiext2.so
-libraryjars libs/armeabi-v7a/libgetuiext2.so
-libraryjars libs/mips/libgetuiext2.so
-libraryjars libs/mips64/libgetuiext2.so
-libraryjars libs/x86/libgetuiext2.so
-libraryjars libs/x86_64/libgetuiext2.so

單曲迴圈《真實》

每日語錄:

我什麼都沒有忘,但是有些事只適合收藏,不能說,也不能想,卻又不能放。

——史鐵生 《我與地壇》
是的。。有些事情就是這樣,忘不得,也碰不得。然後你和這件事。和這件事情相關的人也會越來越遠。是怎麼也拉不近的距離。相識的那一天我們應該怎麼也猜不到,我們可以生疏到這樣。不過即使這樣,我也不後悔和你相遇,不知道你怎麼想的。但願你也可以這樣想。

相關推薦

Android studio混淆第三方jar時報

今天在做專案的混淆打包的時候。報錯:Warning:Exception while processing task java.io.IOException: The same input jar [D:\xxApplication\app\libs\universal-ima

Android Studio 載入第三方jar並提高該jar優先順序

framework原始碼編譯出來的jar路徑如下: out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar droidlogic原始碼編譯(vendor/amlogic/frameworks/core/ja

解決Android Studio載入第三方jar,出現重複載入的問題:

from: http://blog.csdn.net/yy1300326388/article/details/43759267 通過Maven中央庫新增第三方jar包的時候,出現了重複載入jar包的問題,解決辦法很簡單去掉一個不讓它去載入就OK了 一、錯誤

Android Studio引用第三方jar(例如:使用LitePal)

     如何使用LitePal的教程網上很多,不過對於新手,這些教程中遺漏了將第三方jar包拷貝到app-》libs路徑下後,還需要add as library。 這時操作步驟如下: 選中匯入的

Android Studio匯入第三方jar或依賴工程的方法

一 匯入jar包的方法 1.開啟自己的工程,將需要匯入的jar包copy到libs資料夾下 2.在匯入的jar包處單擊選單 Add As Library 3.點選ok 4.然後這裡就出現了

Android Studio載入第三方jar

Android Studio剛釋出,相信很多朋友和我一樣,開始嘗試用其開發專案,但新東西總會遇到這樣或那樣的問題,其中令我頭的就是引入第三方的jar包無法編譯的問題,因為是新東西,相關的資訊都比較少,解決問題令我花費了相當長的時間,為了避免各位同仁再走彎路,在此將解決步驟列出來。   1、將jar包放入

android工程引入第三方jar,發現混淆後無法簽名,並出現can't find referenced class

1 出現can't find referenced class的警告時,可以在proguard.cfg中新增-ignorewarnings或-dontwarn來解決。 2 對於有的第三方jar,可能已經進行過程式碼混淆了,在這裡就要保持(防止出現空指標或者其他莫名其妙的問題

關於Android Studio導出jar的問題

導出 jar unity android studio 之所以說這個問題,還是因為最開始以為Unity開發要用再說一下我的環境Win7 x64VS2015Unity5.2.2Android Studio 2.3.2JDK1.8我現在Unity與Android相結合是把Android項目導出aa

【我的Android進階之旅】解決Android Studio 運行gradle命令時報: 錯誤: 編碼GBK的不可映射字符

定義 編碼 string pretty 出現 mage watermark build issue 原文:【我的Android進階之旅】解決Android Studio 運行gradle命令時報錯: 錯誤: 編碼GBK的不可映射字符 1、問題描述 最近在負責公司基礎

Android Studio 如何打JAR(修訂版)

AndroidStudio專案打包成jar   前言:在eclipse中我們知道如何將一個專案匯出為jar包,現在普遍AndroidStuido開發,這裡一步一步詳加介紹AS專案打包成jar,jar和arr的使用 在這裡先補充一下我在編譯時遇到的問題: ① Android 打

轉: 錯誤: 編碼GBK的不可對映字元 - Android Studio 生成javadoc文件時報

1.執行Tools工具中的Generate JavaDoc報錯 想將專案生成一個幫助文件,結果生成doc時(如下圖所示),   報下面錯誤 錯誤: 編碼GBK的不可對映字元 錯誤: 編碼GBK的不可對映字元 * 璁劇疆SurfaceView鐨勭粦瀹氬叧緋? 解決

android studio開發 匯出Jar並在unity3d中使用

【匯出JAR包】 首先模組專案只能是library,而不能是application。如果除了打包程式碼還有資源的話,需要打包成aar包。 1、在app目錄下的 build.gradle檔案中 添下程式碼: apply plugin: 'com.android.lib

android studio如何匯出jar以及如何將多個jar合併

android studio現在jar包方式的引用可能越來越少,大部分都是通過gradle引入github專案依賴即可,不過今天還是講一講jar包的匯出和合並,算是記錄下吧。一、建立一個新的library專案,專案名為mylibrary。找到build.gradle檔案,檔案

Android】匯入第三方jarCould not find class 異常解決

這幾天做一個通訊錄APP,在漢字排序的時候用到了開源專案pinyin4j,在java project中使用正常,無奈在android project中總是報異常 下面給出解決方法: 1、在工程目錄下新建一個externLib資料夾,將jar包拷貝到該資料夾 重新整理之後會

使用Android Studio打包生成Jar的方法(親測可用)

首先我們來說下打成jar包的分類:1.application應用打成jar包2.內庫打成jar包不管是那種打包jar包都得變成內庫,所以當一種方法講解了。打jar包之前得讓你的專案成內庫:如何變成內庫呢?看下內庫檔案的圖示如下圖:如下兩點:先將你專案gradle檔案最上面的a

Android Studio如何引用jar

1、新增compile,這裡是指引用程式碼託管庫(以下稱資源庫)下的開源專案 我們可以開啟我們專案目錄下的build.gradle,如下圖 其中的第16行repositories就是我們使用的資源庫的庫配置。這個庫除了我們看到的

android studio工程打jar

1.將你的工程專案轉成Model或Libray 在build檔案中配置修改,意思是將該工程修改為庫的形式 原來 apply plugin: ‘com.android.application’ 修改後 apply

Android studio 匯入eclipse專案 執行時報

Error:Android Packager: [sport5] java.io.IOException: Cannot pack file E:\444\libs\production\sport5\sport5.unaligned.apk into itself 這幾天

Android Studio 如何打JAR(親測)

//在android studio終端執行生成JAR包 // mac 環境下 ./gradlew makeJar // win 環境下 gradlew makeJar 如提示許可權問題:chmod +x gradlew ====================

Android studio中匯出jar

1.module的gradle檔案頂部依賴為apply plugin: 'com.android.library'2.gradle中不能有appID,如果有註釋掉3.在gradle檔案的最下面android{}和dependencies{}的外面新增下面程式碼://下面的的都