标签: android-maven-plugin

使用android-maven-plugin未将本机库附加到APK

我正在尝试使用Maven构建我的Android应用程序.我使用的是android-maven-plugin版本3.0.2(已经尝试过3.0.0).一切顺利,但我的/ libs文件夹中的.so文件没有附加.文件夹结构如下:

-android
--src
--assets    
--res
--libs
----armeabi
----armeabi-v7a
Run Code Online (Sandbox Code Playgroud)

我正在关注其中一个本机库示例中给出的pom.xml .APK编译很好,除了我称之为本机函数的部分之外几乎所有内容都运行.

从样本看,它看起来不像需要做任何事情.我感觉只有一个这样的文件被附加.有没有其他人遇到同样的问题?

android maven android-maven-plugin

5
推荐指数
1
解决办法
1138
查看次数

使用Maven时,在Eclipse中更改Android R.java的输出文件夹

我有一个使用maven-android插件的android项目设置.此插件遵循maven输出文件夹以获取文件的位置R.java(即target/generated-sources/r).

但是,在Eclipse中使用此项目时,我无法配置aapt依赖该文件夹.

即使我手动进入项目属性并手动设置文件夹,ADT插件也会进入并重置一些设置(即将/gen文件夹添加回源文件夹,并将输出文件夹还原/bin/classes/target/classes),而离开maven /target/generated-sources/r文件夹并打破项目的构建.

我想在Eclipse ADT中使用默认的Maven文件夹结构.有关如何做到这一点的任何想法?

谢谢


回应评论:

  • 是的,我正在使用m2e-android插件.
  • 由于ADT仍在生成R.java /gen,因此如果target/generated-sources/r由于重复的类定义而仍然存在R.java ,则Eclipse无法编译.

java android m2eclipse maven android-maven-plugin

5
推荐指数
1
解决办法
3330
查看次数

将android ndk依赖项部署到Maven存储库

我有一个依赖第三方,仅二进制JNI库的android项目。使用ant,我可以将.so放到libs /中,将标头放到jni /中,然后完成。

但是,我的其余android项目都使用maven,并且我希望能够将此库集成到我现有的基于maven的项目中,就像我使用任何其他库一样(例如,带有<dependency />条目,库是从公司服务器自动下载的) 。

我曾尝试使用手动上传的.so文件,mvn deploy:deploy-file-Dpackaging=so-Dclassifier=armeabi,和在一个zip上传的标题和使用部署-Dpackaging=har。但是NDK仍然无法检测到库和标头。

我的Android.mk是

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_LDLIBS := -llog
LOCAL_SHARED_LIBRARIES := my-dependency
LOCAL_SRC_FILES := test.cpp
include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

和我pom中的依赖

<dependency>
    <groupId>com.thirdparty.my-dependency</groupId>
    <artifactId>my-dependency</artifactId>
    <version>1.0</version>
    <classifier>armeabi</classifier>
    <type>so</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在Android的Maven中部署这样的第三方库的最佳方法是什么?

maven android-ndk android-maven-plugin

5
推荐指数
1
解决办法
645
查看次数

添加google-play-services后,您需要在此活动中使用Theme.AppCompat主题(或后代)

在我正在开发的应用程序(这是我的第一个Android应用程序)中,我使用android-maven-plugin和maven-android-sdk-deployer.应用程序运行良好(使用ActionBarActivity的MainActivity已正确显示),直到我添加了google-play-servies库.之后我得到以下异常(除了向pom.xml添加必需的依赖项外,应用程序没有任何更改):

E/AndroidRuntime( 2146): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.acts.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
E/AndroidRuntime( 2146):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
E/AndroidRuntime( 2146):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
E/AndroidRuntime( 2146):    at android.app.ActivityThread.access$800(ActivityThread.java:144)
E/AndroidRuntime( 2146):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
E/AndroidRuntime( 2146):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 2146):    at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime( 2146):    at android.app.ActivityThread.main(ActivityThread.java:5221)
E/AndroidRuntime( 2146):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime( 2146):    at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime( 2146):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
E/AndroidRuntime( 2146):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
E/AndroidRuntime( 2146): Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or …
Run Code Online (Sandbox Code Playgroud)

android android-appcompat google-play-services android-maven-plugin

5
推荐指数
2
解决办法
8385
查看次数

android-maven-plugin和资源过滤

我是maven的新手并试图配置它用android-maven-plugin构建我的android项目.我在assets目录中有一个application.properties文件,其中包含不同的应用程序设置.我想从我的pom中获取这些价值.在属性文件中,我将一个属性定义为

myFilteredProperty=${helloFromPOM}
Run Code Online (Sandbox Code Playgroud)

并在POM中定义相同的属性:

    <properties>
        <helloFromPOM>MY PROPERTY</helloFromPOM>
    </properties>
Run Code Online (Sandbox Code Playgroud)

切换资产dir上的过滤

<build>
    ...
    <resources>
        <resource>
            <directory>${project.basedir}/assets</directory>
            <filtering>true</filtering>
        </resource>
    </resources>
    ...
</build>
Run Code Online (Sandbox Code Playgroud)

并为android-maven-plugin的示例配置recources 插件

        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                <execution>
                    <phase>initialize</phase>
                    <goals>
                        <goal>resources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

但是当我试图在我的应用程序中使用此属性显示Toast时,我看到$ {helloFromPOM}而不是MY PROPERTY.

在我的maven生成的目标目录中,我在两个地方看到这个属性文件:

  • /target/generated-sources/combined-assets/assets/application.properties
  • /target/myapp-0.0.1-SNAPSHOT.apk\application.properties

首先是错误的,它包含$ {helloFromPOM}而不是MY PROPERTY.其次,apk文件内部是正确的.但是当我在设备上安装这个apk时,它显示错误的值$ {helloFromPOM}.

我做错了什么?

编辑

谢谢你的回答,我尝试了,但得到这个错误:

[ERROR]生成源时出错.org.apache.maven.plugin.MojoExecutionException:在com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:338)在com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.execute( GenerateSourcesMojo.java:102)在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)在org.apache .maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)在org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder .buildProject(LifecycleModuleBuilder.java:84)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)在org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183 )org.apache.maven.lifecycle.internal.LifecycleS tarter.execute(LifecycleStarter.java:161)org.apache.maven.maven.DefaultMaven.doExecute(DefaultMaven.java:320)org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)atg.apache.maven .cli.MavenCli.execute(MavenCli.java:537)org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)org.apache.maven.cli.MavenCli.main(MavenCli.java:141 )在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)在java.lang.reflect中.方法.invoke(Method.java:597)org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java: 230)org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)org.codehaus.classworlds .Launche r.main(Launcher.java:47)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25)at java.lang.reflect.Method.invoke(Method.java:597)at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)引起:com.jayway.maven.plugins .android.ExecutionException:ANDROID-040-001:无法执行:Command = cmd.exe/X/C""C:\ Program Files\Android\android-sdk\platform-tools\aapt.exe"package -m - JD:\ projects\myapp\target\generated-sources\r -MD:\ projects\myapp\AndroidManifest.xml -SD:\ projects\myapp\target\filtered-assets --auto-add-overlay -AD:\ projects\myapp\assets -I"C:\ Program Files\Android\android-sdk\platforms\android-8\android.jar"",结果= 1在com.jayway.maven.plugins.android.CommandExecutor …

android maven maven-resources-plugin android-maven-plugin

4
推荐指数
1
解决办法
8199
查看次数

使用Android应用程序,Maven和Eclipse开发库的NoClassDefFoundError

我正在开发一个Android库(SiriRestClient),其工件通过Maven进行管理,我正在使用Eclipse进行开发.我将工件打包为JAR文件,因为我在项目中没有任何资产,只有Java类,并且存在使用Eclipse/Maven/ADT将包装工件打包为apklibs的问题.

我还在开发一个依赖于SiriRestClient库的Android用户界面应用程序(SiriRestClientUI).我通过Maven管理对SiriRestClient库的依赖.

两个项目都在Eclipse中独立构建和部署.

问题:

自从我开始通过Maven管理SiriRestClient库对SiriRestClient库的依赖,如果我在Eclipse中同时打开了库项目和SiriRestClientUI,那么NoClassDefFoundError当我尝试将SiriRestClientUI应用程序部署到设备时,我会得到一个.

例如:

11-01 16:11:52.288: E/AndroidRuntime(9409): java.lang.NoClassDefFoundError: edu.usf.cutr.siri.android.client.config.SiriJacksonConfig
11-01 16:11:52.288: E/AndroidRuntime(9409):     at edu.usf.cutr.siri.android.ui.MainActivity.onCreate(MainActivity.java:100)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.Activity.performCreate(Activity.java:4470)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.access$600(ActivityThread.java:128)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.os.Looper.loop(Looper.java:137)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at android.app.ActivityThread.main(ActivityThread.java:4514)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at java.lang.reflect.Method.invokeNative(Native Method)
11-01 16:11:52.288: E/AndroidRuntime(9409):     at java.lang.reflect.Method.invoke(Method.java:511) …
Run Code Online (Sandbox Code Playgroud)

eclipse android adt maven android-maven-plugin

4
推荐指数
1
解决办法
1450
查看次数

Maven发布:执行无法识别密钥库参数

我使用android-release archetype生成了我的项目.
在其文档中指示在文件中添加android-release配置settings.xml文件.

~/.m2/settings.xml看起来像这样:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
  http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <profiles>   
    <profile>
      <id>android-release</id>
        <properties>
            <sign.keystore>absolute path</sign.keystore>
            <sign.alias>my_alias</sign.alias>
            <sign.storepass>pass</sign.storepass>
            <sign.keypass>pass</sign.keypass>
        </properties>
    </profile>
  </profiles>
</settings>
Run Code Online (Sandbox Code Playgroud)

我的父pom.xml文件几乎与原型(版本1.0.8)生成的文件相同:

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>myapp-android</groupId>
    <artifactId>myapp-android-parent</artifactId>
    <version>1.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>myapp-android - Parent</name>

    <modules>
        <module>myapp-android</module>
        <module>myapp-android-it</module>
    </modules>

    <scm>
        <url>....</url>
        <connection>....</connection>
        <developerConnection>....</developerConnection>
        <tag>HEAD</tag>
    </scm>

    <properties>
        <platform.version>4.1.1.4</platform.version>
        <android.dex.optimize>false</android.dex.optimize>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <repositories>
        <repository>
            <id>ignition-releases</id>
            <url>http://nexus.qype.com/content/repositories/releases</url>
        </repository>
        <repository>
            <id>central</id>
            <url>http://repo1.maven.org/maven2</url>
        </repository>
        <repository>
            <id>com.jakewharton</id>
            <url>http://r.jakewharton.com/maven/release</url>
        </repository>
    </repositories>

    <dependencyManagement>
        <dependencies> …
Run Code Online (Sandbox Code Playgroud)

android jarsigner maven maven-archetype android-maven-plugin

3
推荐指数
1
解决办法
2187
查看次数

可以在Eclipse中重新定位AndroidManifest.xml对ADT插件的支持

我正在尝试使用以下方法开发Android应用程序:

Eclipse的月神4.4.0最新的ADT插件(https://dl-ssl.google.com/android/eclipse/)的Maven + Android的Maven的插件4.0.0-rc.2

在Eclipse IDE中,如果AndroidManifest.xml和res文件夹位于android项目的根目录中,一切正常.但是,如果这两个不在android项目的根目录中,则会显示错误,指出缺少这些文件.

有没有办法,在ADT插件中配置AndroidManifest.xml和res文件夹的位置?基本上,我想将它移动到src/main目录.

原因是,因为android-maven-plugin ver 4.x要求AndroidManifest.xml和res文件夹应该在src/main目录中,否则它不会构建.有没有办法在android-maven-plugin 4.x ++中配置AndroidManifest.xml和res文件夹的位置?

android maven eclipse-adt android-maven-plugin

3
推荐指数
1
解决办法
1255
查看次数

从android资产打开wav文件时出现FileNotFoundException

在我们的Android应用程序中,我们打开位于assets/config/notification.wav中的wav文件.要打开并播放声音,我们使用以下代码:

String soundClipPath = "config/notification.wav"
AssetFileDescriptor afd = mContext.getAssets().openFd(soundClipPath);
int soundID = mSoundPool.load(afd, 1);
Run Code Online (Sandbox Code Playgroud)

这已经解决了大约一年的任何问题.突然间,这已停止工作了.我们还没有更新构建之间的任何依赖关系.我能找到的唯一区别是,构建工作是从去年开始.如果我们在netbeans中本地构建apk,但是当我们使用hudson构建apk时它不起作用.我试过以下没有运气:

  • 将wav文件放在res/raw文件夹中
  • 添加-0到maven android插件
  • 验证了文件结构,文件在那里工作.

使用上面的代码时,我们得到以下stacktrace:

java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed
at android.content.res.AssetManager.openAssetFd(Native Method)
at android.content.res.AssetManager.openFd(AssetManager.java:331)
...
Run Code Online (Sandbox Code Playgroud)

尝试从res/raw文件夹加载时,以下内容:

android.content.res.Resources$NotFoundException: File res/raw/notification.wav from drawable resource ID #0x7f040000
at android.content.res.Resources.openRawResourceFd(Resources.java:981)
at android.media.SoundPool.load(SoundPool.java:191)
...
Run Code Online (Sandbox Code Playgroud)

有人可以帮我们解决这个奇怪的问题....

最好的祝福,

亨里克

android filenotfoundexception android-assets android-maven-plugin

2
推荐指数
1
解决办法
1743
查看次数

Maven无法识别测试范围内的apklib依赖项

所以我在我编写的模块中有一些类来帮助进行Robolectric样式单元测试,我希望能够在一堆其他模块中共享这个模块.这个模块有自己的单元测试,我把它设置为apklib.我正在使用maven-android-plugin.问题似乎是它不能识别测试范围内的apklibs.有没有解决方法,或者我错过了什么?

我注意到的一件事是,如果我运行命令mvn install,所有构建和我的所有测试运行正常,但如果我这样做mvn test说它找不到类.

android unit-testing maven android-maven-plugin

1
推荐指数
1
解决办法
715
查看次数

如何检查阶段期间调用的maven目标

我配置了一些插件目标,在我的构建生命周期的某些阶段(maven android应用程序)中执行.但我认为我在配置插件时遇到了一个错误,并希望确保它们真正被调用.我发现这个命令将打印所有生命周期阶段和目标:mvn help:describe -Dcmd=install但它没有显示我配置的目标.因此,我有两个问题:

  • mvn help:describe -Dcmd=install命令是否显示我在<build>/<plugins>/<plugin>/<executions>/<execution> pom标签内配置的目标?

  • 如何确保在构建生命周期中调用阶段和阶段期间调用的目标?

更新 我正在尝试配置maven-android-plugin并希望在包阶段执行zipalign目标

        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.2.0</version>
            <extensions>true</extensions>
            <configuration>
                <sdk>
                    <platform>8</platform>
                </sdk>
                <emulator>
                    <avd>2.3.3_API-10</avd>
                </emulator>
                <undeployBeforeDeploy>true</undeployBeforeDeploy>
                <assetsDirectory>${project.build.directory}/filtered-assets</assetsDirectory>
                <androidManifestFile>${project.build.directory}/filtered-manifest/AndroidManifest.xml</androidManifestFile>
                <zipalign>
                    <skip>false</skip>
                    <verbose>${build.verbosity}</verbose>
                    <inputApk>${project.build.directory}/${project.artifactId}-${build.version.name}.apk</inputApk>
                    <outputApk>${project.build.directory}/${project.artifactId}-${build.version.name}-aligned.apk</outputApk>
                </zipalign>
            </configuration>
            <executions>
                <execution>
                    <id>zipalign</id>
                    <phase>package</phase>
                    <goals>
                        <goal>zipalign</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

android maven-plugin maven android-maven-plugin

0
推荐指数
1
解决办法
1288
查看次数