appcan-android
appcan-android引擎
QQ交流群:173758265
生成引擎包步骤:
新建Android Studio工程Engine_AppCan
clone 引擎代码到工程Engine_AppCan
git clone https://github.com/AppCanOpenSource/appcan-android.git
编辑工程根目录下的settings.gradle,在下面添加一行:
include ':appcan-android:Engine'
按需修改引擎代码
编辑appcan-android/en_baseEngineProject/androidEngine.xml里面的description信息,其他的不要改动
在Android Studio自带的Terminal输入
gradle buildEngine
编译完成后,生成的引擎包在appcan-android/Engine/build/outputs/engine目录下
目录结构
├── Engine
│ ├── Engine.iml
│ ├── build
│ ├── build.gradle
│ ├── libs 公用lib
│ ├── proguard.pro 混淆文件
│ ├── project.properties
│ └── src
├── LICENSE
├── README.md
├── appcan-android.iml
├── en_baseEngineProject
│ ├── WebkitCorePalm
│ └── androidEngine.xml
└── gradle-plugin
└── appcan-build-engine.jar
Engine:引擎工程,该工程的最终作用就是生成引擎的jar
当有除了java代码之外的改动,如添加图片资源,添加或修改布局文件,都需要同步改动到WebkitCorePalm(重要)
en_baseEngineProject/WebkitCorePalm:最终打包使用的工程,除了上面说的需要从Engine工程同步的内容,其他信息不要改动,
Engine/build:目录结构如下
├── appcan
│ ├── crosswalk
│ ├── x5
│ └── system
├── generated
├── intermediates
├── outputs
│ ├── engine
│ ├── jar
│ ├── aar
│ ├── logs
│ └── mapping
└── tmp
appcan:生成引擎时产生的临时文件
outputs/engine:引擎输出目录
outputs/jar:Enginemoudle编译出来的jar,以-un-proguard.jar结尾的为未混淆的jar,其他为混淆过的jar
outputs/aar:Enginemodule生成的aar
关于混淆
混淆文件为:appcan-android/Engine/proguard.pro
混淆只用于混淆Engine中的java文件 排除混淆
排除混淆
提供给JS调用的接口,请在方法添加@AppCanAPI注解,混淆时会排除
提供给插件调用或不希望被混淆的,请添加@Keep注解,混淆时会排除
AppCan Gradle插件
一般情况下生成引擎只需要调用gradle buildEngine 就可以生成所有的引擎包,如果有其他需要可以调用其他的task。目前提供的task有:
build{Flavor}Engine:生成对应flavor的引擎
如输出crosswalk引擎
gradle buildCrosswalkEngine
输出所有flavor的引擎
gradle buildEngine
build{Flavor}JarTemp:生成对应flavor的jar,不进行混淆
如输出crosswalk引擎的jar
gradle buildCrosswalkJarTemp
如果要输出所有flavor的jar
gradle buildJarTemp
build{Flavor}Jar:生成对应flavor的jar,并且进行混淆
如输出混淆过的crosswalk引擎jar
gradle buildCrosswalkJar
如果要输出所有flavor的jar
gradle buildJar
build{Flavor}Aar:生成对应flavor的aar
如输出混淆过的System引擎aar
gradle buildSystemAar
如果要输出所有flavor的aar
gradle buildAar
说明:生成aar需要将Engine目录下的build.gradle文件中的
apply plugin: 'com.android.applicaiton'
替换成
apply plugin: 'com.android.library'
并注释掉
applicationId 'org.zywx.wbpalmstar.widgetone.uex'
已经适配到AndroidStudio3.5.0开发环境
后续更高的gradle版本,升级原理相同,本文档更新不及时的话,开发者可以自行更新工程配置。但是gradle版本更新过高可能会导致引擎出包脚本使用的gradle插件不兼容,需要等待后续进行适配。目前经过完整测试的是可以适配到3.5.0。
在3.5.0遇到Gradle插件和脚本运行出错,是因为工程中的AppCanGradle插件未做高版本的适配。有两种方式解决:
1. 降级gradle
目前,本工程的默认配置为适配AS3.5.0,Gradle版本为5.4.1,AndroidGradle构建插件版本为3.5.0。如果开发者没有升级AndroidStudio,按照以下操作降级:
修改Engine/gradle/wrapper/gradle-wrapper.properties,其中版本改为4.1;
修改build.gradle中的classpath 'org.appcan.gradle.plugins:appcan-gradle-plugin:2.3.1',其中2.3.1修改为2.2.4。
经过以上操作后,理论上可以编译通过。不过还是建议升级AS。
2. 依赖新版AppCanGradle插件
修改Engine/gradle/wrapper/gradle-wrapper.properties,其中版本改为5.4.1;
修改Engine/build.gradle文件中。其中,repositories增加一个github的maven库,dependencies中将原来的依赖本地的gradle插件改为依赖线上的,版本目前是2.3.1,可以在此仓库关注更新 https://github.com/android-plugin/mvn-repo。修改部分参考下面:
buildscript {
repositories {
google()
jcenter()
maven {
url 'https://raw.githubusercontent.com/android-plugin/mvn-repo/master/'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
// classpath fileTree(dir: '../gradle-plugin', include: '*.jar')
classpath 'org.appcan.gradle.plugins:appcan-gradle-plugin:2.3.1'
}
}
dependencies中com.android.tools.build:gradle设置为3.0.1或更高版本之后,需要在所有的repositories中增加google(),否则会找不到Android新版的官方gradle相关插件库而报错;
若buildToolsVersion改为26或更高后,还会要求修改flavor的定义,如下修改即可:
//声明flavorDimension
flavorDimensions "kernel"
productFlavors {
crosswalk {
dimension "kernel"
}
system {
dimension "kernel"
}
x5 {
dimension "kernel"
}
}
插件开发gradle依赖引擎配置
repositories中增加下面的maven地址:
repositories {
maven {
url 'https://raw.githubusercontent.com/android-plugin/mvn-repo/master/'
}
}
dependencies中增加依赖包。其中,版本号+号是指随便获取一个版本(不一定是最新版本)。如果要指定版本号,可以将+号改为4.0.0,或4.3.21等等。未来还会有更多版本。
dependencies {
implementation 'org.appcan:engine:+:systemRelease@aar'//依赖远程引擎
}