这是笔者在开发过程中遇到的一些问题,现记录成文案,方便日后查阅使用节约时间
问题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-gui , jd-gui很有可能会打不开
解决办法:
1)使用 dex2jar 、 dex2jar官方下载地址
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,谢谢。