主要通过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
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
首先计划生成文件的名字组成由 debug or release +版本号+时间组成
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"
}
}
}
}
上面有一个比较重要的问题,如果你发现你打包或者运行出现问题的话,请作如下操作:
请把上面文件名输出的地方改成一个常数值,就是去掉时间戳的部分.,这里我也没太懂,有的时候有影响,有的时候没有.
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);
我们只需要在build.gradle中进行配置就可以了,如下:
defaultConfig{
ndk {
abiFilters 'armeabi', 'armeabi-v7a','x86', 'x86_64'
}
}
上面基本是全平台了,但是如果都选上,APP的包可能会比较大,所以可以根据需求选择.
兼容性如下:
感觉选armeabi 和armeabi-v7a 或者一个armeabi-v7a