Maven和Android Facebook SDK apklib
因此,我正在开发facebook android sdk,以将其包含在我们的CI流程中 facebook/pom.xml:Maven和Android Facebook SDK apklib,android,maven,facebook-android-sdk,pom.xml,android-maven-plugin,Android,Maven,Facebook Android Sdk,Pom.xml,Android Maven Plugin,因此,我正在开发facebook android sdk,以将其包含在我们的CI流程中 facebook/pom.xml: <?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:/
<?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>com.facebook.android</groupId>
<artifactId>facebook-android-sdk</artifactId>
<version>3.0.0-SNAPSHOT</version>
<name>facebook-android-sdk</name>
<packaging>apklib</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>4.1.1.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
<version>r7</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
<assetsDirectory>ignored</assetsDirectory>
<resourceDirectory>${project.basedir}/res</resourceDirectory>
<nativeLibrariesDirectory>ignored</nativeLibrariesDirectory>
<sdk>
<platform>16</platform>
</sdk>
</configuration>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>maven-replacer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<ignoreMissingFile>false</ignoreMissingFile>
<file>target/generated-sources/r/com/facebook/android/R.java</file>
<outputFile>target/generated-sources/r/com/facebook/android/R.java</outputFile>
<regex>false</regex>
<token>static final int</token>
<value>static int</value>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<type>jar</type>
<file>${project.build.directory}/${project.build.finalName}.jar</file>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
在Intellij中构建和运行效果很好,没有问题,它会提取依赖项并添加到正确的位置
问题 当我通过Maven Travis CI命令运行时,这些命令是:
mvn install -DskipTests=true
然后:
由于缺少类(即facebook类),测试将失败。似乎在尝试通过maven进行安装和测试时,它没有正确地引入facebook android sdk
那么,在构建依赖关系时是否存在问题,或者在它尝试运行mvn测试之前是否需要运行另一个magic maven命令
facebook fork在此处可用:只需运行即可
mvn clean install
这样,它将运行测试,一切正常
顺便说一句,我的github帐户上有一个完全专业化的facebook sdk,网址是
看来我的apklib pom.xml很好!不好的是我的APK pom.xml。从旧编译器版本到新编译器版本似乎存在向后兼容性问题。 只是我改变了:
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.3</version>
<configuration>
<sdk>
<platform>${android.platform}</platform>
</sdk>
</configuration>
</plugin>
com.jayway.maven.plugins.android.generation2
安卓maven插件
3.3
${android.platform}
致:
com.jayway.maven.plugins.android.generation2
安卓maven插件
3.4.1
${android.platform}
它神奇地开始工作了!
经验教训:dep/插件管理非常方便 您可以使用创建的可用Maven存储库来托管最新facebook android api的Maven端口:
最初的项目布局非常糟糕,TestApp/和tests/这两个测试项目被放在库项目facebook/下,是的,这是开发指南推荐的,但不是Maven式的。如果你真的需要它们,你也需要将这两个测试项目变为mavenize,并将它们重新组织为一个多模块项目,也就是说,将它们拉出来,使它们与库项目处于同一级别,都在父项目下。是的,我真的不需要它们。只需要sdk部分。然后您可以简单地删除或保留它们,请注意,Mavenized Android项目中的测试阶段是专门设计的,绑定到测试项目,一般来说,在纯应用程序或库项目上运行
mvn test
,除了编译之外可能什么都不做。是的,我已经删除了它们,是的,我不希望它在lib上运行测试,只希望它包含在我的应用程序测试阶段。虽然编译/安装似乎已经完成,但它似乎还是失败了。这很奇怪。当maven再次开始为我提供文件时,我会添加错误。@yorkw看到我的答案了,似乎与我的apk pom有关,而不是apklib。尝试过了,你的SDK也过时了,Facebook SDK更新到了版本3。我知道。。我现在不需要更新它,也没有时间推动facebook将工件实际推送到中央存储库中。我试着认为它们是非常无用的,糟糕的代码和项目设置+不了解资源,不管怎样,都是离题的。还有其他建议吗?或者你能试试看是否能帮你编译吗?我甚至有rm-rf存储库/
我的本地存储库都不走运。谢谢你这么做!我有点麻烦-它没有生成BuildConfig.java文件,给了我[ERROR]类实用工具[ERROR]target/unpack/apklibs/com.github.avianey_facebook-android-api_apklib_3.0.1/src/com/facebook/Settings.java:[145,19]错误:找不到符号。我必须手动将生成的BuildConfig.java文件添加到源代码中,然后重新打包apklib。有点不靠谱,但它奏效了。facebook现在正在推动Maven Central的官方LIB:伟大的解决方案!谢谢我得到这个错误:“找不到工具aapt。请提供正确的Android SDK目录路径作为配置参数”。通过将插件版本更改为3.6.0修复了此问题,建议如下:
mvn clean install
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.3</version>
<configuration>
<sdk>
<platform>${android.platform}</platform>
</sdk>
</configuration>
</plugin>
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<sdk>
<platform>${android.platform}</platform>
</sdk>
</configuration>
</plugin>