помилка: не знайдено ідентифікатор ресурсу для атрибута '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
Крістіан

Відповіді:


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";
Faizan Mubasher

7
Привіт, що це вашApp та 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
Devs, якщо ви використовуєте пакет свого проекту у xmlns: ads, вам також потрібно додати "attrs.xml", як пояснив Джеймс у своєму посиланні. Для новіших SDK Admob 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.
raddevus


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 той самий користувацький демо-версію і отримую таку ж проблему complie.

на зап’ясті, я зміню

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 Я додавав це, але все ще не працює
Sagar Devanga

3

Я отримав цю помилку щодо атрибута bigHeap, моя програма не працювала під затемненням, але під мурашкою все-таки склалася і працювала нормально.

В документації на android вказується, що:

xmlns: android

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

Я стирав цей рядок у своєму маніфесті, зберігав у затемненні, вставляв рядок назад і знову зберігав, і він працював. У моєму випадку я гадаю, що проблема полягала у затемненні, мурашниках та adb, що не розмовляли один з одним належним чином, а заощадження перезавантажили щось. Цікаво, що перезапуск затемнення не вирішив цю проблему (зазвичай із цими типами проблем перезапуск затемнення - це перше, що слід спробувати, і зазвичай це вирішує проблему).


Thx це pls зміна "xmlns:" url врятував мене :)
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 у властивості перегляду таким чином:

<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 використовувати останню версію SDK для мобільних оголошень та додаткові залежності. Після цього збережіть файл і виконайте синхронізацію Gradle.


0

Я також зіткнувся з тією ж проблемою, яку я використовував, GoogleAdMobAdsSDK-4.1.0.jarтоді я намагався, GoogleAdMobAdsSDK-4.0.4.jarзараз вона працює нормально, це проблема з файлом jar відповідно до мого досвіду.


0

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

Не знайдено ідентифікатор ресурсу для атрибута "textCursorDravable" в пакеті "android"

Я виявив, що атрибут "android:" доступний лише в Android API рівня 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

Якщо ваш проект gradle, замініть:

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 (від "значення" до "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.