Android开发常见问题收集(长期更新)

前言:

这是笔者在开发过程中遇到的一些问题,现记录成文案,方便日后查阅使用节约时间

问题1:Android studio3.0 com.android.tools.aapt2.Aapt2Exception: AAPT2 error?

解决此问题的办法是:在工程根目录下新建gradle.properties文件(如果没有就创建、有该文件就不用创建)、新增 android.enableAapt2=false 即可解决

问题2:如何打aar包?

1:鼠标选中项目中的库module(也就是 apply plugin: 'com.android.library')
2:开发工具-选项卡-Build-Rebuid project (开始打包)
3:打包完毕后,项目切换成Project模式 在库module下面的build文件夹\outputs\XXX.aar 这里的xxx就是库module生成的aar包

问题3:导入别人项目无法下载对应的Gradle?

1:找到该项目中的gradle-wrapper.properties文件,找到里面的distributionUrl,举例:distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
其中,这个项目对应gradle的版本就是4.1
2:Gradle官方下载地址
去Gradle官网下载all结尾的压缩包(对应的版本号就是该项目distributionUrl中申明的版本号,参考上例就是4.1), 将下载的zip文件放入以下地址C:\Users\你的用户名.gradle\wrapper\dists\gradle-1.12-all\2apkk7d25miauqf1pdjp1bm0uo
3:如果该文件夹下有其他文件(第一次编译别人项目,系统会自动下载,但是下载后可能会失败,所以该文件夹会多出两个文件),删除即可。将完整的zip文件放入该文件目录下,注意无需解压。
4:(Linux gradle文件的存放位置为:~/.gradle/wrapper/dists/)

问题4:项目可以正常编译但R文件爆红?

1:重启Android Studio
2:Clean Project
3:Android Studio工具栏->Help -> Edit Custom Properties -> create custom properties?(yes) ->添加 idea.max.intellisense.filesize=5000 然后重启
4:有人说升级Android Studio的版本 这样貌似代价有点大,我没有尝试
5:上述几种方案都试过了笔者这边(Android Studio版本为3.2)的R文件爆红现象依旧没有解决,最后有个小仙女推荐,改变项目 build.gradle里面的gradle版本号,改成
classpath 'com.android.tools.build:gradle:3.2.1' 最后完美解决

问题5:项目编译成功,小米手机却无法安装(另外一台手机就可以安装运行),提示如下:
小米手机安装失败

1:打开小米的开发者模式,允许手机调试
2:登录小米账号
3:关闭MIUI优化

问题6:Url问题

因为Http请求是不接受中文参数的,所以发送的时候使用URLEncoder.encode进行编码,接收的时候使用URLDecoder.decode解码,按照指定的编码格式进行编码、解码,这样才可以保证不会出现Url乱码的现象。

//编码
URLEncoder.encode(String s, String enc) 

使用指定的 编码 机制将字符串转换为 enc 格式

//解码
URLDecoder.decode(String s, String enc) 

使用指定的 解码 机制将字符串转换为 enc 格式

问题7:Android9.0-Webview问题

在Android9.0系统上,Webview不做处理可能会报错,报错如下:

9.0-Webview报错

原来从Android 9.0(API-28)开始,默认情况下禁用明文支持。所以http的url如果不做处理,则无法在webview中加载。

解决办法:
在AndroidManifest.xml文件中的Application标签添加android:usesCleartextTraffic="true",参考代码如下:

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:name=".tools.App"
        android:roundIcon="@mipmap/ic_launcher_round"

        android:usesCleartextTraffic="true"

        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


    </application>

问题8:Android8.0及8.0系统以上icon处理

从Android 8.0系统开始,应用程序的图标被分为了两层:前景层和背景层,所以,在设计应用图标的时候,需要将前景和背景部分分离,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo。如果UI只给我们一张icon图,那么需要进行适配,这里给出具体方案,不需要去麻烦UI在切图,自己手动生成8.0适配icon

准备工作:一张应用icon图、Android studio 开发工具

Android studio --》File --》New --》Image Asset 点击后看到如下界面:


Asset Studio

这里的Path 就是icon的路径,BackGround Layer 可以指定颜色,

下面注意!!!

在预览区域中给出了可能生成的图标形状,包括圆形、圆角矩形、方形等等。注意每个预览图标中都有一个圆圈,这个圆圈叫作安全区域,必须要保证图标的前景层完全处于安全区域当中才行,否则可能会出现图标被手机厂商的mask裁剪掉的情况。

设置好以后,点击Next,即可自动生成8.0系统的圆角icon

问题9:Apk反编译的那点事情

反编译流程:
1): 把apk 改成 .zip 格式 然后解压 ;
2): 解压,即可看到dex文件 (特别注意,dex可能会有多个,如下图,就有2个dex)

多个dex

3):如果把 dex 文件,直接修改文件后缀 成 .jar ,接着把修改后的.jar文件放进 jd-guijd-gui很有可能会打不开

解决办法:
1)使用 dex2jardex2jar官方下载地址
2)这个地址不用翻墙、下载后,解压,然后将之前解压出来的dex文件 放进该文件夹内,操作如下:

classes.dex放置到dex2jar文件夹内部

3)在文件夹内部打开命令行窗口(窗口的路径参看下图):输入命令行: d2j-dex2jar.bat classes.dex
命令行操作

命令行说明:

有朋友私底下问我,说 作者你的命令行我怎么用不了啊,其实是使用姿势有些小偏差:

1)命令行里的 d2j-dex2jar.bat 代表的就是蓝色矩形对应的内容,如果你修改了bat的文件名,上面的命令行也需要改成你对应的bat文件名,直接粘贴上面的命令行当然是不生效的!

2)命令行里的 classes.dex 代表的就是黄色矩形对应的内容,也就是我们需要解析的dex,如果你修改了dex的文件名,同理,也需要改变命令行!

3)最后,图上的红色矩形是命令行操作完以后生成的jar文件,使用红色矩形内的jar文件 ,打开 jd-gui ,导入该 jar 文件即可显示源码(亦可检测混淆是否生效等等)

4)如果出现多个dex文件,建议逐个操作,这样会比较稳(命令行也需要注意dex文件名)

5)嫌麻烦也可以使用别的反编译工具,这里就不推荐了

问题10:Android studio3.1编译项目不通过,出现: Removing unused resources requires unused code shrinking to be turned on.

解决方法:
AS 3.0.1版本以后,如果使用shrinkResources来移除未引用资源,首先必须要先开启混淆minifyEnabled,开启混淆以后才能通过资源压缩器将它们移除,否则编译会报错。

因此,如果在编译项目的时候,如果将minifyEnabled 设置为 false ,shrinkResources 设置为true 就会编译不通过。所以,如果想要 移除未引用资源,首先需要将 minifyEnabled 设置 true,才可以正常编译。

问题11:Git合并分支提示“Already up-to-date”

git 本地分支合并master分支代码,在Android studio 合并,提示 git merge Already up-to-date
原因在于merge之前,master分支的代码不是最新代码
1,应该先切换到master分支
git checkout master
2,拉取远程代码
git pull origin master
3,再切换到想要合并master的分支
git checkout 分支
4,本地分支合并master代码
git merge master
Ps:有冲突则解决冲突
————————————————

问题12:Git快速提交文件到远程仓库

git init(省略) git clone(省略)
git add . (注意这里需要空格 英文字符.)
git commit (提交到暂存区)
:a (输入提交信息)
然后esc(进入编辑模式)
输入完 :wq (保存编辑操作退出)
git push (推送代码)

问题13:如何快速查找当前页面Activity

在自定义Appliction - onCreate()里添加如下代码:

            registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle bundle) {
                    Logger.i("App", "当前Activity="activity.getClass().getSimpleName());
                }

                @Override
                public void onActivityStarted(Activity activity) {

                }

                @Override
                public void onActivityResumed(Activity activity) {

                }

                @Override
                public void onActivityPaused(Activity activity) {

                }

                @Override
                public void onActivityStopped(Activity activity) {

                }

                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

                }

                @Override
                public void onActivityDestroyed(Activity activity) {

                }
            });
未完待续。。。

如果这篇文章对您有开发or学习上的些许帮助,希望各位看官留下宝贵的star,谢谢。

Ps:著作权归作者所有,转载请注明作者, 商业转载请联系作者获得授权,非商业转载请注明出处(开头或结尾请添加转载出处,添加原文url地址),文章请勿滥用,也希望大家尊重笔者的劳动成果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269