1. 程式人生 > >android studio打包遇到的問題

android studio打包遇到的問題

在使用android studio打包新增程式碼混淆過程中遇到的問題

Warning:Exception while processing task java.io.FileNotFoundException: F:\...\app\build\intermediates\proguard-rules\release\aapt_rules.txt (系統找不到指定的路徑。)

解決方案如下:
只需要在選單欄選擇build --> Clean Project ,然後在build --> Make Project即可,然後就能在這個路徑下找到這個aapt_rules.txt檔案了,再次build apk就不會報錯了哦(注意:混淆的是release)


Warning:Exception while processing task java.io.IOException: The same input jar [...\app\libs\alipaySdk-20170725.jar] is specified twice.

解決方案如下:

開啟 proguard-rules.pro 或者是proguard.cfg 
在所有的-libraryjars前插入# 成 #-libraryjars x.jar

造成這個的原因是
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
}    
這個裡面已經把所有的jar 到引入了。所以在打包的時候就不需要再次在proguard-rules.pro 或者是proguard.cfg 中再次引入了。




Warning:Exception while processing task java.io.IOException: Please correct the above warnings first.

解決方案如下:

在proguard-rules.pro檔案裡面加上一句:-ignorewarnings  (最好把上面的Warning:Exception問題都解決掉,不然,可能會導致打包後無法正常使用,不需要匯入的jar去掉  對第三方jar 在proguard-rules.pro資料夾夾新增-keep 和-dontwarn,比如下面的:

-dontwarn javax.annotation.**
-dontwarn javax.inject.**
# OkHttp3
-dontwarn okhttp3.logging.**
-keep class okhttp3.internal.**{*;}
-dontwarn okio.**
# Retrofit
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions
# RxJava RxAndroid
-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;
}

# Gson
-keep class com.google.gson.stream.** { *; }
-keepattributes EnclosingMethod
-keep class com.xy.example.data.entity.**{*;}#這是你定義的實體類(使用RxJava+retrofit必須加,不然無法解析資料)

簽名打包修改app下的build.gradle檔案

buildTypes {
    release {
        // 不顯示Log
        buildConfigField "boolean", "LOG_DEBUG", "false"
        //啟用multidex的支援
        multiDexEnabled true
        minifyEnabled true//是否啟用混淆程式碼的功能
        zipAlignEnabled true // Zipalign優化 壓縮對齊生成的apk包
        shrinkResources true// 移除無用的resource檔案
        //指定混淆規則,需要壓縮優化的混淆要把proguard-android.txt換成proguard-android.txt
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.myConfig//簽名檔案
    }
    debug {
        minifyEnabled false
        zipAlignEnabled true // Zipalign優化
        shrinkResources false // 移除無用的resource檔案
        signingConfig signingConfigs.myConfig//簽名檔案
    }
}