Android:在Eclipse下開發android應用產生的問題及解決方法
總結下,新手在使用eclipse開發android過程中可能遇到的一些問題。
1、升級sdk後遇到的問題:Unable to execute dex: java.nio.BufferOverflowException.
具體資訊如下:
Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace. java.nio.BufferOverflowException at java.nio.Buffer.nextPutIndex(Unknown Source) at java.nio.HeapByteBuffer.putShort(Unknown Source) at com.android.dex.Dex$Section.writeShort(Dex.java:818) at com.android.dex.Dex$Section.writeTypeList(Dex.java:870) at com.android.dx.merge.DexMerger$3.write(DexMerger.java:437) at com.android.dx.merge.DexMerger$3.write(DexMerger.java:423) at com.android.dx.merge.DexMerger$IdMerger.mergeUnsorted(DexMerger.java:317) at com.android.dx.merge.DexMerger.mergeTypeLists(DexMerger.java:423) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:163) at com.android.dx.merge.DexMerger.merge(DexMerger.java:187) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287) at com.android.dx.command.dexer.Main.run(Main.java:230) at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:187) at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:813) at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:597) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396) at org.eclipse.core.internal.resources.Project$1.run(Project.java:618) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2344) at org.eclipse.core.internal.resources.Project.internalBuild(Project.java:597) at org.eclipse.core.internal.resources.Project.build(Project.java:124) at com.android.ide.eclipse.adt.internal.project.ProjectHelper.doFullIncrementalDebugBuild(ProjectHelper.java:1116) at com.android.ide.eclipse.adt.internal.launch.LaunchConfigDelegate.launch(LaunchConfigDelegate.java:147) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:854) at org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:703) at org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:937) at org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1141) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
解決方法:
移除java build path下的Android Dependencies即可。 作用是移除以前低版本的依賴檔案,在重新執行時,編譯環境會自動為專案新增新的依賴檔案,所以可以放心的移除。
2、指定了低版本的安卓庫,但是在run時卻只能選擇更高版本的AVD裝置的問題(在同時有該低版本avd和更高版本avd的情況下):
具體資訊:
比如已經選擇Android 2.3.3作為庫檔案,並且已經有該版本的虛擬機器的情況下,run程式時,target自動選擇了4.4版本的avd裝置,而不是2.3.3版本的avd。
原因:
在Java build path中選擇安卓版本指明瞭該安卓應用適用的安卓系統版本。比如在Java build path中選擇2.3.3版本,則編譯環境會在project.properties中自動生成target=android-10。
但為什麼run的時候會自動選擇高版本avd呢?這是因為AdroidManifest.xml中minSdkVersion值設定有問題,如下:
<uses-sdk android:minSdkVersion="15" />
上面這段xml片段表明應用需要的最低sdk版本是15,即android 4.0.3。而目前的avd中只有2.3.3和4.4版本的,所以run時自動選擇了4.4版本的以匹配這個設定。
所以解決方法就是將該值設定為minSdkVersion="10"即可。
上面的情況編譯環境不會發出任何警告,所以需要開發者自己仔細注意了。
3、如何在logcat中檢視程式異常資訊?
具體情況:
比如:如下定義一個activity:
public class Bmi extends Activity {
/** Called when the activity is first created. */
private RadioButton radio_man = (RadioButton) findViewById(R.id.radio_man);
上面程式碼段在定義radio_man時就試圖通過findViewById獲取ID為R.id.radio_man的檢視物件,但是由於變數定義是在new物件時首先定義的,這時候不存在R.id.radio_man對應的物件,所以上面就會丟擲異常。
作為一個不是很新的java新手,犯下如是錯誤實屬不該。
那麼如何檢視到底哪裡出錯了呢?因為在avd模擬器上,只能看到如下檢視:
解決方法:開啟選單Windows/show view/logcat,即可顯示logcat檢視,如下:
全選上面的錯誤資訊匯出到txt文件裡,可看到更詳細的資訊如下:
12-05 05:22:08.971: D/AndroidRuntime(340): Shutting down VM
12-05 05:22:08.971: W/dalvikvm(340): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-05 05:22:09.221: E/AndroidRuntime(340): FATAL EXCEPTION: main
12-05 05:22:09.221: E/AndroidRuntime(340): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.johnny.util/com.demo.android.bmi.Bmi}: java.lang.NullPointerException
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.os.Handler.dispatchMessage(Handler.java:99)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.os.Looper.loop(Looper.java:123)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.ActivityThread.main(ActivityThread.java:3683)
12-05 05:22:09.221: E/AndroidRuntime(340): at java.lang.reflect.Method.invokeNative(Native Method)
12-05 05:22:09.221: E/AndroidRuntime(340): at java.lang.reflect.Method.invoke(Method.java:507)
12-05 05:22:09.221: E/AndroidRuntime(340): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-05 05:22:09.221: E/AndroidRuntime(340): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-05 05:22:09.221: E/AndroidRuntime(340): at dalvik.system.NativeStart.main(Native Method)
12-05 05:22:09.221: E/AndroidRuntime(340): Caused by: java.lang.NullPointerException
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.Activity.findViewById(Activity.java:1647)
12-05 05:22:09.221: E/AndroidRuntime(340): at com.demo.android.bmi.Bmi.<init>(Bmi.java:33)
12-05 05:22:09.221: E/AndroidRuntime(340): at java.lang.Class.newInstanceImpl(Native Method)
12-05 05:22:09.221: E/AndroidRuntime(340): at java.lang.Class.newInstance(Class.java:1409)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
12-05 05:22:09.221: E/AndroidRuntime(340): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
12-05 05:22:09.221: E/AndroidRuntime(340): ... 11 more
通過在at com.demo.android.bmi.Bmi.<init>(Bmi.java:33)上可知道Bmi.java的第33行程式碼丟擲了空指標異常。
於是修改程式碼:
private RadioButton radio_man = (RadioButton) findViewById(R.id.radio_man);
修改為:
private RadioButton radio_man;
4、關於“The process com.android.phone has stopped”的解決方案
具體情況:
在我升級了我的android sdk到最新版本(android19)後,在模擬器上run之前編寫的android 應用或匯入別人的應用,均產生如題這樣一個問題。程式看起來能夠執行,但是不能進行輸入,且不是彈出“The process com.android.acore has stopped”或“The process com.android.phone has stopped”錯誤對話方塊。不管是在2.3.3版本下礙事4.0.3下。
解決方案:
可能是android模擬器的一個bug,但是經過在網路上搜索,問題已經解決。
方法是:
首先,開啟avd manager,刪除所有現有的avd;
然後,新建新的avd裝置,建議基於模板(比如nexus s)建一個。
最後,run你的應用,可以看到不會彈出令人煩躁的錯誤對話方塊了。
5、匯入其他人現有工程到你的工作空間時可能遇見的問題
具體情況:
1)、可能遇見與問題1類似的問題,解決方法類似。
2)、可能因為AndroidManifest.xml檔案中設定允許的最小sdk版本在你的編譯環境不存在,從而產生類似“[2013-12-06 11:01:58 - Lesson14_HelloService] Unable to resolve target 'android-8'”錯誤,解決方法是修改<uses-sdk android:minSdkVersion="8" />為合適的版本。
6、 The connection to adb is down, and a severe error has occured.
這種情況遇到了一次。當時是插上手機到電腦上後,再開啟eclipse,然後run應用程式的時候彈出該問題。
在網上搜索了一下,很多人講到可能需要關閉手機衛士之類的程式,又考慮到我的手機已經開啟除錯模式,所以真的可能是由於主機已經開啟adb的緣故。於是在工作管理員中尋找,果然有adb.exe程序。於是關掉該程序,拔掉手機,然後重啟eclipse,問題得到解決。
7、Could not write file .classpath
在run由現有工程匯入的程式的時候,又可能遇到上述錯誤。
問題原因是工程目錄中的.classpath和.project已經設為隱藏了。如果你的電腦資料夾選項設為“不顯示隱藏檔案和資料夾”的話,在工程下時看不到這兩個檔案的。
解決方法:先設定檔案及選項為“顯示隱藏的檔案和資料夾”,然後去掉這兩個檔案的屬性“隱藏”前的勾選。
8、AndroidManifest.xml file missing
這是個比較奇怪的問題。因為你明明看到這個檔案就在eclipse左側的工程樹中,但是eclipse仍然報這樣的錯誤!而且中情況,也多半是發生在匯入已有工程到工作空間引起的。
解決方法:將工程檔案拷貝至其他地方,然後重新import一下。問題得到解決。
9、Eclipse不識別com.google.android.maps.xxx
在使用了import com.google.android.maps.xxx的android工程中,如果target設為非google apis,則eclpse會認為“import com.google.android.maps.xxx”
語句是錯誤的。
解決方法:將project build target選擇為google apis。問題解決。
10、中文註釋亂碼問題
在javadoc generation嚮導中配置引數的地方,新增額外選項:-encoding UTF-8 -charset UTF-8
如下:
11、Android開發錯誤——Could not find class
在執行weibo app時,遇到問題:
Could not find class 'org.apache.commons.httpclient.methods.PostMethod', referenced from method weibo4android.http.HttpClient.multPartURL
首先是檢視依賴的庫中有沒有httpclient類,及該類下面有沒有PostMethod方法。答案是有該類及該方法。那這個問題就顯得很奇怪。
第二個搜尋得到的解決方案告訴我,有可能是因為該類並沒有在生成apk的時候匯入apk中,所以執行的時候會產生錯誤。經過試驗,確實解決了問題。
下面是具體步驟。
2.在properties中沒有設定,右鍵工程->properties->Java Build Path->Order and Export 將剛剛新建的A勾選->點選ok 就可以了。如圖所示: 這樣就可以將jar包一同編譯到.apk檔案中。在模擬器下執行就不會出Could not find class ** referenced from method **錯誤了。
很奇怪的突然遇到上述問題。因為昨晚一切都是OK的,apk都能上傳到手機上除錯,但是今天早上起來一開啟,出現上述異常。 搜尋了一些解決,包括“window->preferences->Android->DDMS->ADB connection time out (ms)“設定得更大,比如500000,還是未能解決該問題。 決定關閉eclipse,並且開啟工作管理員,關掉adb.exe程序,然後重啟eclipse。 重啟完成後,再度連線到真機上除錯,OK,已經可以安裝成功。問題解決。
相關推薦
Android:在Eclipse下開發android應用產生的問題及解決方法
總結下,新手在使用eclipse開發android過程中可能遇到的一些問題。 1、升級sdk後遇到的問題:Unable to execute dex: java.nio.BufferOverflowException. 具體資訊如下: Unable to execute d
關於eclipse下開發android應用的幾個常用外掛
1.adt外掛 https://dl-ssl.google.com/android/eclipse/ 這肯定是不能少了的.有這個外掛,其實是將eclipse打造成了一個高階的android應用開發IDE,必要性可想而知. 2.egit外掛 http://d
android自動化測試--appium執行的坑問題及解決方法
問題 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress 之前的會話沒有關閉,然後你又運行了測試例項,也沒有設定覆蓋. 解決: 1.
Android使用Handler造成記憶體洩露的分析及解決方法
一、什麼是記憶體洩露? Java使用有向圖機制,通過GC自動檢查記憶體中的物件(什麼時候檢查由虛擬機器決定),如果GC發現
Linux下編譯PHP常見錯誤及解決方法
locate freetype evel distrib 常見 expec fin install erro 1、configure: error: xml2-config not found. Please check your libxml2 installation.
ubuntu部署python專案(virtualenv + flask + uwsgi + nginx)(附:部署過程中遇到的問題及解決方法)
以下為我部署pthon flask + virtualenv + uwsgi + nginx的艱苦之路(我使用的是ubuntu 及python3.6) 安裝好python3.6後(上一編文章有講啦): 建立python虛擬環境:VirtualEnv(非常牛逼及非常重要,在這裡你可以d
搭建CentOS 6網路安裝源時/repodata目錄下檔名字尾丟失問題及解決方法
今天在新的伺服器上艱難的完成安裝centos6.2 的64位版本, 一開始準備用燒錄軟體做ios盤,沒有成功,朋友說是.ios損壞(,本人表示強烈懷疑i,求人不如求自己,馬上在 京東上買了個16G的U盤,作為安裝盤 本想能順利的搞定,誰知.iso檔案刻錄到U盤後,格式自
Linux下常見的編譯錯誤及解決方法
1、/bin/bash: bison: command not foundmake: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 127解決方法:s
Eclipse 使用過程中的問題及解決方法
img 大小設置 j2ee ply and span ava jsp alt 1、Eclipse中java文件和jsp字體大小設置 1、更改所有文件的字體顯示大小過程: Window->preferences->General->Appearance-
安卓開發常見錯誤原因及解決方法
做安卓開發一年半了,遇到過不少的問題,其中有些花了不少時間才得到解決,有些至今不知為何,也請高人指點迷津,為我撥雲見日~~有錯誤也多多包涵,幫我糾正~~ 1.更換安卓專案的庫檔案(即使庫檔案程
sping boot 報:Could not find acceptable representation原因及解決方法
但是我這個是因為用了swagger ui 測試資料的時候返回時 選擇了xml格式導致報了Could not find acceptable representation 把返回資料格式換成 就可以了,這是我個人的錯誤場景,有朋友相同的可以嘗試修改下
檔案系統缺少庫:-/bin/sh: hello: not found問題及解決方法
1、問題描述: 執行一個程式,會出現-/bin/sh: xxx :not fount 開啟/sbin下會發現這個xxx可執行檔案是存在的,這可能是檔案系統中(/lib)中缺少某些庫導致的。 2、解決方法-以hello.c示例 以hello.c為例,編譯出了hel
IDEA中Git衝突的產生及解決方法
1.1 衝突產生的原因衝突產生的根本原因是:兩個人修改了同一個檔案的同一塊區域,在前者已經提交程式碼到遠端倉庫的情況下,後者修改程式碼前沒有使用pull命令更新程式碼,而是修改完程式碼後再使用pull命
微信小程式開發中常見問題及解決方法
本文章總結小程式開發中常見的錯誤問題。希望能幫助初學者少走彎路,避免類似的錯誤。 1:出現“指令碼錯誤或者未正確呼叫Page()”的錯誤提示。 解決方法:出現這個錯誤的原因通常是因為index.
Eclipse下的Android JNI 開發
1 建立Android工程 首先建立一個名為AndroidJniTest的Android工程,包名預設為com.example.androidjnitest,src目錄下自動建立MainActivity.java。 2 
Ionic簡單接觸:Windows下Ionic Android開發環境搭建
(一)Ionic簡單介紹: 首先,Ionic是什麼。 ionic地址: http://ionicframework.com Ionic是一款基於PhoneGap及AngularJS開發Hybrid/Web APP的前端框架,簡單來說就是可以
在Eclipse下搭建Android開發環境教程
三 Eclipse配置 1 安裝android 開發外掛 (1)開啟Eclipse, 在選單欄上選擇 help->Install New SoftWare 出現如下介面: 點選 Add按鈕,出現如下介面 名稱: Android (這裡可以自定義) 點選OK,將出現如下介面 點選 Next按鈕
Linux環境下開發Android程式,adb不識別meizu MX2手機
問題: Linux環境下編寫Android程式,將meizu MX2手機連線到電腦上,adb不識別該裝置,顯示如下: List of devices attached ???????????? no permissions 原因: 1. 在linux下開發an
Eclipse下使用Android Design Support Library中的控制元件
我只測試了 Design效果的Login和Scrolling效果控制元件。 最下面奉上2個demo。 1、File\import匯入sdk\extras\android\support\V7\appcompat後,右鍵專案Properties\Android\Is Lib
Mac OS X 下開發 Android 程式時使用 USB 連真機除錯
本人很早一篇 Mac OS X 下開發 Android 程式時使用 WiFi ADB 連真機除錯,手機端需要連線 WiFi, Root 許可權開啟 ADB 埠,電腦上執行 adb connect 命令來讓 Mac 連線 Android 真機進行除錯,其實用不著那麼麻煩