亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2017年03月02日 11:15:51   作者:jacpy  
昨天準(zhǔn)備把寫(xiě)好的代碼使用gradle打jar包出來(lái),并打算加混淆。打jar包容易,結(jié)果在混淆上走了彎路。所以這篇文章主要介紹了關(guān)于Android studio利用gradle打jar包并混淆的方法,需要的朋友可以參考下。

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

首先打jar包的配置很簡(jiǎn)單,使用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)上面打出來(lái)的jar包中的代碼沒(méi)有被混淆,于是加混淆。使用混淆的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是寫(xiě)在injars后面啊,it will be empty是提示哪里有問(wèn)題?以為是proguard-rules.pro文件中的配置有問(wèn)題,結(jié)果把文件清空,還是報(bào)上面的錯(cuò)誤,錯(cuò)誤原因不得而知了。在這個(gè)問(wèn)題上耗了很長(zhǎng)時(shí)間,最終還是沒(méi)有解決。
突然看到上面的assembleRelease task想起了平常打APK時(shí),會(huì)使用到這個(gè)task,打出來(lái)的APK會(huì)自動(dòng)混淆。

那這個(gè)assembleRelease task就會(huì)依賴(lài)處理混淆的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.).
注: 某些輸入文件使用或覆蓋了已過(guò)時(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.1
Reading 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] (filte
red)
Reading library jar [android-sdk-windows-studio\extras\android\m2repository\com\android\support\support-annotations\25.1.0\support-annotations-25.1.0.jar] (f
iltered)
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] (filter
ed)
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: 383
Printing 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: 48
Obfuscating...
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包,只不過(guò)這個(gè)jar還包含了R類(lèi)和BuildConfig類(lèi)的信息,所以將這個(gè)信息過(guò)濾掉就可以。但問(wèn)題也來(lái)了,jar包都已經(jīng)打好了,怎么配置混淆?解決方法是只要把jar包當(dāng)輸入就行了,最終配置如下:

task buildJar(type: Jar, dependsOn: ['assembleRelease']) {
 destinationDir = file('build/outputs/jar/')
 appendix = "" // SDK的后綴名稱(chēng)
 baseName = "" // SDK名稱(chēng)
 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ù)搞定。以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)各位Android開(kāi)發(fā)者們能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論