APICloud是使用标准Web技术开发iOS、Android原生App的一个平台。SuperWebview是APICloud官方推出的另一项重量级API生态产品,以SDK方式提供,致力于提升和改善移动设备Webview体验差的整套解决方案。
本文主要对SuperWebview的使用过程及可能遇到的问题作简要讨论。
1. 既然是要融合Android原生,首先就要有一个Android工程,我们要先创建一个Android工程,这里我使用的是Android Studio作为开发工具,创建的具体步骤在这就不展开讨论了,创建完成后如下图所示。
2. 在APICloud的应用控制台中生成对应应用的SDK,具体的操作步骤请参考https://docs.apicloud.com/Dev-Guide/SuperWebview-guide-for-android,我们下载该SDK并解压得到的目录结构如下所示,我们只需关心SDK/lib目录下的内容即可。
3. 首先我们将SDK/lib/libs目录下的所有文件拷贝到我们的Android工程的libs目录下
4. 先选中libs下所有jar包,单击右键,点击Add as Library,把jar包添加到资源库
ndk{ abiFilters 'armeabi-v7a', 'armeabi' ,'x86' }
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
allprojects { repositories { mavenCentral() } }
6. 在build.gradle中注释掉com.android.support-v4/7相关的资源包,并添加对应的配置
configurations { all*.exclude group: 'com.android.support', module: 'support-v13' }
7. 将解压得到的SDK/lib/res下的部分资源文件拷贝到Android工程的资源目录下,注意不要拷贝values文件夹,因为拷贝该文件夹会发生文件冲突
然后将SDK/lib/res/values下的colors.xml、strings.xml、styles.xml(若有这三个文件的话)里面的内容手动拷贝到Android工程的src/main/res/values下的colors.xml、strings.xml、styles.xml中去,然后将SDK/lib/res/values下其他的.xml文件拷贝到Android工程的src/main/res/values下,最终结果如下图所示
8. 将SDK/lib/AndroidManifest.xml的内容拷贝到Android工程的AndroidManifest.xml文件中去,拷贝内容为下图所示
9. 若Android工程里没有Application类,则手动创建一个Application类,并在AndroidManifest.xml中指向该Application类,然后重写其onCreate方法,在onCreate方法中对APICloud进行初始化,如下图所示
//初始化APICloud,SDK中所有的API均需要初始化后方可调用执行 APICloud.initialize(this);
10. 对加载SuperWebView的Activity进行配置,让其集成APICloud提供的ExternalActivity类,并在AndroidManifest.xml对该Activity进行配置,这里我们使用首启动的Activity作为加载SuperWebView的Activity类,配置如下图所示
11. 我们在Android工程中创建assets/widget文件夹,我们将写好的APICloud的H5代码拷贝到该文件夹,并给config.xml添加修饰头,如下图所示
至此我们的APICloud SuperWebView融合Android原生的工作已经完成
1. Q:遇到java.io.IOException: Cleartext HTTP traffic to * not permitted
A:这是由于Android 8禁止使用http协议做数据传输,我们需要在src/main/res/xml下创建network_security_config.xml文件,并添加以下内容,并且在AndroidManifest.xml中的application标签做以下配置
android:networkSecurityConfig="@xml/network_security_config"
2. Q:Only fullscreen activities can request orientation错误
A:在SuperWebView的Activity的theme中将android:windowIsTranslucent属性改为false
3. Q:not find xxxx.so错误
A:在build.gradle文件中的android标签下的defaultConfig标签中添加以下代码
ndk{ abiFilters 'armeabi-v7a', 'armeabi' ,'x86' }