频道栏目
首页 > 资讯 > Java > 正文

ant批量打包混淆修改资源文件

16-07-23        来源:[db:作者]  
收藏   我要投稿

一、开发环境

 操作系统:Windows
 
 JDK:1.6+
 
 开发工具:eclipse
 
 ant:apache-ant-1.9.4
 

二、安装和配置

 1、下载ant:apache-ant-1.9.4,另需下载一个支持for语句的jar文件 ant-contrib-1.0b3.jar,如下载本文中的ant文件,则已经自带了。如没有下载本文中的ant,那么需下载后放到ant根目录中的lib目录中。
 
 2、配置环境变量:
 
 ANT_HOME: D:\apache-ant-1.9.4-bin\apache-ant-1.9.4  此为你的ANT安装路径;
 
 PATH:    ;%ANT_HOME%\bin  注意前面的分号,如果PATH中最后没有分号“;”的话要加上,有的话就可去除。
 
 CLASSPATH: ;C:/apache-ant-1.8.1/lib 注意前面的分号,如果CLASSPATH中最后没有分号“;”的话要加上,有的话就可去除。
 
 3、测试ant是否安装成功
 
 输入 ant -version 如出现ant版本号则安装成功
 
 安装成功
 

三、ant脚本配置

 1、ant.properties 该文件如没有需要新建(该文件中的中文复制进项目中记得删除,因为properties文件不识别中文)
 

######################################################
#date
date=2016-07-19
#version code
vcode=260
#version name 以上为apk命名辅助属性
vname=2.6.0
#channels 渠道号用英文逗号分隔
market_channels=aaa,bbb
#app label app名称
app_labels=test

######################################################
####DO NOT MODIFY BELOW
######################################################
# the config file for batch package. application文件所在目录,不包括文件名
application.package=com.xxx.android.client
#对应build.xml文件中project属性name字段
ant.project.name=xxx
#字符编码
java.encoding=utf-8

#混淆输出临时文件
out.absolute.dir=C:/tmp
#打包签名APK输出目录
gos.path=C:/xxxPkg
#签名文件信息
key.store=E:/xxx.keystore
key.store.password=xxx123456
key.alias=xxx
key.alias.password=xxx123
#批量打包渠道号修改java文件所在目录,不包括文件名
src.const=src/com/xxx/android/client/common
#本地批量替换资源文件目录
local.res=C:/Users/xxx/Desktop/logos/logos
#项目中要替换的资源文件目录如果是需要
res.drawable.m=res/drawable-mdpi
res.drawable.h=res/drawable-hdpi
res.drawable.xh=res/drawable-xhdpi
res.drawable.xxh=res/drawable-xxhdpi

#channel pkgs apk文件包名
app_version_suffix=EnterPrise_on_${vcode}_${vname}_${date}_h

 

本地资源文件目录注意!!!!!

 1、上面文件中的 local.res=C:/Users/xxx/Desktop/logos/logos目录必须是用渠道号的名称命名,因为ant脚本运行时会去匹配和渠道号相应的目录。
 
 logos目录

 2、渠道号文件目录里的格式如下图,本文因为是要替换logo文件,所以文件名都相同,其他需求请自行研究。channel_id目录


 
  2、build.xml



    name="xxx"
    default="help" >

    

    
    

    
    

    

    

        
    
    

    
    

    
    

    
    
    

    

        

            
        
    

    

        
        
        
        
    

    

        

            

            

            
        

        

            

            

            
        

        
            

            

            
        

        
        

        
        

        

        
        

        

        
        

        

        

        
        

            

                

                

            
        
        
        

        

            
        

        

            
        

        
    
    
    

        

            
        

        

            
        

        
    
    
    

  3、local.properties
 

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.

# location of the SDK. This is only used by Ant
# For customization when using a Version Control System, please read the
# header note.
#sdk的根目录
sdk.dir=E:\\tools\\sdk

  4、proguard-project.txt
 

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

#optimization
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-optimizationpasses 5

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-verbose
-keepattributes SourceFile,LineNumberTable,Signature,Exceptions

####################################################################

#libs 项目中的jar文件不混淆
-libraryjars libs/android-async-http-1.4.6.jar
-libraryjars libs/avoscloud-v2.6.9.1.jar
-libraryjars libs/avospush-v2.6.9.1.jar
-libraryjars libs/avossearch-v2.6.9.1.jar
-libraryjars libs/avosstatistics-v2.6.9.1.jar
-libraryjars libs/baidumapapi_v3_5_0.jar
-libraryjars libs/fastjson.jar
-libraryjars libs/httpclient-4.3.5.jar
-libraryjars libs/httpcore-4.3.2.jar
-libraryjars libs/httpmime-4.3.5.jar
-libraryjars libs/locSDK_5.2.jar
-libraryjars libs/android-support-v4.jar
-libraryjars libs/gson.jar

####################################################################
#keep class for libraries 引用到jar文件的类不混淆
-keep class org.apache.** {*; }
-keep class com.loopj.** {*; }
-keep class com.google.gson.** {*; }
-keep class com.baidu.** {*; }
-keep class android.support.** {*; }
-keep class org.slf4j.** {*; }
-keep class com.android.volley.** {*; }

#xiaomi push 推送不混淆
-keep class com.xiaomi.** {*; }
-keep class org.apache.thrift.** {*; }
-keep class com.avos.** {*; }
-keep class org.java_websocket.** {*; }

#alibaba pay 支付不混淆
-keep class com.alibaba.fastjson.** {*; }


#umeng statistics
-keep class u.aly.** {*; }
-keep class com.umeng.analytics.** {*; }

#http receiver 实体bean不混淆
-keep class com.xxx.android.client.bean.** {*; }

#jni 用到jni的地方不混淆
-keepclasseswithmembernames,allowshrinking class * {  
    native ;  
} 

#R
-keepclassmembers class **.R$* {
    public static ;
}

#enum
-keepclassmembers enum * {
    public static **[] values();  
    public static ** valueOf(java.lang.String);  
}  

#parcelable
-keep class * implements android.os.Parcelable {  
  public static final android.os.Parcelable$Creator *;  
}

#Serializable
-keep class * implements android.os.Serializable {  
  public static final android.os.Serializable$Creator *;  
}
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}
-keep public class * implements java.io.Serializable {*;}

#Activity, application, service, broadcastReceiver, contentprovider, fragment etc used in AndroidManifest.xml
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service  
-keep public class * extends android.content.BroadcastReceiver  
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment

#self-defined view used in layout xml files
-keep public class * extends android.view.View

###################################################################
-dontwarn android.support.**
-dontwarn org.apache.** 
-dontwarn org.slf4j.**
-dontwarn com.android.volley.**
-dontwarn com.hbec.**
-dontwarn com.avos.**

# proguard.cfg 以下是leancloud推送不混淆的代码

-keepattributes Signature
-dontwarn com.jcraft.jzlib.**
-keep class com.jcraft.jzlib.**  { *;}

-dontwarn sun.misc.**
-keep class sun.misc.** { *;}

-dontwarn com.alibaba.fastjson.**
-keep class com.alibaba.fastjson.** { *;}

-dontwarn sun.security.**
-keep class sun.security.** { *; }

-dontwarn com.google.**
-keep class com.google.** { *;}

-dontwarn com.avos.**
-keep class com.avos.** { *;}

-keep public class android.net.http.SslError
-keep public class android.webkit.WebViewClient

-dontwarn android.webkit.WebView
-dontwarn android.net.http.SslError
-dontwarn android.webkit.WebViewClient

-dontwarn android.support.**

-dontwarn org.apache.**
-keep class org.apache.** { *;}

-dontwarn org.jivesoftware.smack.**
-keep class org.jivesoftware.smack.** { *;}

-dontwarn com.loopj.**
-keep class com.loopj.** { *;}

-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.** { *;}
-keep interface com.squareup.okhttp.** { *; }

-dontwarn okio.**

-dontwarn org.xbill.**
-keep class org.xbill.** { *;}

-keepattributes *Annotation*

-keep class ** extends com.avos.avoscloud.im.v2.AVIMTypedMessage
-keepclassmembers  class ** extends com.avos.avoscloud.im.v2.AVIMTypedMessage{
    *;
}

  5、project.properties
 

# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
#如不需要混淆则删除此代码
proguard.config=proguard-project.txt

# Project target.
target=android-19

 

四、ant脚本运行

 

使用命令行进入到项目的根目录里,然后输入 ant deploy 等待执行完成就行了。
这里写图片描述

 

遇到的问题

1、如引用到第三方项目,本文中是把第三方项目打包成jar文件,然后放入本项目中。
2、脚本运行时遇到过:编码 UTF-8 的不可映射字符。问题出在替换的java文件和manifest文件中,解决方法是在 replaceregexp 循环替换渠道号时加入 encoding=”utf-8” ,设置好编码格式就行了。
3、在替换资源文件时,本以为项目中有同名文件复制进去后可以直接替换,最后发现怎么都不成功,然后只能使用先删除,在复制进去,终于成功了。
4、sdk中的sdk\tools\ant\build.xml文件中的java.targetjava.source一般都是1.5的版本,这个版本会有一个问题,不支持switch中的一些关键字,但是我们运行项目、手动打包项目都不会有问题,只有在用ant批量打包时会遇到,所以要把这个版本改到1.7,前提是你的jdk版本有1.7的资源。
java

相关TAG标签
上一篇:APP使用的一些第三方库
下一篇:iOS开发UI篇-常用控件详解(UIView)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站