Android IDE使用及工程管理

创建时间:2018/3/1 21:44:01
关键字:Android Studio 、kotlin、Multidex、minifyEnabled 、CrashHandler

1 IDE

1.1 Android Studio

1.2 Gradle

1.3 Maven

 

2 工程管理

2.1 kotlin配置

2.1.1 在Project的build.gradle中配置kotlin:

buildscript {

    ext.kotlin_version = '1.1.2-4'

    repositories {

        maven { url 'https://maven.google.com' }

        jcenter()

    }

    dependencies {

        classpath 'com.android.tools.build:gradle:2.3+'

        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

    }

}

2.1.2在app的build.gradle里

apply plugin: 'kotlin-android'

android {

// 解决使用kotlin时打包报错:This class should be public [Instantiatable]
lintOptions {
    abortOnError false
    disable "Instantiatable"
    disable 'MissingTranslation'
}

}

dependencies {

    compile fileTree(include: ['*.jar'], dir: 'libs')

    // others ...

    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

}

2.1.3 module的build.gradle

用到或引用kotlin类的模块gradle文件添加以下项,解决java中引用kotlin类找不到的问题。

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

 

2.2 Multidex配置和使用

android5.0之前,一个android应用中只含有一个dex文件,这个dex的方法数量被限制在65535之内,这就是著名的"64K(641024)"*事件,使用 MultiDex分包方法解决这个问题。

2.2.1 app build.gradle配置

android {

 defaultConfig {

          applicationId "com.xxxx.client"

          minSdkVersion 21

          // others ......

          multiDexEnabled true

}

}

......

dependencies {

   compile 'com.android.support:multidex:1.0.1'

}

 

2.2.2 让应用的Application继承MultiDexApplication

public class MyApplication extends MultiDexApplication {//...}

AndroidManifest.xml中的application指定自定义的这个类

 <application

        android:name=".MyApplication"

.... />

 

2.2.3 使用配置文件,让一些文件留在MainDex中

创建multiDexKeep.pro和multiDexKeep.txt文件,放在项目的app文件夹下

修改build.gradle的配置为如下

multiDexEnabled true

multiDexKeepProguard file('multiDexKeep.pro') // keep specific classes using proguard syntax

multiDexKeepFile file('multiDexKeep.txt') // keep specific classes

 

配置multiDexKeep.pro文件,语法和proguard-rules.pro一样,作用也是混淆相关

-keepclassmembers class com.xxx.control.webview { public *; }

配置multiDexKeep.txt文件,指定类即可,这个是保留在MainDex里的类

com.xxx.xx.xxxxxxx.class 

com.xxx.xx.xxx.class 

 

2.3 配置混淆打包

2.3.1 签名配置

签名文件创建过程略,app的build.gradle配置如下

android {

//签名

    signingConfigs {

        config {

            storeFile file('D:/.../客户端/KeyStore/myapp.jks') //签名文件

            storePassword 'mypass' //签名文件密码

            keyAlias 'klapp' //签名别名

            keyPassword 'aliaspass' //签名密码

        }

}

//...

}

2.3.1 混淆配置

1. 在项目的build.gradle文件中配置如下代码

android {

    buildTypes {

        debug {

      // ......

        }

        release {

            // ......

            minifyEnabled true //true混淆 ,false 不混淆

            //前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,后一个文件是自己的定义混淆文件

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }

    }

1. 在app文件夹下的proguard-rules.pro中进行混淆配置,如(可在网上搜索通用的,然后加上项目中自定义的类需要中混淆中排除的):

#保护注解

-keepattributes *Annotation*

 

# 保持哪些类不被混淆 必须keep四大组件类名 否则在manifest中找不到注册号的类

-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.message.BroadcastReceiver

-keep public class * extends android.message.ContentProvider

-keep public class * extends android.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

 

#自定义模块中含有反射的部分       

-keep public class com.xxx.control.WebAppActivity {*;}

-keep public class * extends com.xxx.bean.BaseObject {*;}

 

2.4 异常捕获及日志记录

app的build.gradle文件中配置

dependencies {

compile 'com.tuzhenlei:crashhandler:1.0.1'//禁止程序崩溃后,程序自动重启反复崩溃

}

 

在Application文件中初始化捕获异常日志的类

public class MyApplication extends MultiDexApplication {

public MyApplication () {

        super();

        CrashHandler.getInstance().init(this, BuildConfig.DEBUG);//第二个参数指定是否写错误日志到本地文件:true 写日志, false 不写日志

    }

}