![](/img/trans.png)
[英]Run Time Error : java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
[英]How to solve java.lang.NoClassDefFoundError for com.google.android.gms.R$styleable error?
我在一個項目中使用Google Maps,並使用Android.mk進行構建。 但是,仍然(經過幾天的研究)仍無法弄清楚如何解決NoClassDefFoundError ,該錯誤會在Google Maps片段膨脹發生時使apk崩潰。 我內部有什么辦法可以解決嗎? 詳細信息如下。
Google Play服務庫通過以下方式添加:
#Adding classpath to Google Play Services classes
LOCAL_CLASSPATH += $(LOCAL_PATH)/google-play-services_lib/bin/
...
#Google Play Services
LOCAL_STATIC_JAVA_LIBRARIES += google-play-services \
google-play-services_lib
...
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += google-play-services:libs/google-play-services.jar \
google-play-services_lib:libs/google-play-services_lib.jar
構建可以正常進行,但是當嘗試使用Google Maps片段填充布局時,應用程序會引發運行時錯誤。 LogCat :
**java.lang.NoClassDefFoundError**:
java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
at android.app.Activity.onCreateView(Activity.java:4996)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at android.view.LayoutInflater.inflate(LayoutInflater.java:354)
at com.mapsvisitor.ui.MapsFragment.onCreateView(MapsFragment.java:81)
...
代碼 :
final View layout = inflater.inflate(R.layout.maps_layout, null);
版面 :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.MapFragment" />
</LinearLayout>
問題在於,當您將依賴項目用作庫時,生成的JAR(google-play-services_lib.jar)不適合獨立使用(如java靜態庫)。 作為解決方案,請簡單地使用Eclipse導出生成的JAR,而不要采用以下方式導出:帶有選擇的src和gen文件夾的Export> Java> JAR文件進行導出:
以下代碼段有助於定義com.google.android.gms.R和嵌套類不可用(com.google.android.gms.R $ attr,com.google.android.gms.R $ color等):
void isClassesAvailable(List<String> classes) {
for(String cl: classes) {
try {
Class.forName(cl);
}
catch (ClassNotFoundException e) {
Log.w(TAG, e.getMessage());
}
}
}
如何為依賴項項目打包JAR(帶有src文件夾類。請參見下面的文件夾“ android”):
如何為健壯的靜態庫打包JAR(帶有src和gen文件夾類。請參見下面的文件夾“ android”和“ com”):
但是,在使用Eclipse導出輕技巧的習慣上正確的解決方案之前,它已經成為GTD。 使用google-play-services_lib / bin / classes內容簡單地重新打包google-play-services_lib.jar並先前在其中顯示內容,可以使用所有資源的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.