ошибка: не найден идентификатор ресурса для атрибута "adSize" в пакете "com.google.example" main.xml


144

Когда я следовал инструкциям по добавлению рекламы в свое приложение с помощью xml, я получил следующие ошибки:

Description Resource Path Location Type
error: No resource identifier found for attribute 'adSize' in package 'com.google.example'  main.xml    /HelloWorld/res/layout  line 12 Android AAPT Problem
Description Resource Path Location Type
error: No resource identifier found for attribute 'adUnitId' in package 'com.google.example'    main.xml    /HelloWorld/res/layout  line 12 Android AAPT Problem

Я редактировал main.xml, добавлял attrs.xmlфайл, но компилятору это не понравилось.


1
Вставьте макет и файл attrs.xml
Cristian

Ответы:


299

Заменить /res/с /lib/вашей пользовательской компоновки nampespace.

xmlns:android="http://schemas.android.com/apk/res/android" в вашем случае будет:

xmlns:yourApp="http://schemas.android.com/apk/lib/com.yourAppPackege.yourClass"

Я надеюсь, что это помогает.


У меня была другая проблема, но то же самое решение сработало. В основном я использовал файл макета, который ссылается на файл / res, который я изменил на / lib согласно инструкциям здесь, и это сработало. Можете ли вы объяснить, что здесь происходит?
RightHandedMonkey

XMLNS: YourApp = "schemas.android.com/apk/res-auto";
Файзан Мубашер

7
Привет, что такое yourApp и yourClass в вышеуказанном решении?
Программист

3
Пожалуйста, напишите один пример
Иман Мараши

всякий раз, когда я делаю это и перестраиваю проект, он автоматически преобразует то же самое в предыдущий и выдает ошибку
Сагар Деванга

74

У меня такая же проблема. Я скопировал код примера из кода Google и не смог скомпилировать.

xmlns:ads="http://schemas.android.com/apk/res/com.google.example"

Наконец-то я понял это. Последняя часть кода " com.google.example" - это имя пакета, поэтому вам нужно заменить его на пакет вашего проекта.

Например, мой пакет проекта " com.jms.AdmobExample", поэтому мое adsпространство имен:

xmlns:ads="http://schemas.android.com/apk/res/com.jms.AdmobExample"

Посмотрите мой пример, он работает нормально. Вы можете скачать APK, чтобы попробовать. Я также поместил свой исходный код здесь: Добавить Google Admob в приложении для Android


13
Разработчики, если вы используете свой проектный пакет в xmlns: ads, вам также нужно добавить 'attrs.xml', как объяснил Джеймс в его ссылке. Для более новых Admob SDK, attrs.xml больше не рекомендуется. Просто используйте следующее пространство имен:xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
vivek.m

8
@ vivek.m, спасибо, что указали мне правильный ответ! Вместо apk / res один ДОЛЖЕН использовать apk / lib в случае зависимости проекта apklib.
se.solovyev

4
Спасибо, я люблю интернет, особенно Stackoverflow.com
htafoya

Большое спасибо, после 3 часов поиска и отладки ваш ответ наконец-то появился и исправил его.
Влад Шнаковски,

@ vivek.m спасибо, это ответ, который работал для меня - с com.google.ads.
Раддевус


27

Вы также можете использовать http://schemas.android.com/apk/res-auto , который позаботится об этом автоматически. Используйте это так:

xmlns:ads="http://schemas.android.com/apk/res-auto"

@Niklas: Это не ссылка на веб-страницу. Этот URL-адрес будет использоваться следующим образом: xmlns: ads = " schemas.android.com/apk/res-auto ", который автоматически разрешает URL-адрес ресурса. Смотрите мой обновленный ответ выше.
Bms270

8

У меня была такая же проблема, но при использовании библиотечного проекта. Эта проблема была решена в r17: вместо использования пространства имен пакета:

xmlns:app="http://schemas.android.com/apk/res/hu.droidium.exercises"

Нужно использовать фиктивное пространство имен:

xmlns:app="http://schemas.android.com/apk/res-auto"

Это решит проблему недоступности атрибутов из ссылочного проекта.


8

я загружаю ту же самую демо-версию с Android.com и получаю ту же самую проблему.

в первый раз, я меняю

xmlns:custom="http://schemas.android.com/apk/res/com.example.android.customviews"

в

xmlns:custom="http://schemas.android.com/apk/lib/com.example.android.customviews"

это работает. тогда я получу другое решение

 xmlns:custom="http://schemas.android.com/apk/res-auto"

это также работает, но есть некоторые различия. Второе решение имеет функцию префекта. Я нахожу причину, может быть, вы можете помочь. спасибо


" schemas.android.com/apk/res-auto " добавьте все атрибуты, определенные в вашем проекте, а также определенные в библиотеках, на которые вы ссылались в своем проекте. поэтому он работает для вас и его более чистый подход
SAIR

3

Как вы указываете, в вашем attrs.xmlатрибуте adSize принадлежит пространство имен com.google.ads.AdView. Попробуйте изменить:

android:adUnitId="a14bd6d2c63e055"         android:adSize="BANNER"

в

ads:adUnitId="a14bd6d2c63e055"         ads:adSize="BANNER"

и это должно работать.


@FranciscoCorralesMorales я действительно добавил это, но все еще это не работает
Сагар Деванга

3

Я получил эту ошибку в отношении атрибута largeHeap, мое приложение не работало в режиме Eclipse, но в Ant оно все еще создавалось и работало нормально.

Андроида документации говорится , что:

XMLNS: андроид

Defines the Android namespace. This attribute should always be set to "http://schemas.android.com/apk/res/android".

Я удалил эту строку в своем манифесте, сохранил в затмении, вставил ее обратно и снова сохранил, и это сработало. В моем случае, я думаю, что проблема была в затмении, муравей и adb неправильно разговаривали друг с другом, а сохранение сбрасывало что-то. Интересно, что перезапуск Eclipse не решил эту проблему (обычно с такими проблемами перезапуск Eclipse - это первое, что вы должны попробовать, и обычно это решает проблему).


Спасибо, что изменение URL "xmlns:" спасло меня :)
songyy

У меня есть вопрос admob: stackoverflow.com/questions/36389729/…
Ruchir Baronia

2

Убедитесь, что вы включили эту часть в свой макет (вверху под строкой xmlns: android)

xmlns:ads="http://schemas.android.com/apk/res/com.google.example" 
...........blah blah..

Также проверьте, включили ли вы attrs.xml в res / values ​​/

Проверьте здесь для более подробной информации. http://code.google.com/mobile/ads/docs/android/banner_xml.html


1

Основываясь на ответе здесь , я думаю, вам нужно изменить атрибут xmlns: ads. Например, измените это:

<com.google.ads.AdView xmlns:ads="http://schemas.android.com/apk/res/com.google.example .../>

к этому:

<com.google.ads.AdView xmlns:ads="http://schemas.android.com/apk/res/com.your.app.namespace" .../>

Это исправило это для меня. Если вы все еще получаете ошибки, не могли бы вы уточнить?


1

Обычно я встраиваю свойство xmlns: ads в свойства adview следующим образом:

<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"
    android:layout_alignParentBottom="true"
    ads:adSize="BANNER"
    ads:adUnitId="@string/banner_ad_unit_id"/>

так что вам не нужно вставлять в родительский каждый раз, когда вы копируете объявление.

Просто скопируйте и вставьте объявление выше и вставьте его в любое место, и оно должно работать


1

Я искал ответ, но не смог найти, но, наконец, я мог это исправить, добавив play-service-adsзависимость, давайте попробуем это:

*) Файл -> Структура проекта ... -> В модуле вы можете найти приложение, есть опция под названием зависимости, и вы можете добавить com.google.android.gms: play-services-ads: xxx зависимость от вашего проекта.

Я столкнулся с этой проблемой при попытке импортировать проекты Eclipse в Android Studio.

Образ


1

В моем случае мне не хватало зависимости на уровне приложения build.gradle.

Решением было добавить зависимость, как показано ниже в Google:

Откройте файл build.gradle уровня приложения для своего приложения и найдите раздел «зависимости».

dependencies {
    implementation ...SOME_IMPLEMENTATION
    implementation ...SOME_IMPLEMENTATION
    implementation 'com.google.android.gms:play-services-ads:18.1.1'//<---ADD THIS LINE
}

Добавьте строку выше, которая инструктирует Gradle добавить последнюю версию Mobile Ads SDK и дополнительные связанные зависимости. Как только это будет сделано, сохраните файл и выполните синхронизацию Gradle.


0

Я также столкнулся с той же самой проблемой, я использовал GoogleAdMobAdsSDK-4.1.0.jarтогда, я попробовал с GoogleAdMobAdsSDK-4.0.4.jarтеперь, это работает хорошо, Это - проблема с файлом jar согласно моему опыту.


0

У меня была похожая проблема с MonoDroid при создании библиотеки классов с файлами Drawables и Layouts, которые имеют "android:"атрибут в XML. Я получаю ошибку, аналогичную той, что в вопросе.

Не найден идентификатор ресурса для атрибута 'textCursorDrawable' в пакете 'android'

Я обнаружил, что атрибут «android:» доступен только в Android API Level 12+, и я пытался создать более старую версию. Обновление моего проекта для сборки под Android 4.0 исправило проблему для меня. Здесь я нашел ответ. https://groups.google.com/forum/?fromgroups#!topic/android-developers/ocxKphM5MWM Просто убедитесь, что вы строите на правильном уровне API, если вы столкнулись с подобной проблемой, и убедитесь, что отсутствующий идентификатор существует в тот уровень API, против которого вы строите.


0

просто измените целевой SDK правой кнопкой мыши на проекте, затем нажмите на свойство выберите Android и выберите последний API


0

Та же самая ошибка произошла со мной в файле "activity_banner_xml.xml" внутри папки res / layout. Что я сделал, чтобы исправить это было заменить

<com.google.android.gms.samples.ads.AdView

с участием

<com.google.android.gms.ads.AdView

Там не было никаких ссылок на мое имя пакета. Кроме того, убедитесь, что вы установили adUnitId для идентификатора ads:adUnitId="@string/banner_ad_unit_id"> добавления модуля, который находится в папке res / Values ​​/ Strings.

Итак, мой окончательный файл макета выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    ads:adSize="BANNER"
    ads:adUnitId="@string/ad_unit_id"/>


0

Если ваш проект является нездоровым, замените:

xmlns:android="http://schemas.android.com/apk/res/android" 

с участием:

xmlns:app="http://schemas.android.com/apk/res-auto"

0

Я добавляю решение, которое работает для меня для этой же ошибки.

Я щелкнул правой кнопкой мыши проект> свойства> (левая панель) Android

Под правой панелью Libraryя удалил неисправную библиотеку и добавил ее снова.

Для меня эта ошибка произошла после испорченного файла рабочей области, куда мне пришлось снова импортировать все проекты.


0

Моя проблема была очень похожа (производит ту же проблему). После рефакторинга имени переменной с помощью опции «refactor -> rename» в Android Studio (от «value» до «myValue») я также обнаружил изменения в файле манифеста. Пул "значения" метаданных изменен на "myValue".

<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:myValue="@string/facebook_app_id"/>

После восстановления файла все швы снова будут в порядке.

<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id"/>

Надеюсь, это кому-нибудь поможет!


0

Добавьте xmlns: ads = "http://schemas.android.com/apk/lib/com.google.ads" , это решит вашу проблему.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.app.activities.Initializer" >


    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adSize="BANNER"
        ads:adUnitId="ca-app-pub-123456789/123456789"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

0

Заменить xmlns:android="http://schemas.android.com/apk/res/android" на xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

затем перестроить проект


0

Я добавил в android.support.design.widget.NawigationПросмотреть этот параметр:

android:layout_gravity="start"

И проблема была решена.



-2

PUT compile 'de.hdodenhof:circleimageview:2.0.0' IN Gradle зависимостей и поместить этот код в nav_header_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/lib/org.mainsoft.navigationdrawer"

    android:gravity="bottom"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:layout_width="match_parent"
    android:layout_height="160dp"
    android:background="@drawable/background_material_red"
    android:orientation="vertical">

<de.hdodenhof.circleimageview.CircleImageView

    android:id="@+id/profile_image"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:src="@drawable/profile"
    app:border_color="#FF000000"
    android:layout_marginLeft="24dp"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginStart="24dp" />

</LinearLayout>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.