Android遇到的一些问题

【AS构建】

  • 导入项目出现Manifest.xml not found。

    事实是导入的文件夹非项目根目录。。。仔细找找项目根目录在哪,根目录下会有Gradle等配置文件。

  • 导入项目卡在gradle加载界面。

    详见 解决导入卡在gradle加载界面问题

    或者用代理设置全局模式 把 http://bintray.com 添加到 pac 或 user-rule 里面

  • Android Studio 解决错误 Could not find method android() for arguments

    http://blog.csdn.net/wangtingshuai/article/details/53349530

  • Minimum supported Gradle version is 3.3. Current version is 3.2

    注意修改gradle-wrapper.properties,详见 http://blog.csdn.net/muzili1206/article/details/60757210

  • Gradle DSL method not found: 'compileSdkVersion()'

    http://blog.csdn.net/qq_18524107/article/details/76737045 该解决方案,可以在工程的build.gradle中指定sdk、buildTool版本等问题,module中只需要继承即可,整个工程统一管理。注意工程中build.gradle要有等号。

  • Android Studio出现Failed to open zip file

    http://www.jcodecraeer.com/a/anzhuokaifa/Android_Studio/2017/0317/7691.html

  • 更新AS3.0后,出错 Error: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

    在项目的gradle.properties中添加 android.enableAapt2=false

  • Plugin with id 'org.greenrobot.greendao' not found.

    在project的build.gradle中添加代码dependencies { classpath 'com.android.tools.build:gradle:2.2.1'},见 http://blog.csdn.net/qq_27899045/article/details/52797636

  • Gradle编译时,org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processD

    这是出现在往drawable中复制了大量图片和xml后发生的,发现xml文件里有大堆报错,切勿直接复制xml就不管了。

  • 报错:androidstudio Problems found loading plugins

进入setting-plugins,取消红色插件选择,重启,再重新选择刚才的红色插件。详见 https://stackoverflow.com/questions/17710739/problems-found-loading-plugins-in-android-studio

  • 编译时一些资源文件上的错误没法打印log

待编辑...
在terminal中输入命令 gradlew processDebugManifest --debug 打开了gradle的debug信息打印,才发现到了具体错误信息。

  • 加载了module再进行gradle构建的时候报错“SSL peer shut down incorrectly”
    先确定,加载module之前是正常的,那么一定是加载的module有问题,仔细查看module和app之间的配置,保证repositories等正确,一般在build(project)中需要配置:
buildscript {
    ext.kotlin_version = '1.3.10'
    repositories {
        google()
        mavenCentral()
        maven { url 'https://maven.google.com' }
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://maven.google.com' }
        jcenter()
    }
}

相应的module中也尽量按这个去设置,包括适配版本这个也要和app的一致。
其他可能的原因:
1、不要用安全连接


Android遇到的一些问题_第1张图片
搜狗截图20181125021621.png

2、需要FQ

【Git管理】

  • Git设置

    http://blog.csdn.net/qq_32452623/article/details/51786025

  • 注意settinngs中GitHub和Git是两码事,若使用码云等非GitHub仓库,需清空掉GitHub的设置。

【界面UI相关】

  • You need to use a Theme.AppCompat theme (or descendant) with this activity

    详见 http://blog.csdn.net/lincyang/article/details/42673151 ,我的情况中改Activity没用,必须修改Theme

  • LinearLayout中动态添加Fragment不能填充整个Activity的问题

    http://blog.csdn.net/se_wangke/article/details/47439653 重写Fragment中onCreate方法

  • Design editor is unavailable until a successful build xml文件编辑时切换到视图界面不显示

    先查错,无错的话rebuild,再不行重启AS

  • 有layout文件,但是编码中无法通过id获取相关组件

    查错,rebuild试试

  • ListView添加header或者footer后,在header、footer与items之间出现分割线

    在ListView中设置android:divider="@null",在item布局中设置TextView为分割线,注意分割线设在底部

  • TextView设置单行后文字不显示

    设置单行不要使用singleLine="true",使用以下代码

android:lines="1"
android:maxEms="20"
android:ellipsize="end"
  • ScrollView里嵌套ListView,进入界面时会自动滚动到最下面

    在listView的父层加上 android:descendantFocusability="blocksDescendants" 即可,每次加载都会在scrollview顶部。
    或者,在ScrollView中的第一个子元素设置为获取光标,android:focusableInTouchMode=”true” android:focusable=”true”

  • ScrollView嵌套ListView只显示一行之计算的高度不正确

    详见 https://www.cnblogs.com/zmc/p/4013053.html http://www.jb51.net/article/37202.htm

  • 显示全屏与底部虚拟按键冲突

最外层的框架里添加 android:fitsSystemWindows="true"

  • Dialog弹出框设置宽度填满父类,网上有很多改参数的教程,几乎都一样,但都无法生效

在参数设置时,把背景重设就好 dialogWindow.setBackgroundDrawableResource(android.R.color.transparent);

  • 对button的背景设置为一张图片有时候会出现变形的情况,解决方法是把图片放在bitmap.xml里再引用
bitmap.xml


  • 在attrs.xml中自定义的属性无法生效

引用属性时用 app:item_count="2"
在布局文件头部引入 xmlns:app="http://schemas.android.com/apk/res-auto"
这里的两个app可以必须相同,或者替换为其他的,比如xyz,要一起替换。

  • ConstraintLayout无法在可视界面中预览

查询AS是否下载了ConstraintLayout的支持。
Setting -> Android SDK -> SDK Tools 找到ConstraintLayout for Android等勾选下载

  • EditText设置光标在最后,大部分博文里都只提到了setSelection(getText().length()),然而项目中用这个方法总是没有效果,有博文提到在这之前还要设置singleLine,即setSingleLine(true)。然而对我来说都不起作用,并且考虑到我的需求是EditText一直保持光标在最后,决定整个自定义的EditText,网上找的代码亲测可用
public class MyEditText extends android.support.v7.widget.AppCompatEditText {
  
    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);  
    }  
  
    public MyEditText(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    public MyEditText(Context context) {  
        super(context);  
    }  
      
    @Override  
    protected void onSelectionChanged(int selStart, int selEnd) {  
        super.onSelectionChanged(selStart, selEnd);  
        //保证光标始终在最后面  
        if(selStart==selEnd){//防止不能多选  
            setSelection(getText().length());  
        }  
          
    }  
}  
  • 4.4系统TextView使用矢量图报错Caused by: android.content.res.Resources$NotFoundException: File res/drawable-xxhdpi-v4/arrow_right_white.xml from drawable resource ID
    主要是低版本TextView不兼容使用矢量图,需要把矢量图包裹在其他标签里:

    

但是到了这一步还不一定能完成,因为在最新版本中需要手动开启支持矢量图,在你的Application里添加这句:

    static {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
  • 使用Button时末尾总有个阴影线,在API11以上使用:
  style="?android:attr/borderlessButtonStyle"

或者干脆用TextView。

  • 在8.0系统中报错 Only fullscreen activities can request orientation
    在8.0系统中如果一个activity同时设置透明样式和固定方向就会报这个错,删掉一个就行,或者针对8.0进行适配https://blog.csdn.net/starry_eve/article/details/82777160

  • 使用AndroidX库,报错“android.support.annotation不存在”

在项目中使用了butterknife,也就是说butterknife中没有转Androidx;
问题解决很简单:升级butterknife到最新的版本(新版本已经兼容Androidx)就可以了。
此时我更新的版本是(butterknife:9.0.0-rc2)

【开发中】

  • 从Activity无法获取Fragment中的控件

    不能在onCreate函数中获取控件,因为fragment还没有start,你可以在onStart函数中获取。* Adapter.notifyDataSetChanged()时,ListView无法刷新数据 > 对于数据更新你不能直接用赋值=,因为这样会改变其内存地址,而notify...更新是对原内存地址上的数据更新,应该用ArrayList.clear(),再ArrayList.addAll()。详见 http://1028826685.iteye.com/blog/1663293* 无法读取xml文件夹下的资源文件 > 创建资源文件的时候要用右键-XML Resource File,这样的文件头里包含一下语句,否则直接创建xml文件没有该头,R读取时无法识别。```

  • 防止自动跳出输入法

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

  • ListView中CheckBox错位问题,详见:

    https://www.cnblogs.com/FightForFreedom/p/4656863.html

  • AndroidStudio运行DDMS,弹出错误框,查看错误日志后,发现“Unsupported major.minor version 52.0”

    应该是本地java版本比as版本低的关系,把本地java版本更新到1.8即可

  • 取消Activity标题栏

    if(isFullDisplay()) {
            Log.d(TAG, "isFull");
            requestWindowFeature(Window.FEATURE_NO_TITLE); //设置无标题
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//取消状态栏
            //上两行代码无效时,手动隐藏标题栏
            if(getSupportActionBar() != null) {
                getSupportActionBar().hide();
            }
        }
        setContentView(getViewId());
  • 用gson.fromJson(),会强制把所有数字都转换为double,过长的还会按科学计数法格式化,解决如下:

    http://www.lidetao.com/java-gson-json2map-int2double.html

  • android崩溃后直接重启,导致捕捉不到异常信息

    在调试器里修改设置,把 Show only selected application 改为 No Filters,详见 https://www.zhihu.com/question/32024327

  • 按Alt+Enter自动import包时不成功,一直显示Studio is updating indices

    打开File->Invalidate Caches / Restart->Invalidate and Restart,详见 https://blog.csdn.net/andrio/article/details/80359455

  • 安装时报错 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDexBuilderForDebug'.

    把原APK删掉重装就好

  • onActivityResult()不执行

1.你的Activity被finish()掉了,看看你的Activity有没有在哪里finish()掉。
2.startActivityForResult(intent, -1)函数,第二个参数小于0,应该要大于0
3.启动模式为android:launchMode=”singleTask”和android:launchMode=”singleInstance”都会导致无效,修改为默认的android:launchMode=”standard”
4.TabHost的子Activity中startActivityForResult调用其他Activity时候遭遇到onActivityResult方法不响应的问题...
5.Fragment里面调用startActivityForResult的时候...

  • 刚添加初始化Fragment,无法通过findFragmentByTag获取fragment

添加结束后再执行:mFragmentManager.executePendingTransactions();

  • 编译时报错“app:transformClassesAndResourcesWithProguardForRelease”,“java.io.IOException: Please correct the above warnings first.”

这里有一些解决方案,应该是一些包重复导致的混淆错误:app:transformClassesAndResourcesWithProguardForRelease
然而我遇到的情况是,混淆规则被注释掉了未加入,注意在release{}中加入“proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'”

  • 在引入第三方库,第一次打正式版包的时候如果报错 “app:transformClassesAndResourcesWithProguardForFlavor_releaseRelease”

注意是混淆问题,引入第三方库时没有写响应的混淆规则。需要修改proguard-rules.pro(app),常用的有:

#定位
 -keep class com.amap.api.location.**{*;}
 -keep class com.amap.api.fence.**{*;}
 -keep class com.autonavi.aps.amapapi.model.**{*;}

#3D地图 V5.0.0之后:
 -keep class com.amap.api.maps.**{*;}
 -keep class com.autonavi.**{*;}
 -keep class com.amap.api.trace.**{*;}

#greendao
-keep class org.greenrobot.greendao.**{*;}
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
    public static java.lang.String TABLENAME;
}
-keep class **$Properties

#eventbus
-keepattributes *Annotation*
-keepclassmembers class ** {
    @org.greenrobot.eventbus.Subscribe ;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
# Only required if you use AsyncExecutor
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
    (java.lang.Throwable);
}
  • 在编译的时候,当build.gradle文件有误时,在build栏只会简单报错,常见的报错如下
java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs

然而什么地方see logs,却不得而知,这里要打开报错日志来看详细错误:
进入Terminal栏
Windonws输入命令行

gradlew processDebugManifest --stacktrace

Mac输入命令行

./gradlew processDebugManifest --stacktrace

即可查看详细错误,有时候Mac会遇到 Permission denied
那在输入上述命令行前,先获取权限,输入

chmod +x gradlew

再按上述操作即可。

你可能感兴趣的:(Android遇到的一些问题)