赞
踩
随着移动跨平台技术的不断更新发展,weex也渐渐被性能更好的uni-app和flutter所替代
由于公司项目是基于weex搭建的,之前也做过这方面的开发,但是一段时间没做之后忘记的差不多了,这篇文章主要是讲述如何基于最新的Android Studio 2021.1.1大黄蜂版本构建weex的原始工程,当然现在已经有很多优秀的weex框架可以代替原始的工程,如基于weex并一直在维护的: eeui 框架,编写文章的目的是从官方原始工程的角度去理解weex是如何实现的
本文是基于VsCode创建的,官方的脚手架工具 Weex Studio 由于没有一直被维护,所以很拉跨,建议还是从VsCode着手。


接下来就是解决weex原始工程在高版本Android Studio 不兼容问题

maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url 'https://maven.aliyun.com/repository/central' }
maven { url 'https://maven.aliyun.com/repository/google' }
添加后结构如下:
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { maven { url 'https://maven.aliyun.com/repository/public' }//jcenter maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }//gradle-plugin maven { url 'https://maven.aliyun.com/repository/central' }//central maven { url 'https://maven.aliyun.com/repository/google' }//google mavenLocal() jcenter() mavenCentral() maven { url 'https://maven.google.com/' name 'Google' } } dependencies { //这里将2.2.2修改为3.4.0 classpath 'com.android.tools.build:gradle:2.2.2' classpath 'com.taobao.android:weexplugin-gradle-plugin:1.3' } } allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/public' }//jcenter maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }//gradle-plugin maven { url 'https://maven.aliyun.com/repository/central' }//central maven { url 'https://maven.aliyun.com/repository/google' }//google mavenLocal() jcenter() mavenCentral() maven { url 'https://maven.google.com/' name 'Google' } } } task clean(type: Delete) { delete rootProject.buildDir } subprojects { ext { compileSdkVersion=26 buildToolsVersion="26.0.0" minSdkVersion=14 appMinSdkVersion=15 targetSdkVersion=26 supportLibVersion="26.1.0" fastjsonLibVersion="1.1.46.android" } }

applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.equals('app-debug.apk')) {
def fileName = outputFile.name.replace("app-debug.apk", "weex-app.apk")
outputFileName = fileName
}
}
}





javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
}
}
在module的defaultConfig 下添加,如图:

然后点击 右上角的Sync Now 编译,编译完成后再此执行assembleDebug此时Android Studio端错误已经完美解决
由于weex官网在跳转说明的很模糊,Android端的跳转方案,官方文档并没有详细说明,对于新人来说,根本就无从下手,我也是踩坑过来的,感兴趣可以阅读源码。
<activity android:name="com.weex.app.WXPageActivity" android:label="@string/app_name" android:screenOrientation="portrait"> <!-- 添加以下intent-filter--> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="com.taobao.android.intent.category.WEEX"/> <category android:name="android.intent.category.BROWSABLE"/> <!-- 这几个根据需要可选--> <data android:scheme="http"/> <data android:scheme="https"/> <data android:scheme="file"/> <data android:scheme="wxpage" /> <data android:scheme="local" /> </intent-filter> </activity>
将WXPageActivity中的代码
if (mUri == null) {
mUri = Uri.parse(AppConfig.getLaunchUrl());
}
修改为:
if (mUri == null) {
if (uri.toString().startsWith("file:")) {
mUri = uri;
} else {
mUri = Uri.parse(AppConfig.getLaunchUrl());
}
}
这样就可以在test.vue进行页面跳转了
register(event) {
navigator.push(
{
url: 'file://assets/Register.js',
animated: 'true'
},
event => {
modal.toast({
message: 'callback:' + event
})
}
)
}
因为从Android 7.0开始,一个应用提供自身文件给其他应用使用时,如果给出一个file://格式的URI的话,应用会抛出FileUriExposedException异常,这是由于Google认为目标App可能不具有文件权限,会造成潜在的问题,所以让这一行为快速失败。解决方案,只需在Android端代码WXApplication文件的onCreate()方法中加上如下代码即可
//Android 5.0 6.0不会出现问题,但是
//Android 7.0以上,使用file:///会失败,通过这个判断去掉限制。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
}
参考文章有以下:
链接
希望这篇文章对大家有帮助.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。