Android 代码混淆,混淆打包

混淆打包:保护你的Android应用源代码 一个常见的安全措施是使用混淆打包,它可以使你的代码更难以理解和逆向工程。本文将详细介绍如何使用混淆打包来保护你的Android应用,并提供相应的源代码示例。它通过对类名、方法名和变量名进行重命名,以及删除无用的代码和调试信息,来增加逆向工程的难度。在发布应用之前,务必进行混淆打包,并验证应用的功能和稳定性。指定了ProGuard的配置文件,其中包括默认的Android优化配置文件和自定义的混淆规则文件。你可以看到,通过混淆打包后,类名、方法名和变量名都被重命名为难以理解的形式,增加了源代码的复杂性。 阅读详情

分为三步:

0:开通混淆,

1:第二步是设置混淆

2:最重要的是设置哪些不混淆

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



0:第一步是开通混淆

这里在build.gradle里面设置:minifyEnabled 为true

buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
如果有考虑多渠道那么:如下的flavor里面设置

buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
            'proguard-rules.pro', 'proguard-rules-new.pro'
        }
    }
 
   productFlavors {
        flavor1 {
        }
        flavor2 {
            proguardFile 'other-rules.pro'
        }
    }



1:第二步是设置混淆

该文件就是上面的proguard-rules.pro,在项目里面应该可以找到的,如果没有找到,可以手动的创建这个文件

首先要了解的是我们混淆的步骤是这样的:

首先是shrink 压缩,然后是optimize优化,然后是obfuscate 混淆,然后是preverify 审核器

shrink 压缩查看哪些类或者类的组件(例如变量吧)没有被使用,可以将他们抛弃掉
In the shrinking step, ProGuard starts from these seeds and recursively determines which classes and class members are used. All other classes and class members are discarded.
optimize优化进一步的优化,在优化里面,将一些不是其二点的类和方法可以将他们命名为私有的静态的或者final的,没有使用的参数可以被删除,其他的方法可以弄成一行显示
In the optimization step, ProGuard further optimizes the code. Among other optimizations, classes and methods that are not entry points can be made private, static, or final, unused parameters can be removed, and some methods may be inlined.
obfuscate 混淆In the obfuscation step, ProGuard renames classes and class members that are not entry points. In this entire process, keeping the entry points ensures that they can still be accessed by their original names.
将不是切入点的类和方法的名字重新命名,在这个处理阶段,保证切入点的类和方法可以使用原来的名字访问
preverify 审核器预校验它是唯一一步不用去关心切入点的步骤
The preverification step is the only step that doesn't have to know the entry points.


################### -0- Input/Output Options #######################

#不去忽略非公共的库类
#proguard 的4.5版本以后,这个属性是默认的,我们的版本是5.2.1,可以不写
-dontskipnonpubliclibraryclasses


#################### -2- optimization Options ##########################

#优化的轮次(pass)
-optimizationpasses 5


#优化  不优化输入的类文件
#注意这里只是不优化输入的类文件,后面的-optimizations 还是可以起作用的,-optimizationss是更细节的
-dontoptimize

# 应该是优化时候的过滤,只在优化的阶段时候有用,而不是混淆的阶段。
# 过滤相关的在这里http://proguard.sourceforge.net/manual/optimizations.html
# For example, "code/simplification/variable,code/simplification/arithmetic" only performs the two specified peephole optimizations.
# For example, "!method/propagation/*" performs all optimizations, except the ones that propagate values between methods.
# For example, "!code/simplification/advanced,code/simplification/*" only performs all peephole optimizations.
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*


#################### -3- Obfuscation Options ##########################

#包明不混合大小写
#混淆后的包明不混合大小写,只有小写
-dontusemixedcaseclassnames

#保护注解
#-keepattributes [attribute_filter]
# Specifies any optional attributes to be preserved. The attributes can be specified with one or more -keepattributes directives. The optional filter is a comma-separated list of attribute names that Java virtual machines and ProGuard support. Attribute names can contain ?, *, and ** wildcards, and they can be preceded by the ! negator. For example, you should at least keep the Exceptions, InnerClasses, and Signature attributes when processing a library. You should also keep the SourceFile and LineNumberTable attributes for producing useful obfuscated stack traces. Finally, you may want to keep annotations if your code depends on them. Only applicable when obfuscating.
-keepattributes *Annotation*

#对于一个类来说,属性attribute 就是例如bytecode,文件名,行号等
#Class files essentially define classes, their fields, and their methods. A lot of essential and non-essential data are attached to these classes, fields, and methods as attributes. For instance, attributes can contain bytecode, source file names, line number tables, etc.
#2016年08月09日10:14:09百度查到可以用这个配置保留错误的行号,有待测试,如果可以能方便查错
-keepattributes SourceFile,LineNumberTable

################### -4- preverify Options #######################
 #预校验
#取消预校验
-dontpreverify

################### -5- General Options #######################

#混淆时是否记录日志
-verbose

#忽略警告
-ignorewarnings


#####################记录生成的日志数据,gradle build时在本项目根目录输出################
#输出项目目录\model的名称\build\outputs\mapping\release
#例如我的这个路径就是C:\AndroidStudioProjects\AndroidStudioProjects\MixDemo\app\build\outputs\mapping\release

#apk 包内所有 class 的内部结构
#dump 是转储的意思
#General Options
-dump class_files.txt

#未混淆的类和成员
#Input/Output Options
-printseeds seeds.txt

#列出从 apk 中删除的代码
#Shrink Options
-printusage unused.txt

#混淆前后的映射
#Obfuscation Options
#-printmapping mapping.txt

#重用同一个mapping
#Obfuscation Options
#-applymapping /Users/drome/Developer/mi-cashier-android/cashierbeta/build/outputs/mapping/release/mapping.txt
-applymapping C:\500mi\Published Builds\mapping\mapping.txt
#####################记录生成的日志数据,gradle build时 在本项目根目录输出-end################

2:最重要的是设置哪些不混淆

################### 保持哪些类不被混淆#################
-keep public class * extends android.app.Fragment
-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 * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
#如果有引用v4包可以添加下面这行
-keep public class * extends android.support.v4.app.Fragment


####################以libaray的形式引用的框架,如果不想混淆 keep 掉##############
-keep class com.nostra13.universalimageloader.** { *; }
-keep class com.handmark.pulltorefresh.library.**{*;}
-keep class com.drome.lib_android_usb_serial.usbserial.**{*;}

####################友盟##########################
-keep class com.umeng.**{*;}
#友盟消息推送混淆配置
-keep class com.umeng.message.* {
        public <fields>;
        public <methods>;
}

-keep class com.umeng.message.protobuffer.* {
        public <fields>;
        public <methods>;
}

-keep class com.squareup.wire.* {
        public <fields>;
        public <methods>;
}

-keep class com.umeng.message.local.* {
        public <fields>;
        public <methods>;
}
-keep class org.android.agoo.impl.*{
        public <fields>;
        public <methods>;
}

################andfix混淆配置###############################
-keep class * extends java.lang.annotation.Annotation
-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.alipay.euler.andfix.** { *; }


######################gson  #############################
#-libraryjars libs/gson-2.2.2.jar
-keepattributes Signature
# Gson specific classes
-keep class sun.misc.Unsafe { *; }
# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }


##################### webview + js######################
-keepattributes *JavascriptInterface*
# keep 使用 webview 的类
-keepclassmembers class  com.veidy.activity.WebViewActivity {
   public *;
}
# keep 使用 webview 的类的所有的内部类
-keepclassmembers  class  com.veidy.activity.WebViewActivity$*{
    *;
}


###################阿里OSSClient对象存储服务#################
    -keep class com.alibaba.sdk.android.oss.** { *; }
    -dontwarn okio.**
    -dontwarn org.apache.commons.codec.binary.**


###################信鸽推送#################################
-keep class com.tencent.android.tpush.**  {* ;}
-keep class com.tencent.mid.**  {* ;}

############<span></span>混淆保护自己项目的部分代码以及引用的第三方jar包library-end##################

-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

#保持 native 方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}

#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

#保持自定义控件类不被混淆
-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
#保持自定义控件类不被混淆
-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

#保持 Parcelable 不被混淆
-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

#保持 Serializable 不被混淆
-keepnames class * implements java.io.Serializable

#保持 Serializable 不被混淆并且enum 类也不被混淆
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    !static !transient <fields>;
    !private <fields>;
    !private <methods>;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

#保持枚举 enum 类不被混淆 如果混淆报错,建议直接使用上面的 -keepclassmembers class * implements java.io.Serializable即可
#-keepclassmembers enum * {
#  public static **[] values();
#  public static ** valueOf(java.lang.String);
#}

-keepclassmembers class * {
    public void *ButtonClicked(android.view.View);
}

#不混淆资源类
-keepclassmembers class **.R$* {
    public static <fields>;
}

#####################Others###########################

-dontwarn com.xiaomi.**

-dontwarn com.ut.mini.**

-keep class org.android.agoo.service.* {*;}

-keep class org.android.spdy.**{*;}

-keep class com.wbm.app.business.model.**{*;}
-keep class com.wbm.app.business.model.Wholesale.SimulateCreateCashierTrade.**{*;}
-keep class com.wbm.app.utils.**{*;}

-keep class org.litepal.**{*;}

-keep class com.taobao.**{*;}
#应该是Fresco
-keep class com.facebook.**  {* ;}

#如果引用了v4或者v7包
-dontwarn android.support.**




参考:

http://proguard.sourceforge.net/

https://segmentfault.com/a/1190000004461614


官方给出的Android的项目的混淆的example:http://proguard.sourceforge.net/manual/examples.html#androidactivity

-injars      bin/classes
-injars      libs
-outjars     bin/classes-processed.jar
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*

-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 * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(...);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.content.Context {
   public void *(android.view.View);
   public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}


通配符匹配规则

通配符 规则
? 匹配单个字符
* 匹配类名中的任何部分,但不包含额外的包名
** 匹配类名中的任何部分,并且可以包含额外的包名
% 匹配任何基础类型的类型名
* 匹配任意类型名 ,包含基础类型/非基础类型
... 匹配任意数量、任意类型的参数
<init> 匹配任何构造器
<ifield> 匹配任何字段名
<imethod> 匹配任何方法
*(当用在类内部时) 匹配任何字段和方法
$ 指内部类

更详细的语法请戳:http://proguard.sourceforge.ne



整合java实例 FastDFS FastDFS 整合java实例,欢迎大家下载使用。 恩 立即下载

相关推荐

fastDFS断点续传实例

fastDFS断点续传的一个小Demo,用maven构建的项目。之前在网上找了好久关于断点续传的实例,没有找到,特意分享出来了。

androidstudio 混淆native方法怎么避免

我整理的一些关于【CI】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1Android Studio 中避免混淆 Native 方法的方案 在 Android 开发中,使用了 JNI (Java Native Interface) 的 native 方法可能会由于...

weixin_40889036的博客 365

【ZYNQ驱动双AD9361实战】(一)从官方参考设计到自定义移植

本文详细介绍了如何将ADI官方的单AD9361参考设计移植到ZYNQ平台以驱动双AD9361射频板卡。内容涵盖从环境搭建、官方工程架构解析,到硬件HDL工程修改(包括顶层设计、引脚分配及TCL脚本适配)以及Linux设备树软件配置的全流程实战指南,帮助开发者实现自定义双通道射频收发系统。

weixin_29170327的博客 362

android 混淆规则 学习总结

混淆的规则 1.压缩 Shrinking 默认开启,优化Apk体积,移除未使用的类和成员 #关闭压缩 -dontshrink 2.优化 Optimization 默认开启,在字节码中进行优化,让应用运行更快 #关闭优化 #-dontoptimize #表示proguard对代码进行迭代优化的次数,Android一般为5 -optimizationpasses n 3.混淆 Obfuscation ...

binbinbintony的博客 723

从模态到颤振:深入解读Nastran的V-g/V-f图,判断你的机翼设计是否安全

本文深入解析Nastran中的V-g/V-f图在机翼颤振分析中的应用,帮助工程师准确判断设计安全性。通过模态分析到颤振边界的完整判读逻辑,结合气动弹性特性,指导优化机翼结构设计,确保飞行安全。

weixin_28732953的博客 471

主流算力卡性能对比分析

超大规模AI训练/HPC:优先选择NVIDIA H100或AMD MI300X,需关注显存带宽和多卡互联能力。企业级AI训练:NVIDIA A100性价比更高,生态成熟。国内自主可控需求:华为昇腾910B是首选,支持液冷和低功耗设计。本地AI推理/游戏:NVIDIA RTX 4090或RTX 5090性价比突出,但需注意显存容量限制。边缘计算/低功耗场景:华为昇腾310或清微智能TX536(能效比6.3TOPS/W@INT8)更合适。

m0_69867914的博客 7799

android native 代码混淆,利用OLLVM混淆Android Native代碼篇一

Author: GeneBlue這里將會用兩篇文章解釋OLLVM混淆Android Native代碼的方法和原理。篇一主要聚焦NDK中OLLVM的編譯構建和主要混淆模式的使用,並簡要解釋各混淆模式的效果;篇二主要研究默認混淆模式的實現並嘗試編寫調試自定義Pass。0X01 OLLVM簡介OLLVM(Obfuscator-LLVM)是瑞士西北應用科技大學安全實驗室於2010年6月份發起的一個項目,該...

weixin_31977649的博客 886

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

552

安卓项目混淆详解

一、Proguard是一个非常高效和方便的混淆工具,使用了这个工具混淆打包后,apk体积显著的减少了,而且反编译难度也加大了。官网的介绍是:ProGuard是一个免费的Java类文件缩小,优化,混淆和预验证的工具。它检测和删除未使用的类,字段,方法和属性;优化字节码并删除未使用的指令;它使用短的无意义的名称重命名剩余的类,字段和方法。所得到的应用程序和库更小,更快,并且更好地针对逆向工程进行优化。而

奋斗的小菜鸡的博客 855

STM32F103C8T6与OV7670摄像头在TFT屏上的实时数字识别系统实现

本文详细介绍了基于STM32F103C8T6单片机和OV7670摄像头实现实时数字识别系统的全过程。系统通过图像采集、预处理、二值化和模板匹配算法,在TFT屏上实时显示识别结果,并针对资源受限的单片机环境提供了内存与性能优化策略,适用于智能家居、工业仪表读数等低成本嵌入式视觉应用场景。

open4的博客 278

基于Linux的PCIe设备驱动开发入门到精通-- 11.2 锁机制与并发控制 (自旋锁、互斥锁) 11.3 性能瓶颈分析与优化建议

本文探讨Linux驱动开发中的性能优化方法论,重点聚焦并发控制与性能瓶颈分析。从锁机制选择(自旋锁、互斥锁等)到工具使用(ftrace、perf),详细介绍了定位锁竞争和CPU热点的实战步骤,包括ftrace事件跟踪和perf火焰图分析。针对常见性能瓶颈(CPU/内存/I/O/锁竞争),提出了锁粒度优化、无锁结构替换、中断处理优化等解决方案。强调性能优化需要理论结合实践,通过"假设-测量-验证"的循环持续迭代。为开发者提供了一套从问题定位到解决的完整方法论,助力开发高性能工业级驱动。

MHD0815的博客 127

Android项目打包混淆问题

android 项目打包以及混淆步骤,注意事项一 打包签名在android studio插件栏中找到build,展开后找到下图中黄色图标点击之后弹出一个窗口绿色部分是你的证书直接导进来就行,橙色部分是证书密码,白色部分是你的Alias签名,搞定后Next输入你自己设置的as密码,到这里打包配置基本可以了。配置后在build.gradle中可以看到你的配置信息,下图:二 代码混淆代码混淆是个很容易出

Jack_hkh的博客 2817

Dify智能体开发:大语言模型(LLM)问题分类

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

王国平的博客 2249

android 哪些代码不用混淆,AndroidStudio中代码混淆以及打包操作

摸索了两天,大概了解了在AndroidStudio中代码混淆和打包发布的过程,在此记录下。代码混淆:关于代码混淆的作用,就不多解释了,整个过程大致如下:在app下的build.gradle文件中添加如下代码(minifyEnabled 表示是否混淆,默认是false,这里要记得设置成true): 其中proguard-android.txt文件是本地sdk/tools/proguard文件夹下的...

weixin_32098191的博客 1076

Windows部署OpenClaw报错不断?这篇环境配置指南帮你解决难题

想在Windows上部署OpenClaw却频频报错?🔧 本文详细梳理了OpenClaw部署必需环境的安装步骤和官方下载地址 📦,提供完整的验证清单和常见问题排查方法,帮你一次性搞定所有环境配置,顺利部署OpenClaw ✅

XiaoqiangClub的博客 6632

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android指定只对部分代码混淆,AndroidStudio打包.jar文件并混淆部分代码

应客户需求,将App中的某个模块功能做成SDK供其使用注:以下代码为:2018.7.28修改(之前自己写的那个编译不过),修改后基本都是复制而来,,经实践验证,所以更新来我之前的方法需求分析:1、介于该模块没有UI页面,所以将其打包成.jar文件;2、若需要UI界面,可使用.arr文件;3、若包含有.so文件引用,可以使用.arr,也可以打包.jar另附.so 文件开始一、注意打包.jar文件时引...

weixin_28738397的博客 1110

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

安卓代码打包混淆和打包SDK中jar混淆

安卓代码打包混淆和打包SDK中jar混淆不喜欢说废话,这篇博客其实是两个内容: - 安卓打包混淆 - 项目打包SDK时jar混淆1、安卓打包混淆先把一些基本的语法贴上,具体的使用,我会在对应的语句后备注,直接粘贴的朋友请注意 Markdown -optimizationpasses 5

weileek 2199

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android 打包 + 代码混淆

一:打包生成一个 Apk            生成一个 Apk 是比较简单的,直接使用 Android Stuido 的打包工具就可以快速的生成一个 Apk 文件,在这里多插一句题外话吧,嘿嘿,就是关于使用多渠道打包和一套代码打出不同的 Apk 文件         先来说一下一套代码生成不同的的 apk 吧,简称 构建变体,在 module 下的 builde 中添加你想要构建的变体信息...

SophieBryant的博客 566

Android studio 代码混淆及打包apk

Android Studio相关博客: Android Studio(一):介绍、安装、配置 Android Studio(二):快捷键设置、插件安装 Android Studio(三):设置Android Studio编码 Android Studio(四):Android Studio集成Genymotion Android Studio(五):修改Andro

wf_fln的博客 2325

Android Studio(十一):代码混淆及打包apk

图文讲解如何进行代码混淆的配置,以及如何使用Adroid Studio打包apk文件

无缘公子 2万+

java混淆编译成jar_Android Studio 打包成jar文件并混淆代码

参考博文:http://www.jianshu.com/p/0a3ce6e9ab85开展项目合作时,基于模块化思想,对方要用到你的程序,而你又不想将源代码给对方,通常会将程序进行打包生成jar,并作混淆处理。1、创建项目【File】——【New Module】——【Android Library】,命名,然后编辑代码。 二、编辑library路径下的build.gradleAS中进行代码混淆需要在...

weixin_32484541的博客 539

android代码混淆aar_android打包aar、发布签名包、混淆

1、打包aar的工程①AndroidManifest.xml中不能有 ,如果有这个的话,在别的项目引用这个aar包之后,手机上会有两个图标②build.gradle中不能有apply plugin: 'com.android.application',需要改为apply plugin: 'com.android.library' android打包aar步骤.png arr包路径....

weixin_39913472的博客 1312

android代码签名和混淆打包

关于android代码的签名和代码的混淆打包的完整流程,以及说明签名打包中代码混淆的重要性。

look to the master, follow the master, 2015

Android中代码混淆和打包

任何一个商业化的App发布都需要经历代码混淆和打包这两个步骤,混淆是因为当前有些工具比如apktool,dextojar等是可以对android安装包进行反编译,获得源码的。为了减少被别人破解,导致源码泄露等问题,我们需要对代码进行混淆,然后通过打包发布App项目。

梦溪幻翔的博客 1162

安卓 代码混淆与打包

代码混淆部分 gradle的配置 minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' proguard-rules.pro混淆配置 1 2 3 4 5 6

君无意的博客 771

使用Android Studio手把手教你将应用打包+代码混淆

最近几天用Google的Design库写了个App,使用Android Studio将app打包时遇到的几个瓶颈,所以把详细步骤写入下来。AS中怎么获取应用签名这和eclipse不同,eclipse中可以直接在软件内部查找到,而AS则需要通过命令行形式拿到,具体先进入.android目录下,如图: AS将应用打包AS版本1.3,步骤都以截图为示例: AS中Build->选择Generate sig

【博客地址迁移到】:https://zhengxiaoyong.com 4121
上一篇: [已解决] Android Studio 混淆配置后 应该输出的mapping 文件 seed 文件 unused 文件以及dump 文件都找不到
下一篇: Android 混淆打包之类名指定
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值