Android IDE使用及工程管理
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 不写日志
}
}