1. 程式人生 > >Android:在Eclipse下開發android應用產生的問題及解決方法

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中,所以執行的時候會產生錯誤。經過試驗,確實解決了問題。

下面是具體步驟。

1.所建工程中沒有匯入jar包,如果是把別人的工程import到自己的eclipse中,需要右擊工程Bulid Path->Add Libraries->User Library->User Libraries->new(起一個名字隨便A)->Add Jars(將需要的jar包新增到A中) 如圖所示: Android開發錯誤鈥斺擟ould <wbr>not <wbr>find <wbr>class

2.在properties中沒有設定,右鍵工程->properties->Java Build Path->Order and Export 將剛剛新建的A勾選->點選ok 就可以了。如圖所示: Android開發錯誤鈥斺擟ould <wbr>not <wbr>find <wbr>class 這樣就可以將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,已經可以安裝成功。問題解決。

相關推薦

AndroidEclipse開發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.

EclipseAndroid JNI 開發

  1 建立Android工程 首先建立一個名為AndroidJniTest的Android工程,包名預設為com.example.androidjnitest,src目錄下自動建立MainActivity.java。     2 

Ionic簡單接觸WindowsIonic 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 真機進行除錯,其實用不著那麼麻煩