国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android studio利用gradle打jar包并混淆的方法詳解

2019-12-12 03:31:51
字體:
供稿:網(wǎng)友

本文主要介紹了Android studio利用gradle打jar包并混淆的方法,下面話不多說,來看看詳細(xì)的介紹吧。

首先打jar包的配置很簡單,使用jar的task,可以參考gradle官方文檔,具體代碼如下:

task buildJar(type: Jar, dependsOn: ['assembleRelease']) { destinationDir = file('build/outputs/jar/') appendix = "" baseName = "" version = SDK_VERSION // manifest信息 def map = ['Version': SDK_VERSION,  'Gradle': project.gradle.gradleVersion,  'Vendor': '',  'Date': new Date().getDateTimeString() ] manifest.attributes(map) from('build/intermediates/classes/release/') exclude('**/BuildConfig.class') exclude('**/BuildConfig/$*.class') exclude('**/R.class') exclude('**/R/$*.class') include('**/*.class')}

但是發(fā)現(xiàn)上面打出來的jar包中的代碼沒有被混淆,于是加混淆。使用混淆的proguard.gradle.ProGuardTask task時(shí),發(fā)現(xiàn)總是報(bào)如下錯(cuò)誤:

java.io.IOException: The output jar [....jar] must be specified after an input jar, or it will be empty.

按照上面的提示,outjars是寫在injars后面啊,it will be empty是提示哪里有問題?以為是proguard-rules.pro文件中的配置有問題,結(jié)果把文件清空,還是報(bào)上面的錯(cuò)誤,錯(cuò)誤原因不得而知了。在這個(gè)問題上耗了很長時(shí)間,最終還是沒有解決。
突然看到上面的assembleRelease task想起了平常打APK時(shí),會(huì)使用到這個(gè)task,打出來的APK會(huì)自動(dòng)混淆。

那這個(gè)assembleRelease task就會(huì)依賴處理混淆的task,于是查看了輸出日志:

To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/2.14.1/userguide/gradle_daemon.html.Observed package id 'system-images;android-22;google_apis;x86' in inconsistent location 'android-sdk-windows-studio/system-images/addon-google_apis-google-22/x86' (Expected 'android-sdk-windows-studio/system-images/android-22/google_apis/x86')Observed package id 'system-images;android-22;google_apis;x86' in inconsistent location 'android-sdk-windows-studio/system-images/addon-google_apis-google-22/x86' (Expected 'android-sdk-windows-studio/system-images/android-22/google_apis/x86')Incremental java compilation is an incubating feature.  :sdk:preBuild UP-TO-DATE                  :sdk:extractProguardFiles:sdk:preReleaseBuild:sdk:checkReleaseManifest:sdk:preDebugAndroidTestBuild UP-TO-DATE:sdk:preDebugBuild UP-TO-DATE:sdk:preDebugUnitTestBuild UP-TO-DATE:sdk:preReleaseUnitTestBuild UP-TO-DATE:sdk:prepareComAndroidSupportAnimatedVectorDrawable2510Library UP-TO-DATE :sdk:prepareComAndroidSupportAppcompatV72510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportCompat2510Library UP-TO-DATE:sdk:prepareComAndroidSupportSupportCoreUi2510Library UP-TO-DATE:sdk:prepareComAndroidSupportSupportCoreUtils2510Library UP-TO-DATE:sdk:prepareComAndroidSupportSupportFragment2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportMediaCompat2510Library UP-TO-DATE :sdk:prepareComAndroidSupportSupportV42510Library UP-TO-DATE:sdk:prepareComAndroidSupportSupportVectorDrawable2510Library UP-TO-DATE:sdk:prepareReleaseDependencies:sdk:compileReleaseAidl UP-TO-DATE :sdk:compileReleaseNdk UP-TO-DATE:sdk:compileLint UP-TO-DATE:sdk:copyReleaseLint UP-TO-DATE:sdk:compileReleaseRenderscript UP-TO-DATE:sdk:generateReleaseBuildConfig   :sdk:generateReleaseResValues UP-TO-DATE:sdk:generateReleaseResources UP-TO-DATE:sdk:mergeReleaseResources UP-TO-DATE :sdk:processReleaseManifest UP-TO-DATE:sdk:processReleaseResources UP-TO-DATE :sdk:generateReleaseSources:sdk:incrementalReleaseJavaCompilationSafeguard   :sdk:compileReleaseJavaWithJavac   :sdk:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).注: 某些輸入文件使用或覆蓋了已過時(shí)的 API。                注: 有關(guān)詳細(xì)信息, 請(qǐng)使用 -Xlint:deprecation 重新編譯。               :sdk:extractReleaseAnnotations   :sdk:mergeReleaseShaders UP-TO-DATE :sdk:compileReleaseShaders UP-TO-DATE:sdk:generateReleaseAssets UP-TO-DATE:sdk:mergeReleaseAssets UP-TO-DATE:sdk:mergeReleaseProguardFiles UP-TO-DATE:sdk:packageReleaseRenderscript UP-TO-DATE:sdk:packageReleaseResources UP-TO-DATE :sdk:processReleaseJavaRes UP-TO-DATE:sdk:transformResourcesWithMergeJavaResForRelease UP-TO-DATE:sdk:transformClassesAndResourcesWithProguardForRelease   ProGuard, version 5.2.1Reading input...       Reading program directory [sdk/build/intermediates/classes/release] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-media-compat/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-compat/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-fragment/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-core-ui/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/25.1.0/jars/classes.jar] (filtered)Reading library jar [android-sdk-windows-studio/extras/android/m2repository/com/android/support/support-annotations/25.1.0/support-annotations-25.1.0.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-v4/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/appcompat-v7/25.1.0/jars/classes.jar] (filtered)Reading library jar [sdk/build/intermediates/exploded-aar/com.android.support/support-core-utils/25.1.0/jars/classes.jar] (filtered)Reading library jar [/android-sdk-windows-studio/platforms/android-25/android.jar]Reading library jar [/android-sdk-windows-studio/platforms/android-25/optional/org.apache.http.legacy.jar]Note: duplicate definition of library class [android.net.http.HttpResponseCache]Note: duplicate definition of library class [android.net.http.SslCertificate$DName]Note: duplicate definition of library class [android.net.http.SslError]Note: duplicate definition of library class [android.net.http.SslCertificate]Note: duplicate definition of library class [org.apache.http.params.CoreConnectionPNames]Note: duplicate definition of library class [org.apache.http.params.HttpConnectionParams]Note: duplicate definition of library class [org.apache.http.params.HttpParams]Note: duplicate definition of library class [org.apache.http.conn.scheme.SocketFactory]Note: duplicate definition of library class [org.apache.http.conn.scheme.LayeredSocketFactory]Note: duplicate definition of library class [org.apache.http.conn.scheme.HostNameResolver]Note: duplicate definition of library class [org.apache.http.conn.ConnectTimeoutException]Note: there were 11 duplicate class definitions. (http://proguard.sourceforge.net/manual/troubleshooting.html#duplicateclass)Initializing...Note: you're ignoring all warnings!     Ignoring unused library classes...      Original number of library classes: 5857 Final number of library classes: 383Printing kept classes, fields, and methods...Shrinking...Printing usage to [sdk/build/outputs/mapping/release/usage.txt]...Removing unused program classes and class elements...    Original number of program classes: 52     Final number of program classes: 48Obfuscating...Printing mapping to [sdk/build/outputs/mapping/release/mapping.txt]...Writing output...Preparing output jar [sdk/build/intermediates/transforms/proguard/release/jars/3/3/main.jar] Copying resources from program directory [sdk/build/intermediates/classes/release] (filtered)Printing classes to [sdk/build/outputs/mapping/release/dump.txt]...:sdk:transformClassesAndResourcesWithSyncLibJarsForRelease   :sdk:mergeReleaseJniLibFolders UP-TO-DATE:sdk:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE :sdk:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE:sdk:bundleRelease   :sdk:compileReleaseSources:sdk:assembleRelease:sdk:buildJar     BUILD SUCCESSFUL.

好家伙,被我發(fā)現(xiàn)了。其中從:sdk:transformClassesAndResourcesWithProguardForRelease這個(gè)task就可以看到,下面一堆日志是關(guān)于ProGuard混淆工具的,最后可以看到:

Preparing output jar [sdk/build/intermediates/transforms/proguard/release/jars/3/3/main.jar]

這個(gè)main.jar就是混淆后的jar包,只不過這個(gè)jar還包含了R類和BuildConfig類的信息,所以將這個(gè)信息過濾掉就可以。但問題也來了,jar包都已經(jīng)打好了,怎么配置混淆?解決方法是只要把jar包當(dāng)輸入就行了,最終配置如下:

task buildJar(type: Jar, dependsOn: ['assembleRelease']) { destinationDir = file('build/outputs/jar/') appendix = "" // SDK的后綴名稱 baseName = "" // SDK名稱 version = SDK_VERSION // 這個(gè)常量是在gradle.properties中配置的 // manifest信息 def map = ['Version': SDK_VERSION,  'Gradle': project.gradle.gradleVersion,  'Vendor': '',  'Date': new Date().getDateTimeString() ] manifest.attributes(map) from(project.zipTree('build/intermediates/transforms/proguard/release/jars/3/3/main.jar')) exclude('**/BuildConfig.class') exclude('**/BuildConfig/$*.class') exclude('**/R.class') exclude('**/R/$*.class') include('**/*.class')}

總結(jié)

OK,任務(wù)搞定。以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)各位Android開發(fā)者們能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰考县| 长寿区| 黔南| 关岭| 华池县| 嵩明县| 乌拉特后旗| 项城市| 楚雄市| 凉山| 尤溪县| 九龙坡区| 丰顺县| 泰安市| 邵阳市| 永济市| 积石山| 乌什县| 阳信县| 龙井市| 元氏县| 新化县| 阿尔山市| 祥云县| 翼城县| 独山县| 兴安县| 巴马| 湟中县| 和平区| 永济市| 英超| 柯坪县| 开平市| 双峰县| 历史| 门头沟区| 竹山县| 盐源县| 于田县| 三穗县|