配置log开关
主要通过BuildConfig文件来处理,该文件是系统打包后生成的文件:如下
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String LIBRARY_PACKAGE_NAME = "cn.xxxx.xxxx";
/**
* @deprecated APPLICATION_ID is misleading in libraries. For the library package name use LIBRARY_PACKAGE_NAME
*/
@Deprecated
public static final String APPLICATION_ID = "cn.droidlover.xdroidmvp";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0.0";
}
如上我们可以使用DEBUG字段,当然如果你也可以自己配置.
在app下的目录中配置:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
buildConfigField("boolean", "LOG_DEBUG", "false")
}
debug {
buildConfigField("boolean", "LOG_DEBUG", "true")
}
}
然后这个LOG_DEBUG字段就可以使用了,如下BuildConfig.LOG_DEBUG.
配置签名文件
android studio 版本 3.5.2
- 我是配置一下正式版本的签名
file->project structure -> build variants->app->build Types
配置一下签名,然后就会在你的app下的build.gradle就会生成对应的配置,代码如下:
release { //生成release apk
zipAlignEnabled true //4字节对齐,减少运行内存消耗
minifyEnabled true //false = 关闭混淆
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug { //生成debug apk
zipAlignEnabled true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
然后可以把密码也配置在build.gradle中,代码如下:
signingConfigs {
release {
storeFile file('../my_release.jks')
storePassword STORE_PASSWORD
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
}
debug {
storeFile file('../my_debug.jks')
storePassword STORE_PASSWORD
keyAlias KEY_ALIAS
keyPassword KEY_PASSWORD
}
}
这些属性配置在gradle.properties中,如下:
STORE_PASSWORD = 123456
KEY_PASSWORD = 123456
KEY_ALIAS = mykey
DEBUG_STORE_PASSWORD = 123456
DEBUG_KEY_PASSWORD = 123456
DEBUG_KEY_ALIAS = mykey
build.gradle 中配置生成的的apk的文件名
首先计划生成文件的名字组成由 debug or release +版本号+时间组成
- 首先我们需要一个生成时间的方法,这里涉及到groory语法.网上找一找就行了.代码如下:
def static releaseTime(){
return new Date().format("yyyy-MM-dd HH:mm:ss,TimeZone.getTimeZone("UTC"))
}
android{
}
然后是在下面配置一下输出的文件名字,代码如下:
android{
applicationVariants.all {variant ->
variant.outputs.all {output ->
if (variant.buildType.name == "debug") {
output.outputFileName = "Remote${android.defaultConfig.versionName}_${releaseTime()}_debug_nosign.apk"
} else if (variant.buildType.name == "release") {
output.outputFileName = "Remote${android.defaultConfig.versionName}_${releaseTime()}_release_nosign.apk"
}
}
}
}
上面有一个比较重要的问题,如果你发现你打包或者运行出现问题的话,请作如下操作:
请把上面文件名输出的地方改成一个常数值,就是去掉时间戳的部分.,这里我也没太懂,有的时候有影响,有的时候没有.
配置一下内存泄露的监控必备LeakCanary
- 添加引用:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'
2.在application中初始化一下:
if (LeakCanary.isInAnalyzerProcess(this)) {
//此过程专用于LeakCanary进行堆分析。在此过程中不应初始化应用程序。
return;
}
LeakCanary.install(this);
配置一下so的平台
我们只需要在build.gradle中进行配置就可以了,如下:
defaultConfig{
ndk {
abiFilters 'armeabi', 'armeabi-v7a','x86', 'x86_64'
}
}
上面基本是全平台了,但是如果都选上,APP的包可能会比较大,所以可以根据需求选择.
- 手机上基本都是arme的
- 模拟器都是x86的了(早些年的win手机也是,那会win手机的速度真的是流畅,可惜了)
- 电视的架构现在基本上也是arme的天下了.
- 总结::所以没特殊的就只支持arme应该可以了
兼容性如下:
- armeabi-v7a :armeabi-v7a向下兼容 armeabi
- arm64-v8a : 能兼容 armeabi-v7a 和 armeabi
- x86_64 : 兼容 x86
- mips64 : 兼容 mips
结论
感觉选armeabi 和armeabi-v7a 或者一个armeabi-v7a