2013-07-30 24 views
12

Próbuję przenieść projekt mojej firmy z Maven do Gradle, do tej pory udało mi się przekonwertować wszystkie POM do odpowiednich plików build.gradle, ale napotkałem problem w podmodule podczas budowania.Zasoby dotyczące podrzędnego modułu siostrzanego, projektu Gradle

- Core-UI 
---- Utils 
---- FieldPanels 

Podfolder FieldPanel używa kolorów i innych zasobów zdefiniowanych w Utils. Próbowałem dodać projekt Utils jako zależność, ale to nie działało, czego mi brakuje?

/home/development/AndroidStudioProjects/com.project/core-ui/common.android.fieldpanels/build/bundles/debug/res/layout/base_summary_step_layout.xml:2: error: Error: No resource found that matches the given name (at 'background' with value '@color/wizard_summary_bg'). 

Utils gradle.build

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.2' 
    } 
} 

apply plugin: 'android-library' 

android { 
    sourceSets { 
     main { 
      manifest { 
       srcFile 'AndroidManifest.xml' 
      } 
      res { 
       srcDirs = [ 
         'res' 
       ] 
      } 
     } 
    } 
    compileSdkVersion 15 
    buildToolsVersion '17.0' 

    dependencies { 
     compile group: 'com.company.ipos.android', name: 'commons.pos.micropos.api', version: '0.0.35-SNAPSHOT' 
     compile group: 'org.slf4j', name: 'slf4j-api', version: '1.6.5' 
    } 
} 

repositories { 
    maven { 
     credentials { 
      username mavenUser 
      password mavenPassword 
     } 

     url repoUrl 
    } 
    maven { 
     credentials { 
      username mavenUser 
      password mavenPassword 
     } 

     url libsReleasesUrl 
    } 
    maven { 
     credentials { 
      username mavenUser 
      password mavenPassword 
     } 

     url libsSnapshotsUrl 
    } 
} 

fieldPanels gradle.build

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     classpath 'com.android.tools.build:gradle:0.5.2' 
    } 
} 

apply plugin: 'android-library' 

repositories { 
    maven { 
     credentials { 
      username mavenUser 
      password mavenPassword 
     } 

     url repoUrl 
    } 
    maven { 
     credentials { 
      username mavenUser 
      password mavenPassword 
     } 

     url libsReleasesUrl 
    } 
    maven { 
     credentials { 
      username mavenUser 
      password mavenPassword 
     } 

     url libsSnapshotsUrl 
    } 
} 

android { 
    dependencies { 
     compile group: 'com.company.ipos.android', name: 'commons.pos.micropos.api', version: '0.0.35-SNAPSHOT' 
     //compile group: 'com.company.ipos.android', name: 'common.android.utils', version: '0.0.35-SNAPSHOT' 
     compile project(":common.android.utils") 
     compile group: 'org.slf4j', name: 'slf4j-api', version: '1.6.5' 
    } 
    sourceSets { 
     main { 
      manifest { 
       srcFile 'AndroidManifest.xml' 
      } 
      res { 
       srcDirs = [ 
         'res', 
       ] 
      } 
     } 
    } 
    compileSdkVersion 15 
    buildToolsVersion '17.0' 
} 
+0

można dodawać pliki build.gradle? – buzeeg

+0

Tak, przepraszam, powinienem był zrobić to wcześniej. –

+0

To wydaje się w porządku. Czy uwzględniłeś dwa projekty w pliku setting.gradle? – buzeeg

Odpowiedz

2

można dołączyć swój settings.gradle. Zastanawiam się, czy masz niepoprawną ścieżkę w zależności od kompilacji.

Oto jak deklarują zależność od fieldPanels do Utils

compile project(":common.android.utils") 

Oznacza to, że moduł biblioteki utils musi być znana do Gradle „: common.android.utils”. Być może powinno to być zamiast tego?

compile project(":Core-UI:Utils") 
+0

Mam skonfigurować projekty bibliotek i to działa, ale problem jest specyficzny dla zasobów, które są wspólne dla projektów bibliotecznych. Wyobraź sobie, że masz 2 projekty biblioteczne LA i LB, a LB zależy od LA. Jeśli odwołasz się do zasobu w LB, który pochodzi z Los Angeles, kompilacja nie powiedzie się, mówiąc, że nie może znaleźć R.id.whatever. (Odwołanie się do normalnego kodu Java działa dobrze ...) – Jeroen

+0

@jtietema nie można powiedzieć, co chcesz zrobić, nie można zrobić. Czy badałeś tworzenie zależności jawnego zadania, gdzie zadania kompilacji w LA zależą od fazy generowania zasobów LB i na odwrót? Klasa 'R' jest generowana przed skompilowaniem twojego źródła, więc nie rozumiem, dlaczego coś takiego nie działałoby. – dcow

+0

@DavidCowden wszystkie rzeczy Java działa dobrze. Mój problem jest związany z identyfikatorami zasobów. Wygląda na to, że mogę odwoływać się do identyfikatorów zasobów bibliotecznych tylko z projektu aplikacji, a nie z innych projektów bibliotecznych. Podejrzewam, że ma to coś wspólnego z identyfikatorami zasobów, które nie są stałe, ale zmieniają się po kompilacji. – Jeroen

0

Jeśli używasz do tego problemu budynku w Android Studio/IDEA, nie zapomnij, aby zaznaczyć pole wyboru library na modułach bibliotecznych w ustawieniach projektu.

Spróbuj także użyć innej wersji wtyczki dla Androida, np. 0.8+. I jeszcze jedna myśl: nie było, a może są jeszcze inne problemy z wtyczką Android i 7 java, jeśli go używasz, spróbuj użyć 6.

1

Podejmując przykład "2 projektów bibliotecznych LA i LB i LB zależy od LA "oto kilka przykładów roboczych.

Powiedzmy LA ma następujący plik strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="la_resource">la resource</string> 
</resources> 

Powiedzmy LB ma następujący plik strings.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="lb_resource">lb resource</string> 
</resources> 

Powiedzmy chcemy zdefiniować widok niestandardowy w nazwie TestView FUNT. TestView odniesie się do la_resource z LA i lb_resource z LB. Oto źródło TestView

package com.example.myapplication3.lb; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.TextView; 

public class TestView extends TextView { 
    public TestView(Context context) { 
     super(context); 
     setText(context.getString(R.string.la_resource) + " " + context.getString(R.string.lb_resource)); 
    } 

    public TestView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     setText(context.getString(R.string.la_resource) + " " + context.getString(R.string.lb_resource)); 
    } 

    public TestView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     setText(context.getString(R.string.la_resource) + " " + context.getString(R.string.lb_resource)); 
    } 
} 

Załóżmy, że chcemy zdefiniować inny niestandardowy widok o nazwie TestView2 w LB. TestView2 nadyma układ XML. Układ XML odwoła się do la_resource z LA i lb_resource z LB. Oto źródło TestView2

package com.example.myapplication3.lb; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.widget.FrameLayout; 
import android.widget.TextView; 

import org.w3c.dom.Text; 

public class TestView2 extends FrameLayout { 
    public TestView2(Context context) { 
     super(context); 
     LayoutInflater.from(context).inflate(R.layout.test_view_2, this); 
    } 

    public TestView2(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     LayoutInflater.from(context).inflate(R.layout.test_view_2, this); 
    } 

    public TestView2(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     LayoutInflater.from(context).inflate(R.layout.test_view_2, this); 
    } 
} 

I tu jest źródło test_view_2.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/la_resource" 
     android:padding="4dp" /> 

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

</LinearLayout> 
Powiązane problemy