Android studio 打包混淆

1.app文件夹下这个Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件

apply plugin: ‘com.android.application’

android {
compileSdkVersion 23
buildToolsVersion ‘23.0.1’

defaultConfig {
    applicationId "com.smm"
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 0
    versionName "0.8"
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

// repositories {
// flatDir {
// dirs ‘libs’
// }
// }
productFlavors {
huawei {}
xiaomi {}
_360 {}
baidu {}
tecent {}
wandoujia {}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
}

dependencies {
compile fileTree(include: [‘*.jar’], dir: ‘libs’)
testCompile ‘junit:junit:4.12’
compile files(‘libs/gson-2.4.jar’)
compile ‘com.zhy:percent-support-extends:1.0.1’
compile ‘com.android.support:appcompat-v7:23.1.1’
compile ‘com.android.support:design:23.1.1’
compile ‘org.litepal.android:core:1.3.1’
compile ‘com.mcxiaoke.volley:library:1.0.19’
compile ‘com.google.android.gms:play-services-appindexing:8.1.0’
compile ‘org.apache.httpcomponents:httpcore:4.4.2’
// compile(name:’socialsharelibrary’, ext:’aar’)
compile project(‘:socialsharelibrary’)
文件开头apply plugin是最新gradle版本的写法,以前的写法是apply plugin: ‘android’, 如果还是以前的写法,请改正过来。

buildToolsVersion这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager 去下载对应版本。

applicationId代表应用的包名,也是最新的写法,这里就不在多说了。

android 5.0开始默认安装jdk1.7才能编译
minifyEnabled(混淆)也是最新的语法,很早之前是runProguard,这个也需要更新下。

proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 /tools/proguard/proguard-android.txt , 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt , 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro , 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则,后面会具体讲到。
compile project(‘:extras:ShimmerAndroid’)这一行是因为项目中存在其他Module,你可以理解成Android Library,由于Gradle的普及以及远程仓库的完善,这种依赖渐渐的会变得非常不常见,但是你需要知道有这种依赖的。

3.gradle目录下有个 wrapper 文件夹,里面可以看到有两个文件,我们主要看下 gradle-wrapper.properties 这个文件的内容:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip

可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本,这些默认的路径我们一般不会更改的,这个文件里指明的gradle版本不对也是很多导包不成功的原因之一

4.settings.gradle

这个文件是全局的项目配置文件,里面主要声明一些需要加入gradle的module

include ‘:recorder’
文件中recorder是项目的module,如果还有其他module按照相同的格式加上去。

代码混淆
下面是常见的的proguard-rules.pro配置项:

指定代码的压缩级别

-optimizationpasses 5

包明不混合大小写

-dontusemixedcaseclassnames

不去忽略非公共的库类

-dontskipnonpubliclibraryclasses

#优化 不优化输入的类文件
-dontoptimize

#预校验
-dontpreverify

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

# 混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/,!class/merging/

保护注解

-keepattributes Annotation

-obfuscationdictionary dictionary.txt

保持哪些类不被混淆

-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

#忽略警告
-ignorewarning

记录生成的日志数据,gradle build时在本项目根目录输出

apk 包内所有 class 的内部结构

-dump class_files.txt

未混淆的类和成员

-printseeds seeds.txt

列出从 apk 中删除的代码

-printusage unused.txt

混淆前后的映射

-printmapping mapping.txt

-dontwarn com.mcxiaoke.volley.jar.**
-dontwarn android.support.**
-dontwarn org.json.**
-dontwarn com.google.gson.**

————— BEGIN: volley ———-

-keepattributes Signature
-keepattributes Annotation
-keep class com.mcxiaoke.volley.* { ; }
-keep class com.mcxiaoke.volley.toolbox.* {;}
-keep class com.mcxiaoke.volley.Response ;keepclasscom.mcxiaoke.volley.Request * { *; }
-keep class com.mcxiaoke.volley.RequestQueue ;keepclasscom.mcxiaoke.volley.toolbox.HurlStack * { *; }
-keep class com.mcxiaoke.volley.toolbox.ImageLoader$* { *; }

-keep interface com.mcxiaoke.volley.* { ; }

-dontwarn com.mcxiaoke.volley.**

-dontwarn com.android.volley.jar.**

-keep class com.android.volley.*{;}

————— END: volley ———-

Application classes that will be serialized/deserialized over Gson

-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.* { ; }
-keep class com.google.gson.* {;}
-keep class org.json.* {;}
-keep class com.google.gson.examples.android.model.* { ; }
-keep class com.smm.model.* {;}

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

————— BEGIN: okio ———-

-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**

————— END: okio ——-

屏蔽log

-assumenosideeffects class com.apkfuns.logutils {
public static void v(java.lang.Object);
public static void i(java.lang.Object);
public static void d(java.lang.Object);
public static void w(java.lang.Object);
public static void e(java.lang.Object);
public static void wtf(java.lang.Object);
public static void json(java.lang.Object);
}

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

保持 native 方法不被混淆

-keepclasseswithmembernames class * {
native ;
}

保持自定义控件类不被混淆

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

保持自定义控件类不被混淆

-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 ;
!private ;
!private ;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

model不混淆

-keepclassmembers class com.smm.model.**{
*;
}

-dontwarn android.support.**

混淆Glide

-keep public class * implements com.bumptech.glide.module.GlideModule

-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {

**[] $VALUES;

public *;

}

##########支付宝

-libraryjars libs/alipaySDK.jar

-keep class com.alipay.android.app.IAlixPay{*;}

-keep class com.alipay.android.app.IAlixPay$Stub{*;}

-keep class com.alipay.android.app.IRemoteServiceCallback{*;}

-keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}

-keep class com.alipay.sdk.app.PayTask{ public *;}

-keep class com.alipay.sdk.app.AuthTask{ public *;}

umeng混淆

-dontwarn com.google.android.maps.**
-dontwarn android.webkit.WebView
-dontwarn com.umeng.**
-dontwarn com.tencent.weibo.sdk.**
-keep class com.umeng.* { ; }
-keep class com.umeng.analytics.* { ; }
-keep class com.umeng.common.* { ; }
-keep class com.umeng.newxp.* { ; }

-keep class com.baidu.* { ; }
-keep class vi.com.gdi.bgl.android.*{;}

-keepattributes Exceptions,InnerClasses,Signature
-keepattributes Annotation
-keepattributes SourceFile,LineNumberTable

-keep public interface com.tencent.**
-keep public interface com.umeng.socialize.**
-keep public interface com.umeng.socialize.sensor.**
-keep public interface com.umeng.scrshot.**

-keep public class com.umeng.socialize.* {*;}
-keep public class javax.**
-keep public class android.webkit.**

-keep class com.umeng.scrshot.**
-keep public class com.tencent.* {;}
-keep class com.umeng.socialize.sensor.**

-keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}

-keep class com.tencent.mm.sdk.modelmsg.* implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {;}

-keep class im.yixin.sdk.api.YXMessage {*;}

-keep class im.yixin.sdk.api.* implements im.yixin.sdk.api.YXMessage$YXMessageData{;}

-keep public class [your_pkg].R$*{
public static final int *;
}

litepal混淆

-dontwarn org.litepal.*
-keep class org.litepal.* { ; }
-keep enum org.litepal.**
-keep interface org.litepal.* { ; }
-keep public class * extends org.litepal.**
-keepattributes Annotation
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

-keepclassmembers class * extends org.litepal.crud.DataSupport{
private * ;
}
#

-keep public class com.tencent.bugly.*{;}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
google play service最新版本,基于firebase的sdk,9.2.0.包含了 全部需要的jar,另外还有aar版本 play-services-ads-9.2.0.jar play-services-analytics-9.2.0.jar play-services-analytics-impl-9.2.0.jar play-services-appindexing-9.2.0.jar play-services-appinvite-9.2.0.jar play-services-appstate-8.4.0.jar play-services-auth-9.2.0.jar play-services-auth-base-9.2.0.jar play-services-base-9.2.0.jar play-services-basement-9.2.0.jar play-services-cast-9.2.0.jar play-services-cast-framework-9.2.0.jar play-services-clearcut-9.2.0.jar play-services-contextmanager-9.2.0.jar play-services-drive-9.2.0.jar play-services-fitness-9.2.0.jar play-services-games-9.2.0.jar play-services-gass-9.2.0.jar play-services-gcm-9.2.0.jar play-services-identity-9.2.0.jar play-services-iid-9.2.0.jar play-services-location-9.2.0.jar play-services-maps-9.2.0.jar play-services-measurement-8.4.0.jar play-services-nearby-9.2.0.jar play-services-panorama-9.2.0.jar play-services-places-9.2.0.jar play-services-plus-9.2.0.jar play-services-safetynet-9.2.0.jar play-services-tagmanager-9.2.0.jar play-services-tagmanager-api-9.2.0.jar play-services-tasks-9.2.0.jar play-services-vision-9.2.0.jar play-services-wallet-9.2.0.jar play-services-wearable-9.2.0.jar play-services-ads-lite-9.2.0.jar firebase-analytics-9.2.0.jar firebase-analytics-impl-9.2.0.jar firebase-auth-9.2.0.jar firebase-auth-common-9.2.0.jar firebase-auth-module-9.2.0.jar firebase-common-9.2.0.jar firebase-config-9.2.0.jar firebase-crash-9.2.0.jar firebase-database-9.2.0.jar firebase-database-connection-9.2.0.jar firebase-iid-9.2.0.jar firebase-messaging-9.2.0.jar firebase-storage-9.2.0.jar firebase-storage-common-9.2.0.jar
Android Studio中进行打包混淆时,可能会遇到包冲突的报错。这种情况下,需要解决包冲突问题。 首先,查看报错信息中提到的包冲突详情。在你提供的引用中,报错信息中提到了冲突的包路径为"android/support/design/widget/CoordinatorLayout$LayoutParams.class"。 解决包冲突的方法有多种,以下是一种解决方法: 1. 打开项目中的build.gradle文件。 2. 在buildTypes中找到release配置,并将minifyEnabled属性设置为true,表示开启代码混淆。 3. 在proguardFiles中添加proguard-rules.pro文件,该文件用于指定混淆规则。 4. 在proguard-rules.pro文件中添加以下规则,以保持特定的类和接口不被混淆: -keep class okhttp3.** { *; } -keep interface okhttp3.** { *; } -dontwarn okhttp3.** -keep class okio.** { *; } -keep interface okio.** { *; } -dontwarn okio.** -keep class com.hitomi.** { *; } -keep interface com.hitomi.** { *; } -dontwarn com.hitomi.** 5. 重新编译并打包你的应用程序,这次应该不再出现包冲突的报错。 请注意,这只是一种解决包冲突问题的方法之一。在实际操作中,可能需要根据具体情况进行调整和修改。 参考引用: - http://blog.csdn.net/u012246458/article/details/79446784 - build.gradle文件中的代码 - proguard-rules.pro文件中的代码<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [AndroidStudio打包混淆](https://blog.csdn.net/qq_24570087/article/details/80620546)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值