项目笔记:
1、用于获取安装到手机的第三方应用签名的签名生成工具下载地址:
微信开放平台-->资源中心-->Android资源下载-->最下面的签名生成工具
2、Android studio获取应用的SHA1和MD5的命令行方式:
进入到Java的jdk的bin目录下,打开DOS窗口,输入以下命令执行:
keytool -list -v -keystore C:\Users\Administrator\Desktop\APK\dbykeystore\dby.keystore(keystore文件所在路径)
输入密钥口令回车就可找到MD5和SHA1信息
3、命令行生成keystore文件
进入到Java的jdk的bin目录下,打开DOS窗口,输入以下命令执行:
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
4、Error:Execution failed for task ':duobaoyou:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
貌似很多人将Android Studio2.3的项目导入到Android Studio3.0上时都遇到这个错误,而且大家解决的方式都不一样,我就说说我自己的解决办法:
删除主module的libs目录下引用的support-v7的jar包,运行,发现有没有这个jar包都不影响
后来查看了一下引入的工程的libs目录下有support-v4的jar包,可以支持主module的使用,运行程序发现还是有上面的错误,
于是删除所有引入的工程的libs文件夹下的support-v4的jar包,发现报错,然后我在每个引入工程的build.gradle文件里面引入
compile 'com.android.support:support-v4:21.0.0'(每个引入项目的support-v4的版本号可以不一致)
然后运行程序,愉快发现错误解决了。
然而我再导入一个一模一样的没有删除任何jar包的项目运行,尴尬的发现,不报任何错误就运行成功了,
我只能自我安慰的想着可能是开始的第一个项目会有这种检查机制,检查的比较严格。不管怎么样,没有问题就是好事啦。
5、SQLScout使用必要条件:
项目的build.gradle文件里面引入
allprojects{repositories{jcenter() maven{url 'http://www.idescout.com/maven/repo/'}}}
module的build.gradle文件里面引入
compile 'com.idescout.sql:sqlscout-server:2.0'
6、Android Studio2.3升级到Android Studio3.0后搜狗中文输入法输入的时候卡顿或者不显示问题解决:
将Android Studio3.0安装目录下的jre文件夹替换为Android Studio2.3安装目录下的jre文件夹
一般jre文件夹的路径为:C:\Program Files\Android\Android Studio
7、Android Studio2.3升级到Android Studio3.3后,原来module的build.gradle文件里面设置编译输出apk名称的代码出错
出错代码:
applicationVariants.all{variant->
variant.outputs.each{output->
def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith(".apk")){
def fileName = outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")
output.outputFile = new File(outputFile.parent,fileName)
}
}
}
最后一句报错: Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=xiaomiDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl
解决办法:
applicationVariants.all{variant->
variant.outputs.all{output->
def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith(".apk")){
def fileName = outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")
outputFileName = fileName
}
}
}
8、Android Studio2.3升级到Android Studio3.3后,多渠道打包编译出错
出错代码:
productFlavors{
wandoujia{
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
}
yingyongbao{
}
huawei{
}
}
productFlavors.all{flavor->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
问题:Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
解决办法:
flavorDimensions "default"
productFlavors{
wandoujia{
dimension "default"
}
xiaomi{
dimension "default"
}
yingyongbao{
dimension "default"
}
huawei{
dimension "default"
}
}
productFlavors.all{flavor->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
9、Android混淆:(Android Studio3)
一般AS自带的混淆是在module的build.gradle文件里面加入:
buildTypes{
release{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
我的项目是从Eclipse移植过来的,所以配置混淆规则的文件是proguard-project.txt
所以我改了一下
buildTypes{
release{
minifyEnabled true
proguardFIles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'
}
}
proguard-android.txt文件的目录为:C:\Users\Administrator\AppData\Local\Android\sdk\tools\proguard
proguard-rules.pro是AS专属的混淆规则配置文件,其配置规则与proguard-project.txt配置规则一样的
project.properties文件里面开启配置:proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
10、xUtils网络请求框架提示无法访问HttpRequestBase,
找不到org.apache.http.client.methods.HttpRequestBase
我的项目解决办法是:
把import com.lidroid.xutils.http.client.HttpRequest
换成import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
把HttpRequest.HttpMethod.POST换成HttpMethod.POST即可
11、混淆打包编译出错:Warning:com.tencent.smtt.utils.j: can't find referenced method 'int checkSelfPermission(java.lang.String)' in library class android.content.Context
原因:checkSelfPermission是android6.0的方法,需要设置本地编译环境为23才能编译通过
办法:在module的build.gradle文件里面改成compileSdkVersion 23即可
12、混淆打包编译出错:Warning:com.viewpagerindicator.LinePageIndicator: can't find referenced method 'float ceil(float)' in library class android.util.FloatMath
我目前的解决办法:将com.viewpagerindicator.LinePageIndicator类里面的return (int)FloatMath.ceil(result);改成return (int)Math.ceil(result);
1、用于获取安装到手机的第三方应用签名的签名生成工具下载地址:
微信开放平台-->资源中心-->Android资源下载-->最下面的签名生成工具
2、Android studio获取应用的SHA1和MD5的命令行方式:
进入到Java的jdk的bin目录下,打开DOS窗口,输入以下命令执行:
keytool -list -v -keystore C:\Users\Administrator\Desktop\APK\dbykeystore\dby.keystore(keystore文件所在路径)
输入密钥口令回车就可找到MD5和SHA1信息
3、命令行生成keystore文件
进入到Java的jdk的bin目录下,打开DOS窗口,输入以下命令执行:
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
4、Error:Execution failed for task ':duobaoyou:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex
貌似很多人将Android Studio2.3的项目导入到Android Studio3.0上时都遇到这个错误,而且大家解决的方式都不一样,我就说说我自己的解决办法:
删除主module的libs目录下引用的support-v7的jar包,运行,发现有没有这个jar包都不影响
后来查看了一下引入的工程的libs目录下有support-v4的jar包,可以支持主module的使用,运行程序发现还是有上面的错误,
于是删除所有引入的工程的libs文件夹下的support-v4的jar包,发现报错,然后我在每个引入工程的build.gradle文件里面引入
compile 'com.android.support:support-v4:21.0.0'(每个引入项目的support-v4的版本号可以不一致)
然后运行程序,愉快发现错误解决了。
然而我再导入一个一模一样的没有删除任何jar包的项目运行,尴尬的发现,不报任何错误就运行成功了,
我只能自我安慰的想着可能是开始的第一个项目会有这种检查机制,检查的比较严格。不管怎么样,没有问题就是好事啦。
5、SQLScout使用必要条件:
项目的build.gradle文件里面引入
allprojects{repositories{jcenter() maven{url 'http://www.idescout.com/maven/repo/'}}}
module的build.gradle文件里面引入
compile 'com.idescout.sql:sqlscout-server:2.0'
6、Android Studio2.3升级到Android Studio3.0后搜狗中文输入法输入的时候卡顿或者不显示问题解决:
将Android Studio3.0安装目录下的jre文件夹替换为Android Studio2.3安装目录下的jre文件夹
一般jre文件夹的路径为:C:\Program Files\Android\Android Studio
7、Android Studio2.3升级到Android Studio3.3后,原来module的build.gradle文件里面设置编译输出apk名称的代码出错
出错代码:
applicationVariants.all{variant->
variant.outputs.each{output->
def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith(".apk")){
def fileName = outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")
output.outputFile = new File(outputFile.parent,fileName)
}
}
}
最后一句报错: Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkData=Main{type=MAIN, fullName=xiaomiDebug, filters=[]}} of type com.android.build.gradle.internal.api.ApkVariantOutputImpl
解决办法:
applicationVariants.all{variant->
variant.outputs.all{output->
def outputFile = output.outputFile
if(outputFile != null && outputFile.name.endsWith(".apk")){
def fileName = outputFile.name.replace(".apk","-${defaultConfig.versionName}.apk")
outputFileName = fileName
}
}
}
8、Android Studio2.3升级到Android Studio3.3后,多渠道打包编译出错
出错代码:
productFlavors{
wandoujia{
// manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
}
xiaomi{
}
yingyongbao{
}
huawei{
}
}
productFlavors.all{flavor->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
问题:Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html
解决办法:
flavorDimensions "default"
productFlavors{
wandoujia{
dimension "default"
}
xiaomi{
dimension "default"
}
yingyongbao{
dimension "default"
}
huawei{
dimension "default"
}
}
productFlavors.all{flavor->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
9、Android混淆:(Android Studio3)
一般AS自带的混淆是在module的build.gradle文件里面加入:
buildTypes{
release{
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
我的项目是从Eclipse移植过来的,所以配置混淆规则的文件是proguard-project.txt
所以我改了一下
buildTypes{
release{
minifyEnabled true
proguardFIles getDefaultProguardFile('proguard-android.txt'),'proguard-project.txt'
}
}
proguard-android.txt文件的目录为:C:\Users\Administrator\AppData\Local\Android\sdk\tools\proguard
proguard-rules.pro是AS专属的混淆规则配置文件,其配置规则与proguard-project.txt配置规则一样的
project.properties文件里面开启配置:proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
10、xUtils网络请求框架提示无法访问HttpRequestBase,
找不到org.apache.http.client.methods.HttpRequestBase
我的项目解决办法是:
把import com.lidroid.xutils.http.client.HttpRequest
换成import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
把HttpRequest.HttpMethod.POST换成HttpMethod.POST即可
11、混淆打包编译出错:Warning:com.tencent.smtt.utils.j: can't find referenced method 'int checkSelfPermission(java.lang.String)' in library class android.content.Context
原因:checkSelfPermission是android6.0的方法,需要设置本地编译环境为23才能编译通过
办法:在module的build.gradle文件里面改成compileSdkVersion 23即可
12、混淆打包编译出错:Warning:com.viewpagerindicator.LinePageIndicator: can't find referenced method 'float ceil(float)' in library class android.util.FloatMath
我目前的解决办法:将com.viewpagerindicator.LinePageIndicator类里面的return (int)FloatMath.ceil(result);改成return (int)Math.ceil(result);