błąd: nie znaleziono identyfikatora zasobu dla atrybutu „adSize” w pakiecie „com.google.example” main.xml


144

Gdy postępowałem zgodnie z instrukcjami dodawania reklamy do mojej aplikacji w formacie xml, otrzymałem następujące błędy:

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

Edytowałem main.xml, dodałem attrs.xmlplik, ale kompilatorowi się to nie spodobało.


1
Wklej układ i attrs.xml
Cristian

Odpowiedzi:


299

Wymień /res/się /lib/w nampespace niestandardowy układ.

xmlns:android="http://schemas.android.com/apk/res/android" w twoim przypadku byłoby:

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

Mam nadzieję, że to pomoże.


Miałem inny problem, ale to samo rozwiązanie zadziałało. Zasadniczo używałem pliku układu, który odwołuje się do pliku / res, który zmieniłem na / lib zgodnie z instrukcjami tutaj i zadziałało. Czy możesz wyjaśnić, co się tutaj dzieje?
RightHandedMonkey

xmlns: yourApp = "schemas.android.com/apk/res-auto";
Faizan Mubasher

7
Cześć, jaka jest twoja aplikacja i twoja klasa w powyższym rozwiązaniu?
Programmer

3
proszę podać jeden przykład
Iman Marashi

ilekroć to robię i ponownie buduję projekt Automatycznie konwertuje to samo na poprzedni i wyrzuca błąd
Sagar Devanga

74

Miałem ten sam problem. Skopiowałem przykładowy kod z kodu Google i nie mogłem się skompilować.

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

W końcu to rozgryzłem. Ostatnia część „ com.google.example” kodu to nazwa pakietu, więc musisz ją zastąpić pakietem projektu.

Na przykład mój pakiet projektu to „ com.jms.AdmobExample”, więc moja adsprzestrzeń nazw to:

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

Sprawdź mój przykład, działa dobrze. Możesz pobrać APK, aby spróbować. Tutaj również umieściłem mój kod źródłowy: Dodaj Google AdMob w aplikacji na Androida


13
Deweloperzy, jeśli używasz pakietu projektu w xmlns: ads, musisz również dodać „attrs.xml”, jak wyjaśnił James w jego linku. W przypadku nowszego zestawu SDK Admob attrs.xml nie jest już zalecany. Po prostu użyj następującej przestrzeni nazw:xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
vivek.m

8
@ vivek.m, dziękuję za wskazanie mi poprawnej odpowiedzi! Zamiast tego MUSI użyć apk / lib w przypadku zależności od projektu „apklib”.
se.solovyev

4
Dzięki, uwielbiam internet, szczególnie
Stackoverflow.com

Wielkie dzięki, po 3 godzinach wyszukiwania i debugowania odpowiedź w końcu pojawiła się i naprawiła.
Vlad Schnakovszki,

@ vivek.m dzięki, to jest odpowiedź, która zadziałała dla mnie - w przypadku com.google.ads.
raddevus


27

Możesz także użyć http://schemas.android.com/apk/res-auto , które zajmie się tym automatycznie. Użyj tego w ten sposób:

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

@Niklas: To nie jest link do strony internetowej. To jest adres URL, którego należy użyć w następujący sposób: xmlns: ads = " schemas.android.com/apk/res-auto ", który automatycznie rozpoznaje adres URL zasobu. Zobacz moją zaktualizowaną odpowiedź powyżej.
Bms270

8

Miałem ten sam problem, ale podczas korzystania z projektu biblioteki. Problem został rozwiązany w r17: Zamiast używać przestrzeni nazw pakietu:

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

Należy użyć fikcyjnej przestrzeni nazw:

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

Rozwiązuje to problem z atrybutami niedostępnymi z projektu, do którego się odwołują.


8

Pobieram to samo niestandardowe demo z Android.com i otrzymuję ten sam problem ze zgodnością.

po pierwsze, zmieniam się

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

do

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

działa . wtedy otrzymuję inne rozwiązanie

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

to też działa, ale są pewne różnice. Drugie rozwiązanie pełni funkcję prefekta. znajduję powód, może możesz mi pomóc. dzięki


schemas.android.com/apk/res-auto ” dodaj wszystkie atrybuty zdefiniowane w projekcie, a także zdefiniowane w bibliotekach, do których odwołałeś się w swoim projekcie. dlatego działa dla Ciebie i jego bardziej czystego podejścia
SAIR

3

Jak określisz w swoim attrs.xmladSize, atrybut należy do przestrzeni nazw com.google.ads.AdView. Spróbuj zmienić:

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

do

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

i powinno działać.


@FranciscoCorralesMorales Dodałem to, ale nadal nie działa
Sagar Devanga

3

Otrzymałem ten błąd w odniesieniu do atrybutu largeHeap, moja aplikacja nie działała pod zaćmieniem, ale pod ant nadal budowała się i działała normalnie.

Android dokumentacja wskazuje, że:

xmlns: android

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

Usunąłem tę linię w moim manifeście, zapisałem w zaćmieniu, wkleiłem ją z powrotem i ponownie zapisałem i zadziałało. W moim przypadku problemem chyba było zaćmienie, ant i adb nie rozmawiają ze sobą poprawnie, a zapisywanie coś resetuje. Co ciekawe, ponowne uruchomienie Eclipse nie rozwiązało tego problemu (zwykle w przypadku tego typu problemów ponowne uruchomienie Eclipse jest pierwszą rzeczą, którą należy spróbować i zazwyczaj rozwiązuje problem).


Dzięki zmianie
adresu


2

Upewnij się, że umieściłeś tę część w swoim układzie (u góry poniżej xmlns: linia android)

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

Sprawdź również, czy dołączyłeś attrs.xml do res / values ​​/

Sprawdź tutaj, aby uzyskać więcej informacji. http://code.google.com/mobile/ads/docs/android/banner_xml.html


1

Opierając się na odpowiedzi tutaj , myślę, że musisz zmienić atrybut xmlns: ads. Na przykład zmień to:

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

do tego:

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

Naprawiło to dla mnie. Jeśli nadal otrzymujesz błędy, czy możesz to rozwinąć?


1

Zwykle osadzam właściwość xmlns: ads we właściwościach adview w ten sposób:

<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"/>

aby nie trzeba było osadzać w rodzicu za każdym razem, gdy kopiujesz adiew.

Po prostu skopiuj i wklej powyższą poradę i wklej ją w dowolnym miejscu i powinno działać


1

Szukałem odpowiedzi, ale nie mogłem znaleźć, ale w końcu mogłem to naprawić, dodając play-service-adszależność, spróbujmy tego:

*) Plik -> Struktura projektu ... -> Pod modułem znajdziesz aplikację i opcję o nazwie zależności oraz możesz dodać com.google.android.gms: play-services-ads: xxx zależność do twojego projektu

Napotkałem ten problem, próbując zaimportować projekty Eclipse do Android Studio.

Wizerunek


1

W moim przypadku brakowało zależności w pliku build.gradle na poziomie aplikacji.

Rozwiązaniem było dodanie zależności zgodnie z zarysami Google poniżej:

Otwórz plik build.gradle na poziomie aplikacji dla swojej aplikacji i poszukaj sekcji „zależności”.

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

Dodaj powyższy wiersz, który instruuje Gradle, aby pobierał najnowszą wersję pakietu SDK do reklam mobilnych i dodatkowe powiązane zależności. Gdy to zrobisz, zapisz plik i przeprowadź synchronizację Gradle.


0

Napotkałem również ten sam problem, którego używałem, GoogleAdMobAdsSDK-4.1.0.jara następnie próbowałem, GoogleAdMobAdsSDK-4.0.4.jarteraz działa dobrze, jest to problem z plikiem jar, zgodnie z moim doświadczeniem.


0

Miałem podobny problem na MonoDroid podczas tworzenia biblioteki klas z plikami Drawables i Layouts, które mają "android:"atrybut w XML. Otrzymuję podobny błąd jak ten w pytaniu.

Nie znaleziono identyfikatora zasobu dla atrybutu „textCursorDrawable” w pakiecie „android”

Stwierdziłem, że atrybut „android:” jest dostępny tylko w interfejsie API systemu Android na poziomie 12 lub wyższym, a ja próbowałem zbudować dla starszej wersji. Zaktualizowanie mojego projektu do kompilacji na Androida 4.0 rozwiązało problem. Tutaj znalazłem odpowiedź. https://groups.google.com/forum/?fromgroups#!topic/android-developers/ocxKphM5MWM Po prostu upewnij się, że tworzysz na odpowiednim poziomie API, jeśli napotkasz podobny problem, i upewnij się, że brakujący identyfikator istnieje w ten poziom interfejsu API, na podstawie którego tworzysz.


0

po prostu zmień docelowy zestaw SDK, kliknij prawym przyciskiem myszy projekt, a następnie kliknij właściwość, wybierz androida i wybierz najnowszy interfejs API


0

Ten sam błąd występował ze mną w pliku „activity_banner_xml.xml” w folderze res / layout. To, co zrobiłem, aby to naprawić, to wymienić

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

z

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

Nie było żadnych odniesień do mojej nazwy pakietu. Upewnij się również, że ustawiłeś adUnitId dla ads:adUnitId="@string/banner_ad_unit_id"> Id jednostki dodawania znajduje się w folderze res / Values ​​/ Strings.

Więc mój ostateczny plik układu wygląda tak:

<?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

Jeśli twój jest projektem Gradle, wymień:

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

z:

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

0

Dodaję rozwiązanie, które działało u mnie w przypadku tego samego błędu.

Kliknąłem prawym przyciskiem myszy projekt> właściwości> (lewy panel) Android

Prawy panel pod LibraryUsunąłem wadliwą bibliotekę i dodałem ją ponownie.

U mnie ten błąd wystąpił po uszkodzonym pliku zaćmienia obszaru roboczego, w którym musiałem ponownie zaimportować wszystkie projekty.


0

Mój problem był bardzo podobny (powoduje ten sam problem). Po refaktoryzacji nazwy zmiennej za pomocą opcji „refactor -> rename” w Android Studio (z „value” na „myValue”) znalazłem również zmiany w pliku manifestu. Pula „value” metadanych została zmieniona na „myValue”.

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

Po przywróceniu pliku wszystko wydaje się być znowu w porządku.

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

Mam nadzieję, że komuś to pomoże!


0

Dodaj xmlns: ads = "http://schemas.android.com/apk/lib/com.google.ads". To rozwiąże Twój problem.

<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

wymienić xmlns:android="http://schemas.android.com/apk/res/android" z xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

następnie Odbuduj projekt


0

Dodałem w android.support.design.widget.Nawigation Zobacz ten parametr:

android:layout_gravity="start"

I problem został rozwiązany.



-2

PUT compile 'de.hdodenhof:circleimageview:2.0.0' NA Gradle zależności i umieścić ten kod w 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>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.