安卓和h5混合开发(这里只是记录一下这几天的成果,有的逻辑自己也不太清楚,只是记录一下流程,其他的一些解释什么的等弄明白了再回来补上),这里参考的是appcan官网(吐槽一下,文档写的真不咋地)
1.新建一个安卓项目
2.修改目录结构如下

3.将html文件放到assets下,并且将官方demo中的idea文件夹和config.xml(主要目的是设置进入的主页面)拷贝过来

4.添加arr依赖(直接从官网拷贝)

5.将demo中的xml文件夹拷贝到res目录下(plugin.xml主要是对继承自EUExBase的类中的方法进行注册)

plugin.xml代码为

<?xml version="1.0" encoding="utf-8"?>
<uexplugins><plugin
        //className:项目的主类,继承EUExBase;uexName:插件名称,可以随意取className="main.java.com.ysg.myapplication.EUExMyDemo" uexName="uexDemo" >//EUExMyDemo中添加的方法<method name = "test_startActivityForResult" /></plugin>
</uexplugins>

6.配置build.gradle如下

apply plugin: 'com.android.application'android {compileSdkVersion 24buildToolsVersion "25.0.2"defaultConfig {//根据官网提示这里建议都是14minSdkVersion 14targetSdkVersion 14multiDexEnabled true}lintOptions {abortOnError false}packagingOptions {exclude 'META-INF/LICENSE.txt'exclude 'META-INF/NOTICE.txt'}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}sourceSets {main {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src']resources.srcDirs = ['src']aidl.srcDirs = ['src']renderscript.srcDirs = ['src']res.srcDirs = ['res']assets.srcDirs = ['assets']jniLibs.srcDirs = ['libs']}// Move the tests to tests/java, tests/res, etc...instrumentTest.setRoot('tests')// Move the build types to build-types/<type>// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...// This moves them out of them default location under src/<type>/... which would// conflict with src/ being used by the main source set.// Adding new build types or product flavors should be accompanied// by a similar customization.debug.setRoot('build-types/debug')release.setRoot('build-types/release')}dexOptions {jumboMode true}productFlavors {}}
repositories {flatDir {dirs 'libs'}jcenter()maven {url 'https://raw.githubusercontent.com/android-plugin/mvn-repo/master/' //引擎aar仓库地址}
}dependencies {compile fileTree(include: '*.jar', dir: 'libs')compile(name: 'engine-4.0.0-systemRelease', ext: 'aar')
//    防止v4和v7冲突compile('com.android.support:appcompat-v7:23.4.0') {exclude module: 'support-v4'}
}
apply from: "https://raw.githubusercontent.com/android-plugin/gradle-plugin/master/buildPlugin.gradle"

7.配置AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="org.zywx.wbpalmstar.widgetone.dataservice"android:versionCode="1"android:versionName="3.0"tools:overrideLibrary="org.zywx.wbpalmstar.widgetone.uex"><application android:label="@string/app_name"><!-- 这里的其实页面必须为LoadingActivity--><activity
            android:name="org.zywx.wbpalmstar.engine.LoadingActivity"android:configChanges="keyboardHidden|orientation"android:launchMode="standard"android:screenOrientation="portrait"android:theme="@style/browser_loading_theme"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activity android:name="main.java.com.ysg.myapplication.MainActivity"></activity></application></manifest>

8.在src的包下新建一个类继承EUExBase(这个类主要是执行html页面中点击方法的逻辑)

public class EUExMyDemo extends EUExBase {private static final int mMyActivityRequestCode = 1000;private int mFuncActivityCallback;public EUExMyDemo(Context context, EBrowserView eBrowserView) {super(context, eBrowserView);}// this case start a Activity: HelloAppCanNativeActivitypublic void test_startActivityForResult(String[] parm) {if (parm.length > 0) {mFuncActivityCallback = Integer.parseInt(parm[0]);}Intent intent = new Intent();intent.setClass(mContext, MainActivity.class);try {startActivityForResult(intent, mMyActivityRequestCode);} catch (Exception e) {Toast.makeText(mContext, "找不到此Activity!!", Toast.LENGTH_LONG).show();}}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == mMyActivityRequestCode) {JSONObject jsonObject = new JSONObject();try {if (resultCode == Activity.RESULT_OK) {String ret = data.getStringExtra("result");jsonObject.put("result", ret);} else {jsonObject.put("result", "cancel");}} catch (JSONException e) {e.printStackTrace();}callbackToJs(mFuncActivityCallback, false, 0, jsonObject);}}@Overrideprotected boolean clean() {return true;}
}

注释:这里我新建一个方法test_startActivityForResult(),该方法执行跳转到另一个页面并执行回调操作。并且这里每增加一个方法都需要在第五步的plugin.xml中进行注册
9.在html中添加功能

  <span>1.test_startActivityForResult接口</span><!--此接口将打开一个自定义的activity,并获取其操作后的返回值。--><input class="btn" type="button" value="test_startActivityForResult"onclick="test_startActivityForResult()"><br>
<script>function test_startActivityForResult() {uexDemo.test_startActivityForResult(function (error, data) {if (!error){alert("返回结果是:"+data.result);}});}
</script>

到此已经可以实现混合开发的基本流程了,以后还会继续完善的

荆轲刺秦王

Android+H5开发相关推荐

  1. android H5开发出现广告,常见的移动端H5页面开发遇到的坑和解决办法

    转自:https://www.cnblogs.com/LiuJL/p/7744473.html 1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什 ...

  2. H5+Android混合开发电视APP

     最近公司搞"黑马"项目,想到H5在手机app上的应用很多,但是目前在我们公司电视端的应用几乎为零,所以就拟定题目为<基于H5技术的新型电视应用>,经过43小时的奋 ...

  3. MUI+H5开发移动APP/网易邮箱大师项目实战/Android、IOS跨平台应用开发-王翠英-专题视频课程...

    MUI+H5开发移动APP/网易邮箱大师项目实战/Android.IOS跨平台应用开发-488人已学习 课程介绍         MUI从基础到精通的全方位讲解,系统介绍了移动APP开发基础.MUI各 ...

  4. android h5 宿舍报修管理系统myeclipse开发mysql数据库编程服务端java计算机程序设计

    一.源码特点   android h5 宿舍报修管理系统是一套完善的WEB+android设计系统,对理解JSP java,安卓app编程开发语言有帮助(系统采用web服务端+APP端 综合模式进行设 ...

  5. Android Studio开发安卓app 封装WEB(H5,URL)

    由于项目需要,需使用安卓app封装WEB(H5)url链接,之前用的HbuilerX混合开发,但是Hhuildex的UNIAPP在线打包无法实现开机自动启动功能.需使用离线打包,就干脆学习使用andr ...

  6. Android应用该用H5开发还是原生开发?

    个人认为一个应用不是一定适合某种技术,要看应用的类型来选择的.可以根据以下原则来选择: 1.如果APP中出现大段文字(如新闻.攻略等),且格式比较丰富(如加粗,字体多样),那么用H5会比较方便.原因是 ...

  7. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    原文:Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必 ...

  8. Android安全开发之安全使用HTTPS

    此文章转载于点击打开链接 Android安全开发之安全使用HTTPS 1.HTTPS简介 阿里聚安全的应用漏洞扫描器中有证书弱校验.主机名弱校验.webview未校验证书的检测项,这些检测项是针对AP ...

  9. H5开发中的问题总结

    最近公司做了一个出行日记的项目,里面的页面十多页,天天加班,做到吐血.总体来说,写页面的时候虽然是十多个页面,其实难度还是在每个页面的特效上.公司是易到用车,出行日记的页面在APP里有生成入口,有兴趣 ...

最新文章

  1. PHP5 VC9、VC6、Thread Safe、Non Thread Safe各个版本区别
  2. Shell脚本基本命令4
  3. extern用法详解(转)
  4. r怎么对两组数据统计检验_数据科学中最常用的统计检验是什么
  5. html选择想不能为空,jquery – 属性的CSS3选择器,“具有任何值且不为空或空白”...
  6. 计算机排版自然段视频教程,排版教程(新手电脑排版教程视频)
  7. 大数据项目实战——基于某招聘网站进行数据采集及数据分析(一)
  8. android 半透明背景
  9. 主站SOEM函数详解--SDO读写函数
  10. Python安装教程-手把手教你安装
  11. 程序员和黑客的十大本质区别
  12. arcgis符号方向_arcgis符号
  13. Mybatis动态sql和分页
  14. 基于Python的KNN实验手写数字识别
  15. 应用统计432考研复试提问总结精简版【二】
  16. react上下文_了解React的新上下文API
  17. Web页面实现打印功能
  18. 视频网站如何选择视频服务器呢?
  19. Qt视频剪辑软件开发(四):视频双向拖动与剪辑的实现
  20. python编辑svg文件_如何从Python修改SVG文件的属性?

热门文章

  1. 17.sql server数据库使用规则、二八原则、数据库查询集群--数据库读写分离多种实现、数据库配置读写分离(by-朝夕)
  2. 考考你的基础知识:C++ 文件操作ofstream、ifstream使用
  3. filecoin space race
  4. i2c-tool调试工具使用方法介绍
  5. 使用Android studio开发一个数独游戏APP 系列第一讲
  6. unity上传头像_unity通过http上传图片到服务器
  7. 计算机五笔字型编码方法,《五笔字型输入的编码规则》说课稿
  8. 08【mmaction2 行为识别商用级别】自定义ava数据集 之 将视频裁剪为帧
  9. 恢复foxmail中丢失的地址簿
  10. 消失与存续——应用交付行业的跌宕演进