项目笔记1

来源:互联网 发布:人工智能危机不会发生 编辑:程序博客网 时间:2024/05/17 23:40
项目笔记:
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);
原创粉丝点击