ClassNotFoundException:未find类“com.google.android.gms.ads.AdView”
我做了大量的研究,这对于许多用户来说似乎是一个常见的错误,但是原因却非常不同。 没有发现我为我工作。
我越来越
java.lang.RuntimeException: Unable to start activity ComponentInfo{ [...]/[...].activities.StartActivity}: android.view.InflateException: Binary XML file line #173: Error inflating class [...].BannerAd [...] Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class com.google.android.gms.ads.AdView [...] Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.AdView" on path: DexPathList[[zip file "/data/app/[...]-1.apk"],nativeLibraryDirectories=[/data/app-lib/[...]-1, /vendor/lib, /system/lib]]
我正在安装最新版本的ADT和SDK软件包。 我将google-play-services_lib复制到我的工作区,并将其作为Android项目导入。 我把它作为一个库添加到我的应用程序项目。 我检查了“订单和出口”下的所有内容。
我有一个banner_ad.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" android:orientation="vertical" > <com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" ads:adSize="BANNER" ads:adUnitId="[...]" /> </LinearLayout>
和我正在使用的BannerAd.java:
package [...]; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.widget.LinearLayout; import [...].R; import [...].general.Settings; import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdView; public class BannerAd extends LinearLayout { public BannerAd(Context context, AttributeSet attrs) { super(context, attrs); if (!Settings.PRO) { LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.banner_ad, this, true); AdView adView = (AdView) this.findViewById(R.id.adView); AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); } } }
这与proguard有关吗? 我不知道,这是我的proguard-project.txt文件,但是:
# To enable ProGuard in your project, edit project.properties # to define the proguard.config property as described in that file. # # Add project specific ProGuard rules here. # By default, the flags in this file are appended to flags specified # in ${sdk.dir}/tools/proguard/proguard-android.txt # You can edit the include path and order by changing the ProGuard # include property in project.properties. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html # Add any project specific keep options here: # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: #-keepclassmembers class fqcn.of.javascript.interface.for.webview { # public *; #} -keep class * extends java.util.ListResourceBundle { protected Object[][] getContents(); } -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { public static final *** NULL; } -keepnames @com.google.android.gms.common.annotation.KeepName class * -keepclassmembernames class * { @com.google.android.gms.common.annotation.KeepName *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; }
任何想法我可以尝试解决这个问题?
编辑:有时,我也得到这样的输出在控制台(但不是每次我编译,有时只):
[2014-07-24 12:49:05 - [...]] Dx trouble processing: [2014-07-24 12:49:05 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000) ...while parsing com/google/android/gms/internal/mb.class ...while processing com/google/android/gms/internal/mb.class [2014-07-24 12:49:05 - [...]] Dx trouble processing: [2014-07-24 12:49:05 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000) ...while parsing com/google/android/gms/internal/mc.class ...while processing com/google/android/gms/internal/mc.class [2014-07-24 12:49:05 - [...]] Dx [...] [Lots of similar warnings here] [...] trouble processing: [2014-07-24 12:49:25 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000) ...while parsing com/google/ads/mediation/customevent/CustomEventAdapter$a.class ...while processing com/google/ads/mediation/customevent/CustomEventAdapter$a.class [2014-07-24 12:49:25 - [...]] Dx trouble processing: [2014-07-24 12:49:25 - [...]] Dx bad class file magic (cafebabe) or version (0033.0000) ...while parsing com/google/ads/mediation/customevent/CustomEventServerParameters.class ...while processing com/google/ads/mediation/customevent/CustomEventServerParameters.class [2014-07-24 12:49:25 - [...]] Dx 2786 warnings
我做了什么@ user1684030说(升级的Android SDK构build工具;更改编译器为1.7),但没有为我工作。 我已经写出了我发现的解决scheme,以防止任何人遇到同样的问题:
在设置Google Play服务的步骤3中说:
在您的应用项目中,参考Google Play服务库项目。 有关如何执行此操作的更多信息,请参阅引用Eclipse的库项目。
注意:您应该引用复制到开发工作区的库副本 – 不应该直接从Android SDK目录中引用库 。
解决scheme:不要手动进行复制。 相反,只需选中Eclipse中的“将项目复制到工作区”
我这样做了,一切都恢复正常。
感谢这个StackOverFlow问题: 如何修复Google Play Services 2 Library安装到Eclipse (Admob是Google Play Services的一部分)
我终于通过解决了我的问题
- 安装最新版本的Android SDK构build工具(没有意识到我还没有)
- 从编译器符合性级别1.6切换到1.7(窗口 – 首选项 – Java – 编译器 – 编译器符合性级别)
谢谢大家。
这是因为ProGuard。 要在Google移动广告中安全使用ProGuard,请将以下内容添加到您的ProGuardconfiguration中:
-keep public class com.google.android.gms.ads.** { public *; } -keep public class com.google.ads.** { public *; }