前言:
這是筆者在開發過程中遇到的一些問題,現記錄成文案,方便日后查閱使用節約時間
問題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不做處理可能會報錯,報錯如下:
原來從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 點擊后看到如下界面:
這里的Path 就是icon的路徑,BackGround Layer 可以指定顏色,
下面注意!!!
在預覽區域中給出了可能生成的圖標形狀,包括圓形、圓角矩形、方形等等。注意每個預覽圖標中都有一個圓圈,這個圓圈叫作安全區域,必須要保證圖標的前景層完全處于安全區域當中才行,否則可能會出現圖標被手機廠商的mask裁剪掉的情況。
設置好以后,點擊Next,即可自動生成8.0系統的圓角icon
問題9:Apk反編譯的那點事情
反編譯流程:
1): 把apk 改成 .zip 格式 然后解壓 ;
2): 解壓,即可看到dex文件 (特別注意,dex可能會有多個,如下圖,就有2個dex)
3):如果把 dex 文件,直接修改文件后綴 成 .jar ,接著把修改后的.jar文件放進 jd-gui , jd-gui很有可能會打不開
解決辦法:
1)使用 dex2jar 、 dex2jar官方下載地址
2)這個地址不用翻墻、下載后,解壓,然后將之前解壓出來的dex文件 放進該文件夾內,操作如下:
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地址),文章請勿濫用,也希望大家尊重筆者的勞動成果