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
-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
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-dontwarn com.mcxiaoke.volley.jar.**
-dontwarn android.support.**
-dontwarn org.json.**
-dontwarn com.google.gson.**
-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 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.*{;}
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-dontwarn okio.**
-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*(…);
}
-keepclasseswithmembernames class * {
native ;
}
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keepnames class * implements java.io.Serializable
-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();
}
-keepclassmembers class com.smm.model.**{
*;
}
-dontwarn android.support.**
-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 public class [your_pkg].R$*{
public static final int *;
}
-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 * ;
}
#