android studio学习-补充

41、双击shift键进行查找

非常实用,可以找到文件,设置等,但是好像不能全局搜索文件内容,如果想要全局搜索文件内容,可以ctrl+h

42、让android studio显示黑色主题

进入Settings,搜索 Appearance ,选择主题 Theme:Darcula
替换完成后发现字体变的好小,需要设置Font(创建模板后可以直接选择就行)

编辑区: Settings -- Editor -- Colors & Fonts -- Font (需要保存一个新的模板才可以编辑) //这个时候就设置完了,terminal重开一个就好了
控制台: Settings -- Editor -- Colors & Fonts -- Console Font

控制台的背景颜色修改File -> Settings -> Editor -> Colors and Fonts -> Console Colors
Console > Background ,确定之后新建一个terminal就可以看到效果了

备注,不愿意一个个找,可以直接搜索Font就行,非常方便。也可以双击shift,搜索Font,不过这个范围大点,要选择好。
切换只有修改2个地方,一个是主题,一个是字体就可以了

43、可以在android studio的终端中输入 gradlew -v 查看当前的gradle的版本:

它是根据gradle-wrapper.properties文件中的配置来的
例如我的配置:
    #Mon Dec 28 10:00:20 PST 2015
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
    distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-all.zip

如果 C:\Users\gq.CHINA\.gradle\wrapper\dists 这个路径下没有这个版本,默认就会自动下载。
下载完成就可以查看到当前的gradle版本号:
    D:\workspace_android_studio\WiFi_Auto_Connect>gradlew -v

     ------------------------------------------------------------
    Gradle 3.4.1
    ------------------------------------------------------------

    Build time:   2017-03-03 19:45:41 UTC
    Revision:     9eb76efdd3d034dc506c719dac2955efb5ff9a93

    Groovy:       2.4.7
    Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
    JVM:          1.7.0_51 (Oracle Corporation 24.51-b03)
    OS:           Windows 7 6.1 x86

    D:\workspace_android_studio\WiFi_Auto_Connect>

备注:如果我们想下载某个版本的gradle也可以采用这种方式。

44、导入github下载的工程出现错误

Cause: org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection
Possible causes for this unexpected error include:
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

网上找到类似的问题,说是库下载不完整导致,替换对应版本的zip文件就行
例如:C:\Users\gq.CHINA\.gradle\wrapper\dists\gradle-3.4.1-all\c3ib5obfnqr0no9szq6qc17do下的gradle-3.4.1-all.zip

我的解决方法:
在工程下的build.gradle文件中
    把gradle插件的版本替换为已有的版本
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
我查看了下插件的版本C:\Program Files\Android\Android Studio\gradle\m2repository\com\android\tools\build\gradle
有【1.5.0、2.1.3、2.2.2、2.2.3】
把2.1.0替换为2.2.3,再Sync Now就可以了。试了下替换2.2.2也行。

45、继上面这个问题之后又出现类似的问题,用上面的方法解决不了。

Error:Unable to load class 'org.gradle.api.internal.component.Usage'.
causes for this unexpected error include:
Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

试了删除gradle版本,重新下载,问题还在
点击上面的Re-download也解决不了
关闭所有的java进程,重启IDE也不行
替换gradle插件的版本classpath 'com.android.tools.build:gradle:2.2.3' 也不行

后面在网上查资料发现是有个gradle插件兼容的问题
在工程目录下 lib--build.gradle,文件里面有段:
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.novoda:bintray-release:0.4.0'
        }
    }
网上说0.4.0版本不兼容(我的gradle插件版本设置的是2.2.3)。
解决方法:
将0.4.0版本替换为0.5.0,重新同步下,问题解决OK。

总结:目前发现的导入别人的工程出问题基本上都是gradle的配置的问题,主要是需要设置对应的版本,代码基本不用修改。
可以直接用替换的方法,替换当前工程的版本未自己本地已经安装的版本。(建议最好使用较新的版本)

46、在android studio的终端中输入 gradlew -v出现

错误: 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain 
原因:在项目的gradle--wrapper文件夹中没有gradle-wrapper.jar这个文件。
解决方法:在其他的项目中复制一个到这个目录,再输入命令就OK了

47、遇到一个运行app时的错误

gradle更新的时候没有问题,运行app的时候报错:
Error running app: This version of Android Studio is incompatible with the Gradle Plugin used. Try disabling Instant Run (or updating either the IDE or the Gradle plugin to the latest version

解决方法:
打开设置,搜索instant Run,默认前面三个是勾选的,取消掉就OK了。

48、查看一个引用dependencies的具体的文件路径:

例如,app下面的build.gradle
    dependencies {
        // 编译libs目录下的所有jar包
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.0.1'
        compile 'com.android.support:design:25.0.1'
        testCompile 'junit:junit:4.12'
    }
看junit:4.12这个jar包路径

在工程下的External Libraries -- 找到这个包,右击,点击Library Properties ...就可以看到

50、查看android studio,gradle的插件的版本

a.打开工程下的build.gradle文件
    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.2.3'

            // NOTE: Do not place your application dependencies here; they belong
            // in the individual module build.gradle files
        }
    }
    里面的2.2.3就是插件的版本号。
b.File -- Project Structrue ... -- Project -- Android Plugin Version
    修改了这个界面上的版本号,文件也会自动修改。

我们想要一个新的插件版本直接修改文件的版本号,同步下,就会自动下载。
下载的文件路径:
C:\Users\gq.CHINA\.gradle\caches\modules-2\files-2.1\com.android.tools.build\gradle\2.2.3
亲测OK(可以全盘搜索com.android.tools.build这个文件夹,看看里面都有什么版本,以后导入工程不用都使用新的版本,用已有的版本就可以)

备注:gradle的版本位置:C:\Users\gq.CHINA\.gradle\wrapper\dists(上面有更新的方法)

在导入一个网上的开源google项目(iosched-master),在gradle更新了很久,一直在下载,不断的下载一些依赖库,这些文件的位置也在
C:\Users\gq.CHINA\.gradle\caches\modules-2\files-2.1 这个目录下

51、android studio里面插件下载。

我们可以很方便的下载喜欢的插件
下载的方法:
Settings -- 搜索Plugins ,点击Browse Repositories ,里面可以下载到你喜欢的插件
    
完成后重启studio,查看插件下载的具体路径:
我的插件下载路径:    
C:\Users\gq.CHINA\.AndroidStudio2.2\config\plugins

如果需要查看android studio的log可以在
C:\Users\gq.CHINA\.AndroidStudio2.2\system\log\idea.log 这个里面查看


备注:我们可以通过C:\Program Files\Android\Android Studio\bin\idea.properties里面的配置看到插件plugins配置路径
    # idea.plugins.path=${idea.config.path}/plugins
指向了config目录的plugins目录

52、出现一个找不到google()方法的错误

Error:(7, 0) Could not find method google() for arguments [] on repository container of type org.gradle.api.internal.artifacts.dsl.DefaultRepositoryHandler.

解决方法:
升级gradle插件的版本
我从3.4.1 升级到4.1就OK了。

53、出现一个找不到android()方法的错误

Error:(25, 0) Could not find method android() for arguments [build_dmg4yi1uo8iiig3cqfo1dokye$_run_closure2@76311103] on root project 'MPAndroidChart-master' of type org.gradle.api.Project.
解决方法:
a.因为本身工程是有其他的模块的,和一般的工程不一样。(如果你直接在工程下界面配置android版本,默认就会生成这个android(),这不是个android工程所以会出错)
    注释掉这个android()内容
b.在文件的头部声明为android项目
    apply plugin: 'com.android.application'
    不过这样有个问题,后面会出现找不到AndroidManifest.xml。(不推荐)

54、出现一个找不到implement()方法的错误

Error:(61, 0) Could not find method implementation() for arguments [project ':MPChartLib'] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

新的android studio支持(3.0)
implementation 'com.android.support:appcompat-v7:25.0.1'

解决方法:
老版的需要这样设置:
compile 'com.android.support:appcompat-v7:25.0.1'

55、遇到一个错误 failed to find target with hash string ‘android-22’

这个最后检查是由于gradle工程里面配置了compileSdk的版本是22
修改为我们本地有的sdk就OK了
所以大部分的错误还是版本配错了

56、smart工程重构

git下载源码:
    a.在http://test.hw.com/login/settings/ssh-keys上使用域账号生成key。(按照上面提示操作即可)
    b.打开git bash,进入需要的保存的目录,下载源码(下载完成有580M左右)
        git clone ssh://[email protected]:29418/hw-ws/hiapp/android/smart -b hw/sz/mbb_home/platform/hiapp/master
        git clone http://[email protected]/hw-ws/hiapp/android/smart -b hw/sz/mbb_home/platform/hiapp/master

git clone http://[email protected]/CBG_Test_System_and_Tool_Dept/BETA_TBDTS_CHINA/tree/develop

android studio打开smart工程:
    a.打开工程,gradle配置未做修改,自动更新需要的依赖包。
    b.在执行的过程中遇到一个java heap内存不够的问题。
        问题描述:
            Error:Failed to complete Gradle execution.

            Cause:
            Java heap space
            project's gradle.properties file.
            For example, the following line, in the gradle.properties file, sets the maximum Java heap size to 1,024 MB:
            <em>org.gradle.jvmargs=-Xmx1024m</em>
        解决方法:
            修改工程根目录下的gradle.properties文件
                org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
            打开android studio的安装目录【C:\Program Files\Android\Android Studio\bin】,修改配置文件studio64.exe.vmoptions
                -Xms4096m
                -Xmx4096m
                -XX:MaxPermSize=4096m
                -XX:ReservedCodeCacheSize=2048m
        再次编译未出现内存不足报错。

    c.接着有出现另外一个问题
        问题描述:
            android studio Unsupported major.minor version 52.0
        解决方法:
            在网上查阅是由于jdk版本不对(version 52 对应的是jdk 1.8)。
            File --- Other Settings --- Default Project Structure 
            查看到使用到studio默认的,修改JDK location,选择自己的1.8版本的jdk路径。环境变量也设置了jdk1.8
            
    d.重启studio,等待Gradle Building结束,大概需要1小时左右。完成。
    
    e.在terminal中使用命令编译apk(第一次比较慢40分钟,后面3分钟左右)
        gradlew assembleDebug  编译debug
        gradlew assembleRelease
    
    f.在D:\git\smart\smart\build\outputs\apk目录中会生成apk文件。
    
    g.签名使用cmd脚本即可。
    
工程中添加module
    a. File --- New --- New Module... 选择Android Library,点击next
    b.  Application/Library name: Certification
        Module name: plugin-certification
        Package name: com.hw.smart.certification
    c.修改module的build.gradle文件配置
        打开Project Structrue界面,在Dependencies标签中删除一些不需要的依赖,添加2个依赖
            plugin-devicecontrol
            plugin-homeadd
    d.在smart的Module界面,Dependencies标签中,添加Module Dependency[plugin-certification]
       配置完成在setting.gradle中就可以看到。
       也可以直接修改这个文件,不用在界面上添加。
    e.添加完成,重新build一下,生成apk安装生效。

57、快速给类写注释

自己在template中定义一个headClass
Settings -- Editor -- Live Templates (可以直接搜live就出来了)
新建一个 Template Group... (命名 Java)
在Java中新建 live template (命名headClass)
Template text:
    /**
     * @author gaoqiang
     * @date: $DATE$
     * @describe 
     */
define 勾选Java,就OK了
   
这个时候日期显示不出来,点击 Edit variables,在expression中填【date("yyyy-MM-dd")】

58、定义模板,提高编辑效率

Log输入
    tag	private static final String TAG = “$class_name$”;
    ld	Log.d(TAG, “$method_name$” + $content$);
    li	Log.i(TAG, “$method_name$” + $content$);
    le	Log.e(TAG, “$method_name$” + $content$);
    lv	Log.v(TAG, “$method_name$” + $content$);
    lw	Log.w(TAG, “$method_name$” + $content$);
备注:以下$method_name$ 的expression值为 className(), $method_name$ 的expression值为methodName() 。

59、快捷键,(ctrl+shift+上下)

快速移动到上一个或下一个方法

60、Update Project的时候出现一个问题

“Project with path ':plugin-certification' could not be found in project ':smart'.”
这个是由于把gradle的配置文件都更新了,没有把这个module加进来。
当我们去添加的时候发现里面没有我们要选择的这个module,应该先把module include进来
a.在项目的settings.gradle配置文件中加: include ':plugin-certification'
b.这样就可以选择添加module了

61、新建一个android项目的时候,在manifest.xml文件中会有一个报错
, , AidlTokenType.import or AidlTokenType.package expected, got ‘@’
这个错误并不影响运行,但是可以设置不报错

在setting中搜索injections,把application/@icon前面的勾取消掉就行

62、AS中同步修改工程的包名步骤:

a.首先在工程右边的小角标上有个设置图标,把那个Compact Empty Middle Packages 的勾去掉。
b.这个是后显示不是“com.exampe.test”这种显示了。
c.右击使用Refactor,替换所有的包名。
d.这个app下面的build.gradle里面的applicationId是不会改变的,需要手动修改。

63、把eclipse工程转化android studio工程步骤及遇到的问题。

a.直接应用android.jar文件里面的http包出现错误
    解决方法:单独从网上下载apache的httpjar包放到libs下面,运行OK

b.之后又报错,错误信息
    Error:warning: Ignoring InnerClasses attribute for an anonymous inner class
    Error:(com.baidu.location.Poi$1) that doesn't come with an
    Error:associated EnclosingMethod attribute. This class was probably produced by a
    解决方法
        安卓的方法数量不够了,只能6w个方法。
        在项目build.gradle这里添加这句。

        defaultConfig {
        multiDexEnabled true
        }

c.没有报上面的错误了,接着又包了一个zip压缩代码的错误
    Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
    > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v4/app/FragmentState.class
    意思就是重复定义了

    解决方法:
        看到app module里面应用了v7包,而且在libs中也有v7包,包build.gradle里面的依赖去掉OK
    
编译还算顺利,只遇到了上面3个问题,可以成功编译出app运行。OK。

64、在AS中使用已有的eclispe的签名文件进行打包签名

a.右击工程,打开setting。

b.在Siging中配置debug和release的签名。
    例如:
        signingConfigs {
        debugKeystore {
            keyAlias 'androiddebugkey'
            keyPassword 'android'
            storeFile file('D:/Workspace/OneClickSubmission/debug.keystore')
            storePassword 'android'
        }
        releaseKeystore {
            keyAlias 'xmos.keystore'
            keyPassword '!psw'
            storeFile file('D:/Workspace/OneClickSubmission/xmos_release.keystore')
            storePassword '!psw'
        }
这个keyAlias可以通过命令查看到【keytool -list -v -keystore debug.keystore】

c.在Build Type中配置release和debug版本(也可以通过UI界面直接配置)
    例如:
        buildTypes {
            release {
                debuggable true
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.releaseKeystore
            }
            debug {
                debuggable true
                minifyEnabled false
                signingConfig signingConfigs.debugKeystore
            }
        }
d.多渠道打包的flavors可以使用默认的配置,暂时不需要配置。

e.做完了之后,就可以编译debug和release的版本app了。
    在terminal中是用命令编译
    debug版本:gradlew assembleDebug
    release版本:gradlew assembleRelease

65、在AS中使用AIDL步骤:

a.在src/main/ 目录下创建一个aidl文件夹
b.在文件夹下创建包名package,这个包名和你需要使用远程类名的包名一致。
c.在package里面创建一个aidl文件
    内容格式如下:
        // IMyAidlInterface.aidl
        package com.example.test;

        // Declare any non-default types here with import statements

        interface IMyAidlInterface {
            /**
             * Demonstrates some basic types that you can use as parameters
             * and return values in AIDL.
             */
            void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
                    double aDouble, String aString);

            void test();//这个是自己加的
        }
d.Rebuild Project,
    如果其他的环境gradle配置都是正常的话,就会在build--generated--source--aidl--你自己定义的目录下面看到生成的java文件
    这个就是中间人对象

66、在AS中将其他demo工程作为一个module引入遇到的问题:

a.提示合入manifest出现错误
    Error:Execution failed for task ':app:processOnClickSubDebugManifest'.
    > Manifest merger failed with multiple errors, see logs
    解决的方法:
        在主module的manifest文件中加入
            <uses-sdk tools:overrideLibrary="com.hw.automation" />
        文件头上再加一个命名空间
            xmlns:tools="http://schemas.android.com/tools"
    问题解决OK

b.重复依赖的问题
    前提是设置了multiDexEnabled true (不然方法数不够用,编译不了)
    Execution failed for task ':app:transformClassesWithJarMergingForOnClickSubDebug'.
    > com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/v4/app/FragmentActivity.class
    看log提示是重复引用了v4包(其他的工程中使用了compile 'com.android.support:support-v4:25.3.1' 引入了v4)
    
    解决的方法:
        在主mudlue的build.gradle文件中加入
        //加上一下配置,不然多个模块重复依赖可能会报异常
        configurations {
            all*.exclude group: 'com.android.support', module: 'support-v4'
            all*.exclude group: 'com.android.support', module: 'support-annotations'
        }
    问题解决OK
    
c.本地的fastjson.jar包重复依赖
    解决的方法:
        直接将主module的本地libs文件夹下的fastjson.jar文件删除

67、使用as编译release版本

a.将模块配置中,Debuggable设置为false。编译发现有问题,提示 “:app:lintVitalRelease FAILED”
b.在build.gradle中加入
    lintOptions{
        checkReleaseBuilds false
        abortOnError false
    }
生成了apk测试OK,在android9.0上,进入设置未发现应用在调试列表中。

68、在android studio中遇到可以成功编译,但是找不到R的问题

错误提示:Cannot resolve symbol 'R
解决方法:
点击菜单中的 “File” -> “Invalidate Caches / Restart”,然后点击对话框中的 “Invalidate and Restart”,清空cache并且重启
解决OK

69、设置一个tab键为4个空格的缩进

左上角File—Setting–Editor–Code Style–Java
取消 “”use tab character“”选项,设置 “Tab size”为4,,这样就可以了,记住需要点击OK保存设置

如果不生效需要在【Code Style】上点击,在【Indents Detection】,取消勾选【Detect and use existing file indents for editing】

70、将xmos内部版本代码迁移到as上的过程,及遇到的问题

a.创建一个新的工程:D:\workspace_android_studio\xmos_Inner
    使用默认的最新的配置,没有的在线同步更新
    版本号:
    【整个工程的build.gradle】classpath 'com.android.tools.build:gradle:3.2.0'
    【gradle-wrapper.properties】distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
    【app模块的build.gradle】
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.hw.httpwww.xmos_inner"
            minSdkVersion 17
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        
b.将eclipse里面的工程文件拷贝过来

71、发现一个双击shift搜索的快捷键使用技巧

双击shift搜索需要找的类
按 shift+enter 可以在新的窗口中打开这个类

72、打开最近文件的快捷键

ctrl+e

73、新电脑配置xmos工程出现的问题:

基本上都是网络代理的问题

74、as网络代理设置

在C:\Users\gq\.gradle\gradle.properties

systemProp.http.proxyPassword=
systemProp.https.proxyUser=gq
systemProp.http.proxyHost=proxyhk.hw.com
systemProp.https.proxyPort=8080
systemProp.https.proxyPassword=
systemProp.https.proxyHost=proxyhk.hw.com
systemProp.http.proxyUser=gq
systemProp.http.proxyPort=8080

75、问题:

	Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api
	
	由于gradle版本变更,语法不一致导致
解决方法:
	compile 改成implementation 
	androidTestCompile改成androidTestImplementation 
	testCompile 改成testImplementation

76、问题:

Resource IDs cannot be used in a switch statement in Android library modules
解决方法:
在Android Studio中选中switch,按Option+Return(Mac),Alt+Enter(Windows),选择Replace ‘switch’ witch ‘if’即可

77、问题:

> java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource compilation failed
AAPT: error: duplicate value for resource 'attr/starPadding' with config ''.
解决方法:
	重复定义了一些资源名称,将我们的名称修改下,避免冲突

78、问题:

Program type already present: org.apaches.commons.codec.BinaryDecoder
解决方法:
发现是2个jar包有相同的包名和类,在gradle中,第二个使用jar引用使用 compileOnly files('libs/HwLogUpload.jar') ,但是要注释
implementation fileTree(include: ['*.jar'], dir: 'libs'),否则还是不生效。

79、问题:

> Task :app:processDebugManifest FAILED
D:\batatest\BETA_batatest_CHINA\app\src\main\AndroidManifest.xml:83:9-36 Error:
	Attribute application@allowBackup value=(false) from AndroidManifest.xml:83:9-36
	is also present at [:one_click_submission] AndroidManifest.xml:74:9-35 value=(true).
	Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:81:5-928:19 to override.
解决方法:
	manifest合并失败,需要和主module保持一致

80、问题:

D:\batatest\BETA_batatest_CHINA\app\src\main\AndroidManifest.xml:82:9-45 Error:
		Attribute application@name value=(com.hw.batatest.home.MainApplication) from AndroidManifest.xml:82:9-45
		is also present at [:one_click_submission] AndroidManifest.xml:73:9-53 value=(com.hw.xmos.MyApplication).
		Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:81:5-928:19 to override.
解决方法:	
	只能有一个继承application

81、问题:

D:\batatest\BETA_batatest_CHINA\one_click_submission\build\intermediates\packaged_res\debug\layout\home_network_mark_msg_item.xml:27: error: attribute com.hw.xmos:roundColor not found.
解决方法:
	将home_network_mark_msg_item.xml里面的命名空间修改为:
	xmlns:android_custom="http://schemas.android.com/apk/res-auto"

82、问题:

Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process C:\Users\gwx2844
38\.gradle\caches\transforms-1\files-1.1\support-fragment-27.1.1.aar\de88e59027dc1c79c2dbabd651ca1377\jars\classes.jar

解决方法:
将    implementation
implementation files('libs/android-support-annotations.jar')
implementation files('libs/android-support-v4.jar')
compileOnly files('libs/android-support-v7-appcompat.jar')
修改为compileOnly就没有报这个错误了

备注:compileOnly只编译,不打包

83、问题:

Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives:
  Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes.
  Program type already present: com.google.gson.FieldNamingPolicy
解决方法:
这个是gson.jar包引用和主app的重复了,将
implementation files('libs/gson-2.4.jar')
修改为 compileOnly files('libs/gson-2.4.jar')

84、上传出现服务service挂死问题

(Sending signal. PID: 21434 SIG: 9)

检查发现我们上传模块AndroidManifest里面配置的service名称和主app里面配置一样的,冲突了。我们修改我们的配置为:xmosloguploadservice
    <service
        android:name="com.hw.smart.logupload.global.LogUploadService"
        android:exported="false"
        android:process=":xmosloguploadservice"></service>
    <service
        android:name="com.hw.smart.logupload.local.LogUploadService"
        android:exported="false"
        android:process=":xmosloguploadservice"></service>

85、多线程多次请求出现挂死问题:

04-19 17:51:07.051  1386  2013 E AndroidRuntime: FATAL EXCEPTION: pool-4-thread-5
04-19 17:51:07.051  1386  2013 E AndroidRuntime: Process: com.hw.batatest, PID: 1386
04-19 17:51:07.051  1386  2013 E AndroidRuntime: java.lang.IllegalStateException: Invalid use of BasicClientConnManager: connection still allocated.
04-19 17:51:07.051  1386  2013 E AndroidRuntime: Make sure to release the connection before allocating another one.
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at org.apache.http.impl.conn.BasicClientConnectionManager.getConnection(BasicClientConnectionManager.java:162)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at org.apache.http.impl.conn.BasicClientConnectionManager$1.getConnection(BasicClientConnectionManager.java:139)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:456)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at com.hw.automation.engine.HiLinkEngine.sendGetRequest(HiLinkEngine.java:522)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at com.hw.automation.engine.HiLinkEngine.login(HiLinkEngine.java:395)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at com.hw.automation.OneClickSubmissionOperator.loginRouter(OneClickSubmissionOperator.java:196)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at com.hw.automation.OneClickSubmissionOperator.triggerRouterCollectLog(OneClickSubmissionOperator.java:212)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at com.hw.xmos.CalculateTestActivity$7.run(CalculateTestActivity.java:1317)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
04-19 17:51:07.051  1386  2013 E AndroidRuntime: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)

解决方法:
将sendGetRequest方法中的
client = new DefaultHttpClient();
修改为:
client = new DefaultHttpClient(new ThreadSafeClientConnManager());

新的api上报错信息:
12-27 11:14:44.104 18600 19197 E AndroidRuntime: FATAL EXCEPTION: Thread-61
12-27 11:14:44.104 18600 19197 E AndroidRuntime: Process: com.hw.iotwifitester, PID: 18600
12-27 11:14:44.104 18600 19197 E AndroidRuntime: java.lang.IllegalStateException: No wrapped connection.
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.impl.conn.AbstractClientConnAdapter.assertValid(AbstractClientConnAdapter.java:168)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestHeader(AbstractClientConnAdapter.java:287)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:206)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:124)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:442)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:596)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:517)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:495)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at com.hw.automation.engine.HiLinkEngine.sendGetRequest(HiLinkEngine.java:522)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at com.hw.automation.OneClickSubmissionOperator.isSupportHilinkRouter(OneClickSubmissionOperator.java:154)
12-27 11:14:44.104 18600 19197 E AndroidRuntime: 	at com.hw.iotwifitester.MainActivity$41.run(MainActivity.java:5991)

有的api不能直接new ThreadSafeClientConnManager();
解决方法(测试OK):
client = new DefaultHttpClient();
ClientConnectionManager mgr = client.getConnectionManager();
HttpParams params = client.getParams();
client = new DefaultHttpClient(new ThreadSafeClientConnManager(params,mgr.getSchemeRegistry()), params);

86、module打包成jar的命令

a.在module的根目录写,名称自己取
	def _BASENAME = "TestJar"
	def _VERSION = "_V1.0"
	def _DestinationPath = "build"
	def zipFile = file('build/intermediates/full_jar/release/createFullJarRelease/full.jar') //这个路径

	task deleteBuild(type:Delete){
		delete _DestinationPath + _BASENAME + _VERSION + ".jar"
	}

	task makeJar(type:Jar){
		from zipTree(zipFile)
		from fileTree(dir:'src/main',includes:['assets/**']) //将assets目录打入jar包
		baseName = _BASENAME + _VERSION
		destinationDir = file(_DestinationPath)
	}

	makeJar.dependsOn(deleteBuild, build)

b.在cmd中输入【gradlew makejar】,在build的根目录就会生成TestJar_V1.0.jar文件

87、添加在线的jar方法:

例如添加fastjson 1.2.58版本
implementation 'com.alibaba:fastjson:1.2.58'

88、拉取代码的时候出现 Authentication failed

由于中间修改过一次账号密码,导致拉取失败
解决方法:
进入“控制面板”——“用户账户”-凭据管理器——windows凭据,找到了git的用户名密码。修改正确后ok

89、android studio上创建一个java工程方法

有时候我们需要调试一段java代码,但是又不想跑一遍整个android工程,所以我们可以在as上建一个java mudule来测试
参考网址:https://www.cnblogs.com/jpfss/p/9875402.html

a.创建一个module,module类型选择java library
b.写好一个测试类
	public class MyClass {
		public static void main(String[] args){
			System.out.println("success");
		}
	}
c.编辑新建java module的build.gradle文件
	apply plugin: 'java-library'
	apply plugin: 'application' //需要手动添加

	mainClassName="com.example.javalib.MyClass"//需要手动添加
	dependencies {
		implementation fileTree(dir: 'libs', include: ['*.jar'])
	}
d.配置运行
	Run --- Edit Configurations... --- + --- Application
	新建一个运行,配置
	Main class:com.example.javalib.MyClass (可以选择)
	Use classpath of module: javaLib(可以选择)
e.选择刚才配置的运行方式,运行就OK了

90、选中一段代码,快速生成一个方法

选中需要提取的方法体。
alt+shift+m

91、findViewById快捷键生成

fbc

92、设置代码自动补齐 switch case

进入settings -->  Editor --> Live Templates
新增一个live templates,名称【sw】,描述【create switch/case block】
填写自定义代码块,例如:
	switch(){
		case value:
			break;
		default:
			break;
	}
Define中勾选java

完成后,在编辑器输入【sw】回车就能自动补齐,switch/case 代码块了

93、运行程序报错instantRunSplitApkResourcesDebug\out\slice_1\resources_ap的问题解决

出现问题是由于点击的升级gradle插件版本

升级前:
classpath 'com.android.tools.build:gradle:3.3.2'
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

升级后:
classpath 'com.android.tools.build:gradle:3.4.1'
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

插件升级之后就出现这个问题
https://blog.csdn.net/shving/article/details/90675681
后来细看报错信息,是Android Studio的 instant_run在拆分APK时发生了错误,把instant_run关掉运行一遍再打开就好了

打开Android Studio的settings,找到 Instant Run,去掉勾选

94、解决Idea配置文件不显示中文的问题

1.首先我们的IDEA文件编码一般都修改为utf-8(setting-->file encodings--->Global Encoding 和 Project Encoding 都设置为UTF-8)
2.对于 Properties 文件,重要属性 Transparent native-to-ascii conversion 主要用于转换 ascii,一般都要勾选,不然 Properties 文件中的注释显示的都不会是中文。
备注:勾选上,工程中可以正常显示中文。
发布了126 篇原创文章 · 获赞 42 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/gaopinqiang/article/details/105082770