Bài đăng nổi bật

Lập trình Java Spring Boot (20 buổi)

JAVA FULLSTACK VIỆT NAM: Website:  javafullstackvietnam.com Fan page:  https://www.facebook.com/JavaFullstackVietNam Group:  https://www.fac...

Thứ Ba, 29 tháng 12, 2015

Cách sử dụng obfuscated-proguard (đóng gói thư viện java + netbeans8)


1. Tải plugins tại ứng dụng Netbeans8.
Trong menu Tools->plugins (search proguard) --> cài đặt

2. Cấu hình trong file build.xml của project

Copy thẻ xml dưới đây đặt trong thẻ <project> của file build.xml (Chú ý các chú thích màu đỏ)

<target name="-post-jar">
        <!--  cấu hình đường dẫn thư viện proguard  -->
<property name="proguard.jar.path" value="C:\Projects\MyOwn\Common_Lib\proguard\proguard4.10.jar" />
<!--  cấu hình đường dẫn java home  -->
        <property name="java.home.path" value="E:\DEV_Tools\JDK_1.7U60" />        
        <taskdef resource="proguard/ant/task.properties"
                 classpath="${proguard.jar.path}" />        
        <echo message="Obfuscating ${dist.jar}..."/>
        <mkdir dir="${build.dir}/obfuscated"/>
        <proguard printmapping="${build.dir}/obfuscated/${application.title}.map"
                  renamesourcefileattribute="SourceFile" ignorewarnings="true">            
            <!-- Specify the input jars, output jars, and library jars. -->
            <injar  file="${dist.jar}" />
<!--  cấu hình đường dẫn + tên file jar của thư viện -->
            <outjar file="${build.dir}/obfuscated/HVA.TESTConnector.jar" />            
            <libraryjar path="${javac.classpath}" />            
            <libraryjar file="${java.home.path}/jre/lib/rt.jar" />            
            <!-- Keep some useful attributes. -->
            <keepattribute name="InnerClasses" />
            <keepattribute name="SourceFile" />
            <keepattribute name="LineNumberTable" />
            <keepattribute name="Deprecated" />
            <keepattribute name="*Annotation*" />
            <keepattribute name="Signature" />            
            <!-- Preserve all public classes, and their public and protected fields and methods. -->
            <keep access="public">
                <field  access="public protected" />
                <method access="public protected" />
            </keep>                        
            <!-- Preserve all .class method names. -->
            <keepclassmembernames access="public">
                <method type      ="java.lang.Class"
                        name      ="class$"
                        parameters="java.lang.String" />
                <method type      ="java.lang.Class"
                        name      ="class$"
                        parameters="java.lang.String,boolean" />
            </keepclassmembernames>            
            <!-- Preserve all native method names and the names of their classes. -->
            <keepclasseswithmembernames>
                <method access="native" />
            </keepclasseswithmembernames>            
            <!-- Preserve the methods that are required in all enumeration classes. -->
            <keepclassmembers extends="java.lang.Enum">
                <method access="public static"
                        type="**[]"
                        name="values"
                        parameters="" />
                <method access="public static"
                        type="**"
                        name="valueOf"
                        parameters="java.lang.String" />
            </keepclassmembers>            
            <!-- Explicitly preserve all serialization members. The Serializable
                 interface is only a marker interface, so it wouldn't save them.
                 You can comment this out if your library doesn't use serialization.
                 With this code serializable classes will be backward compatible -->
            <keepnames implements="java.io.Serializable"/>
            <keepclassmembers implements="java.io.Serializable">
                <field  access    ="final"
                        type      ="long"
                        name      ="serialVersionUID" />
                <field  access    ="!static !transient"
                        name      ="**"/>
                <field  access    ="!private"
                        name      ="**"/>
                <method access    ="!private"
                        name      ="**"/>
                <method access    ="private"
                        type      ="void"
                        name      ="writeObject"
                        parameters="java.io.ObjectOutputStream" />
                <method access    ="private"
                        type      ="void"
                        name      ="readObject"
                        parameters="java.io.ObjectOutputStream" />
                <method type      ="java.lang.Object"
                        name      ="writeReplace"
                        parameters="" />
                <method type      ="java.lang.Object"
                        name      ="readResolve"
                        parameters="" />
            </keepclassmembers>            
            <!-- Your application may contain more items that need to be preserved;
                 typically classes that are dynamically created using Class.forName -->
        </proguard>

    </target>

3. Build lại Project
sau khi copy xong build lại project là bạn đã có một thư viện jar được đóng gói khá an toàn.

Author: HVA

Bài đăng phổ biến