最近使用maven自动构建android的签名apk包(配合hudson),遇到几个问题跟大家分享下:
1、使用maven-android-plugin可以很容易实现自动构建,但基于命令行的方式有别与eclipse的打包方式
2、编译时出现非法字符的错误
1
*.java:[1,0] 非法字符: \65279
说明某些文件采用UTF-8的时候写入了BOM的头信息,eclipse采用jdt会自动处理这些头信息但maven直接调用javac没有那么智能了,首先找找那些文件
1
#查找BOM
2
find -type f -name "*.java"|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done
使用vim自动去除bom
1
去掉utf-8 BOM
2
:set nobomb
3、打包是出现无法签名的情况
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>signing</id>
<goals>
<goal>sign</goal>
</goals>
<phase>package</phase>
<inherited>true</inherited>
<configuration>
<archiveDirectory></archiveDirectory>
<includes>
<include>target/${artifactId}.apk</include>
</includes>
<keystore>${keyFilePath}</keystore>
<storepass>${storePassword}</storepass>
<keypass>${keyPassword}</keypass>
<alias>${keyAlias}</alias>
</configuration>
</execution>
</executions>
</plugin>
alias必须与生成签名文件时的条目一致
4、签名之前必须保证apk生成的时候没有使用debug签名,不然会提示
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 15331 but got 15809 bytes)
必须定义maven的android插件信息
<configuration>
<sdk>
<path>${env.ANDROID_HOME}</path>
<platform>7</platform>
</sdk>
<sign>
<debug>false</debug>
</sign>
<deleteConflictingFiles>true</deleteConflictingFiles>
</configuration>
5、至此使用一条命令 mvn clean package就可以自动编译打包了
下面是完整的配置
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxxx.gcl</groupId>
<artifactId>xxxx</artifactId>
<version>2.1.2</version>
<packaging>apk</packaging>
<name>xxxxxx</name>
<dependencies>
<dependency>
<groupId>com.google.android</groupId>
<artifactId>android</artifactId>
<version>2.1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>com.autonavi</groupId>
<artifactId>mapapi</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>
com.jayway.maven.plugins.android.generation2
</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<sdk>
<path>${env.ANDROID_HOME}</path>
<platform>7</platform>
</sdk>
<sign>
<debug>false</debug>
</sign>
<deleteConflictingFiles>true</deleteConflictingFiles>
</configuration>
<extensions>true</extensions>
<inherited>true</inherited>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>signing</id>
<goals>
<goal>sign</goal>
</goals>
<phase>package</phase>
<inherited>true</inherited>
<configuration>
<archiveDirectory></archiveDirectory>
<includes>
<include>target/${artifactId}.apk</include>
</includes>
<keystore>${keyFilePath}</keystore>
<storepass>${storePassword}</storepass>
<keypass>${keyPassword}</keypass>
<alias>${keyAlias}</alias>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<keyFilePath>xxxxxxx</keyFilePath>
<storePassword>xxxx</storePassword>
<keyPassword>xxxx</keyPassword>
<keyAlias>xxxxx</keyAlias>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<keyFilePath>xxxxx</keyFilePath>
<storePassword>xxxxx</storePassword>
<keyPassword>xxxx</keyPassword>
<keyAlias>xxxxxx</keyAlias>
</properties>
</profile>
</profiles>
</project>
分享到:
相关推荐
Android Maven 插件是将Android项目与Maven构建系统集成的一种工具。在传统的Android开发中,我们通常使用Gradle作为构建系统,但Maven在Java领域有着广泛的应用,因此对于那些习惯于Maven或者需要利用Maven生态的...
5. **依赖管理**: Maven通过`<dependencies>`标签管理项目依赖,允许开发者声明需要的库及其版本,Maven会自动解决依赖冲突并下载所需库。 6. **生命周期与插件**: Maven具有定义好的构建生命周期(如compile、test...
《Android Maven 插件:构建Android应用的利器》 在Android应用程序开发中,Maven作为流行的构建管理系统,为开发者提供了强大的依赖管理和项目构建功能。"android-maven-plugin"是专门为Android应用开发定制的一款...
综上所述,"Android-apk自动打包上传"涉及到了Android应用开发中的Gradle构建、自动化脚本编写、签名、上传以及CI/CD集成等多个知识点。通过理解和掌握这些,开发者可以大幅提升工作效率,让应用发布变得更加便捷。
- 确保你的APK已经成功构建并签名。如果使用的是调试版本,确保`signingConfig`指向的是`debug`签名配置;如果是发布版本,应指向`release`。 - 为了安全起见,不要在版本控制中暴露你的蒲公英API key和app key。...
7. **应用场景**:这个工具对于开发者、自动化构建系统(如Gradle、Maven)或者持续集成/持续部署(CI/CD)流程都非常有用。它能确保所有应用都使用同一签名,便于管理权限和更新。 总的来说,"android批量签名源码...
- 在`pom.xml`文件中,添加微信SDK的依赖,指定版本号,这样Maven会在构建时自动下载并引入SDK库。 - 配置Maven的`build`部分,确保签名过程能够正确执行,如添加`<signing>`标签来配置签名信息。 3. **Eclipse...
3. 依赖管理:通过<dependency>标签,Ant可以与其他构建系统(如Maven)配合,管理项目依赖。 总结,Apache Ant是一个强大的构建工具,尤其在Android开发中,它简化了应用的构建和打包流程。正确安装配置Ant后,...
- 构建aar包:点击菜单栏的`Build` -> `Generate Signed Bundle / APK`,选择`Library Bundle`,然后按照向导完成签名过程。 2. **发布aar包**: - 生成的aar文件通常位于`app/build/outputs/aar/`目录下,例如本...
综合以上信息,这个开源项目提供了一个用Java实现的Android应用超级签名和分发系统,它使用了Eclipse作为开发环境,并通过Maven进行构建和依赖管理。源码的开放性使得开发者可以深入学习签名和分发的机制,同时也...
1. **构建工具**:通常我们会使用Maven或Gradle作为项目构建工具,它们具有强大的插件系统,可以自定义打包流程。通过编写相应的插件或者扩展脚本,可以实现一键打包功能。 2. **渠道配置**:每个渠道通常需要一个...
在编写自动打包脚本之前,需要确保开发环境已经正确配置,包括安装必要的编程语言环境(如Java, Python, 或者Swift等)、构建工具(如Gradle, Maven, 或Xcode等),以及打包工具(如IPA Builder for iOS或APK打包...
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言来声明项目设置,比传统的XML方式更加简洁、灵活。Gradle广泛应用于Android开发中,用以管理应用的构建生命...
《Gradle for Android》是一本专门针对Android开发者编写的指南,旨在帮助他们理解和掌握在Android开发中使用Gradle构建系统的基础知识和高级技巧。Gradle是一种强大的自动化构建工具,广泛应用于各种软件项目,包括...
《Android开发中的Gradle插件...了解并掌握其特性,对于提升Android项目的构建效率和优化APK性能有着至关重要的作用。同时,通过分析gradle缓存文件,我们可以更深入地理解Gradle插件的工作机制,为日常开发提供便利。
Android构建系统是Android操作系统开发中的核心部分,负责将源代码编译、链接并打包成可执行文件或APK应用。由于其复杂性,理解和掌握这一系统对于Android开发者来说至关重要。以下是对Android构建系统的详细解析: ...
3. **签名和发布**:插件提供自动签名和发布到Maven仓库的功能,简化了Android库的发布流程。 4. **资源处理**:处理Android项目的资源文件,如图片、XML等,并将其打包进apk或aar。 5. **依赖管理**:自动管理...
当所有设置完成后,通过执行`Build > Build Bundle(s)/APK(s) > Build AAR`命令,Android Studio会生成名为`Aar4Example.aar`的文件,位于`app/build/outputs/aar/`目录下。 使用AAR库时,将其作为依赖项添加到目标...
Android Studio中的Gradle是一个强大的构建工具,用于自动化Android应用程序的构建过程。Gradle与Android Studio紧密结合,使得开发者能够更高效地管理和构建项目。在“Android gradle-3.4.1-all.zip”这个压缩包中...