1. 程式人生 > >如何使用Android Studio打包混淆的Jar

如何使用Android Studio打包混淆的Jar

使用AS打包混淆Jar包,百度一下,一片一片的,但是很多都是零零散散的寫得不是很詳細或是直接拷貝,按照他們的教程測試總不是很順利,所以這裡我就把我個人學習AS打包混淆Jar的成果總結出來,希望對大家有幫助。個人覺得寫得還是比較詳細的

使用gradle混淆打包Jar

使用AS開發專案,引入第三方庫是非常方便的,我們只需要在build.gradle中配置一行程式碼就可以輕鬆引入我們需要的開發庫。那麼gradle可以幫我們混淆打包Jar嗎?答案是當然可以!

那麼我們如何打包Jar呢?其實我們在編譯專案的時候,AS已經幫我們在目錄build/intermediates/bundles/release/classes.jar

打好了Jar。那麼我們需要做的就是把Jar進行混淆的工作了。這裡以個人專案bannerDemo 為例,混淆步驟如下:

在你的library的build.gradle檔案中加入如下程式碼:
 task makeJar(type: proguard.gradle.ProGuardTask, dependsOn: "build") { 
   // 未混淆的jar路徑    
 injars 'build/intermediates/bundles/release/classes.jar' 
   // 混淆後的jar輸出路徑   
 outjars 'build/outputs/cocolove2-banner-1.1.0.jar'
// 混淆協議 configuration 'proguard-rules.pro' }
配置混淆協議

1.我們先把AS自帶的協議配置進來中文註釋,筆者新增

# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# Starting with version 2.2 of the Android plugin for Gradle, these files are no longer used. Newer
# versions are distributed with the plugin and unpacked at build time. Files in this directory are
# no longer maintained. #表示混淆時不使用大小寫混合類名 -dontusemixedcaseclassnames #表示不跳過library中的非public的類 -dontskipnonpubliclibraryclasses #列印混淆的詳細資訊 -verbose # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize ##表示不進行校驗,這個校驗作用 在java平臺上的 -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file. -keepattributes *Annotation* -keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native <methods>; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.** # Understand the @Keep support annotation. -keep class android.support.annotation.Keep -keep @android.support.annotation.Keep class * {*;} -keepclasseswithmembers class * { @android.support.annotation.Keep <methods>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <fields>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <init>(...); }

2.AS自帶的配置文件還是不夠的,我們還需要加入如下配置
這裡只展示基本操作,在實際開發中可能需要更多依賴,要根據具體情況引入自己需要的依賴包

#下面程式碼中的xx是指我個人的配置路徑,涉及個人資訊,這裡以xx代替
#引入依賴包rt.jar(jdk路徑)
-libraryjars /xxx/xx/xx/jdk1.8.0_77.jdk/Contents/Home/jre/lib/rt.jar
#引入依賴包android.jar(android SDK路徑)
-libraryjars /xx/xx/xx/Android/sdk/platforms/android-24/android.jar
#如果用到Appcompat包,需要引入
-libraryjars /xxx/xxx/xx/xxx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/appcompat-v7/24.1.1/jars/classes.jar
-libraryjars /xx/xx/xx/xx/MyApplication/library-banner/build/intermediates/exploded-aar/com.android.support/support-v4/24.1.1/jars/classes.jar

#忽略警告
-ignorewarnings
#保證是獨立的jar,沒有任何專案引用,如果不寫就會認為我們所有的程式碼是無用的,從而把所有的程式碼壓縮掉,匯出一個空的jar
-dontshrink
#保護泛型
-keepattributes Signature

3.加入自己不想混淆的配置根據實際需求配置

-keep class com.cocolove2.library_banner.view.**{*;}
在命令列執行命令混淆Jar,提示BUILD SUCCESFUL表示成功!
//mac
./gradlew makeJar

//windows
gradlew makeJar

示例展示

1.首先我們要看看下我們的buildTool的配置,如下圖:


buildTools#Gradle

如果你的專案的buildTool#Gradle配置如上圖,那你打包混淆的第一步已經完成了,而如果選擇的是本地的gradle,當你執行./gradlew makeJar時,系統會先下載gradle,不知是網路不好還是被牆掉了,我每次嘗試下載都是等了很久,最終也沒成功。

2.在專案目錄下執行./gradlew makeJar打包輸出混淆的Jar,如下圖


[email protected]
[email protected]

3.檢視混淆結果.


[email protected]

混淆報錯解決辦法個人遇到的

#log提示缺少依賴Jar,或者路徑不對

解決辦法:乖乖的引入缺少的依賴jar和修改路徑
#提示如下異常
[INFO] java.io.IOException: Can't read [D:\Program 
Files\Java\jdk1.8.0_91\jre\lib\rt.jar] (Can't process class 
[com/oracle/net/Sdp$1.class] (Unsupported class version number
 [52.0] (maximum 51.0, Java 1.7)))

解決辦法:
下載最新proguard(支援Java 8的版本),然後將下載的檔案解壓。
將andorid sdk/tools/proguard/lib中的jar包,替換為剛下載解壓檔案中的lib包。

相關推薦

Android Studio 打包jar檔案並混淆程式碼

參考博文:http://www.jianshu.com/p/0a3ce6e9ab85 開展專案合作時,基於模組化思想,對方要用到你的程式,而你又不想將原始碼給對方,通常會將程式進行打包生成jar,並作混淆處理。 1、建立專案 【File】——【New Module】——【A

如何使用Android Studio打包混淆Jar

使用AS打包混淆Jar包,百度一下,一片一片的,但是很多都是零零散散的寫得不是很詳細或是直接拷貝,按照他們的教程測試總不是很順利,所以這裡我就把我個人學習AS打包混淆Jar的成果總結出來,希望對大家有幫助。個人覺得寫得還是比較詳細的 使用gradle混淆打包Jar 使

android studio打包jar aar

首先要明白aar與jar包的區別,aar包是android archive 的縮寫,就是由安卓定義的jar型別,可以將manifest下的配置,如你在編寫sdk的時候,需要整合方將你的service或者其他的元件在manifest中配置,在提供sdk時,都需要提供各樣的SDK的整合文件,雖

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

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

Android studio打包混淆編譯的時候出現異常:transformClassesAndResourcesWithProguardForRelease

具體異常資訊擷取如下: Browser/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/7.8.0/jars/classes.jar(;;;;;;**.clas

帶你徹底明白 Android Studio 打包混淆

前言在使用Android Studio混淆打包時,該IDE自身集成了Java語言的ProGuard作為壓縮,優化和混淆工具,配合Gradle構建工具使用很簡單。只需要在工程應用目錄的gradle檔案中設定minifyEnabled為true即可。然後我們就可以到proguar

Android Studio打包混淆帶資源的SDK

           最近要實現一個把自己的整個應用打包成SDK接入到合作公司的應用中,剛開始是想採用外掛(如360的DroidPlugin,原理解析連結:分析DroidPlugin,深入理解外掛化框架)的形式來做,這樣的話很方便,只要提供一個apk就行了。但是問題來了,一

Android studio 打包jar和AAR

軟體:Android studio 3.1.3 新建一個module 在mylogin中新增一個工具類ActivityUtil: package com.nkbh.sevenday.mylogin; import android.content.Context; import and

Android Studio 打包 Jar (將自己的 專案/自定義View 打包jar

一、常見的幾種打包SDK的方式 1.直接以Library Module的方式引入 優點:簡單方便,直接把模組摳出來放進一個Library中扔給第三方公司用就行了 缺點:只能適合於Androi

Android Studio 打包jar中包含另一個jar或多個jar時解決方案

關於.jar檔案: 平時我們Android專案開發中經常會用到第三方的.jar檔案。 其實.jar檔案就是一個類似.zip檔案的壓縮包,裡面包含了一些原始碼,注意的是.jar不包含資原始檔(res、圖片等) 一、首先學習如何在Android studi

Android studio打包時忽略指定的jar

         前言:最近遇到一個問題,就是公司做自己的rom,對framwork有改動,添加了自己的api,那麼問題來了,我們開發的階段使用的是android原生的環境,所以不可能呼叫得到自己定義的api,那麼為了編譯通過,我們只能把framwork.jar單獨引進了,但

Android Studio打包apk,aar,jar

1jar vs aar    文字我們將講解android studio打包apk,aar,jar包的相關知識。apk包就是android系統的安裝包,這裡沒什麼好說的,aar包是android中獨有的類庫包,而jar包是java中特有的類庫包,在具體的介紹打包之前,我們

關於Android Studio導出jar包的問題

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

Android Studio導出jar給Unity3D用

player single cti con extend style unity3d 輸入 exclude 1、新建一個Android Studio工程,選擇空Activity 2、創建一個Module 3、將Unity的依賴jar包拷貝到工程的

Android Studio打包以及Gradle配置構建

otto sign rac color conf wmf git var png 本文轉載 郭霖公眾號 https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650241610&idx=1&sn

Android Studio 打包生成 APK

如果 sign ext 對話 http ner 分享 技術 oid 1. 第一步 Build -> Generate Signed APK 2. 之後會要求開發者輸入相關的密鑰文件和密碼 如果有則找到對應的 .jks 文件輸入密碼完成相應操作,否則則創建一個對

Android Studio 打包生成apk

self one 直接 word uil 編譯 jpg content 但是 打開AndroidStudio,並且打開想要生成apk文件的項目。 點擊工具欄上面的“Builder” 點擊“Builder”之後在下拉菜單裏面可以看到“Genara

【轉】Android Studio打包全攻略---從入門到精通

UC store 類型 安裝文件 public alt url tool 描述 原文地址:http://blog.csdn.net/zivensonice/article/details/51672846 初出茅廬 手動打包 怎麽手動打包 項目寫完了,現在需要把應用上傳

Android Studio 打包AAR和第三方靜態庫

contain ise ply appcompat pla 依賴 prop 三方庫 spa 需求 現在有一個第三方庫libstatic_add.a和對應的頭文件static.h,要求封裝一個Module,該Module依賴這個靜態庫,要求打包的Module包含該靜態庫。

Android Studio打包生成APK教程

src 變量名 nts .apk variants idt test filename 一個 一、修改版本和指定生成APK文件名【可選】 將項目切換到Project視圖,打開app目錄下的build.gradle文件 1.1 修定軟件版本 versionCode是app的大