最近我开始对我的android应用程序进行maven化。我路上的一个障碍是:
在构建期间,maven插件找不到res目录中的布局中使用的drawables。
我首先使用android快速启动原型启动mavenizing:
MVN原型:generate-darchetypeartifactid=android quickstart-darchetypegroupid=de.akquinet.android.archetypes-darchetypeversion=1.0.8
然后我将所有资源复制到由archetype生成的res目录中。嗯,这应该足够了。但以下是我在MVN Clean安装后得到的信息:
[信息]——Android Maven插件:3.4.0:apk(默认apk)@missnanny Android应用程序---
[信息]将本地资产文件复制到组合资产目录。
[信息]d:\环境\android sdk\android sdk\platform tools\aapt.exe[package,-f,-m,d:\编程\myproj.com\myproj\myproj android app\myprojmanifest.xml,-s,d:\编程\myproj.com\myproj\myproj android app\res,--自动添加覆盖,-a,d:\编程\myproj.com\myproj\myproj android app\tatarget\generated sources\combinated assets\assets,-i,d:\environments\android sdk\android sdk\platforms\android-7\android.jar,-f,d:\programming\myproj.com\myproj\myproj android app\target\myproj-android-app-0.0.1-snapshot.ap
[信息]d:\programming\myproj.com\myproj\myproj android app\res\layout\layout_1.xml:8:error:error:no resource found that match the given name(at'src'with value'@drawable/image')。
我有很多这样的错误。他们都说找不到某个layout.xml文件的资源。我已经在上面的日志中更改了项目和资源的名称。真名和myproj不同。但这不重要。在mavenizing期间,我只将资源复制到了由archetype生成的res目录中。
在res文件夹中,我有:
可提取/可提取
可拉伸HDPI
可拉伸MDPI
可拉伸低密度聚乙烯
资源/布局
恢复/原始
res/值
res/值pl
我想说的是,在androidmanifest.xml中为应用程序图标加载drawable没有问题。所有问题都与drawable.xml中的布局和选择器有关。
我的POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>pl.comapny.groupid</groupId>
    <artifactId>projectid</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>appname-android-app</artifactId>
<packaging>apk</packaging>
<name>appname-android-app</name>

<properties>
    <platform.version> 2.1.2 </platform.version>
</properties>

<dependencies>

    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>${platform.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>pl.company.groupid</groupId>
        <artifactId>artifact</artifactId>
        <version>${project.version}</version>
    </dependency>

</dependencies>

<build>
    <resources>
      <resource>
         <directory>${project.basedir}/res</directory>
         <filtering>true</filtering>
      </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <!-- <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>copy-resources</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.basedir}/res</outputDirectory>
                        <resources>
                            <resource>
                                <directory>${project.basedir}/src/templates/res</directory>
                                <targetPath>${project.basedir}/res</targetPath>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions> -->
        </plugin>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.4.0</version> <!--3.4.0, 3.1.1, 3.0.0-alpha-14-->
            <configuration>
                <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                <resourceDirectory>${project.basedir}/res</resourceDirectory>
                <!-- <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory> -->
                <sdk>
                    <platform>7</platform>
                </sdk>
                <undeployBeforeDeploy>true</undeployBeforeDeploy>
            </configuration>
            <extensions>true</extensions>
        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

最佳答案

好吧,我已经设法解决了我的问题。这真是太愚蠢了。大约9个修补程序图像有问题,这些图像已损坏。这导致生成失败。看起来EclipseAndroid插件接受了标记为9补丁图片的Drawables,但事实上它们不是,并且可以完成构建…至于Maven Android插件的情况则不同。但我收到的错误信息仍然不恰当——这让我没有把注意力放在真正的问题上。我浪费了很多时间。我确信如果没有那些错误消息说“没有找到与给定名称匹配的资源”,我会更快地找到解决方案。插件应该跳过这些错误。

07-24 09:49
查看更多