eoe 移动开发者论坛

 找回密码
 加入eoe

QQ登录

只需一步,快速开始

查看: 1518|回复: 1
收起左侧

使用多操作系统引擎创建您的第一款Andorid* 应用和 Apple* Mac...

[复制链接]

签到天数: 16 天

连续签到: 1 天

[LV.4]偶尔看看III

52

主题

99

帖子

1063

e币
发表于 2016-3-14 14:35:28 | 显示全部楼层 |阅读模式

没有eoe的账号,级别还太低,出门如何吹牛逼?

您需要 登录 才可以下载或查看,没有帐号?加入eoe

x
本教程将指导您如何使用 Mac OS X* 所安裝的多操作系统引擎来开发您的第一款跨平台应用,我们将此流程称为本地构建。您也可以在 Windows* 上的 Android Studio 中开发您的 Android* 和 iOS* 应用,但如要模拟您的 iOS 应用,您需要将您的应用远程部署到运行 Xcode* 的 Mac 系统(因此称为远程构建)。对于这种情况,请参考多操作系统引擎(远程构建)入门指南。
在本教程中,我将向您展示如何通过在两款应用间共享代码来创建一款简单的 Android 和 iOS Hello World 应用。在实际情况下,大部分应用逻辑都可以共享。
前提条件
首先,您需要满足以下最低软件要求:
  • Android Studio* 1.0 或更高版本
  • Xcode* 6 或更高版本
  • Java* Development Kit 1.7 或更高版本
  • Android SDK
总体工作流
创建 Android 和 iOS 应用的工作流相对简单。
  • 要在 Android Studio 中创建 iOS 应用,我们首先需要从 Android 项目入手。
  • 然后,我们创建一个多操作系统引擎模块(这将是 iOS 应用)
  • 对于应用代码共享,我们创建了一个名为 common 的模块(共享的 Java 库)
  • 然后,我们添加 common 模块作为 Android 和 iOS 应用的依赖项
  • 最后,我们配置 Gradle* 脚本,构建并启动我们的应用。
使用共享逻辑创建我们的第一款 Android 和 iOS 应用
  • 在 Android Studio 中创建 Android 项目
  • 输入您的 应用名称公司域名 ,然后选择您要保存项目的某一位置。最好将您的项目存储在用户名下方名称为 Project 的文件夹中。您不妨执行此处描述的具体步骤,确保您不会碰上任何问题。请注意自动生成的软件包名称 (com.mycompany.myfirstapp),均为小写字母。点击“下一步”。
  • 配置目标设备和 API 级别设置。如果您只是刚刚着手,只需点击“下一步”,即可继续执行默认设置。
  • 选择 “向移动设备添加一项活动” 窗口中的“空白活动”,然后点击“下一步”。
  • “自定义活动” 窗口中,您可以保留默认设置。点击“完成”,接受默认配置。
  • 此时,Android Studio 创建了一个 Android 项目。 在“项目”窗格中,您会发现app模块。 该模块就是您的 Android 应用。 现在,我们继续添加多操作系统引擎模块,此模块最终将成为您的 iOS 应用。
  • 在“项目”窗格中,右键点击任意位置,选择“新建”>“英特尔多操作系统模块”
  • 点击 Hello World 应用 ,然后点击“下一步”
  • 在此窗口中,您将创建一个 Xcode 项目。稍后,您可能希望在 Xcode 中打开由 Android Studio 创建的 iOS 项目,尤其是当您希望使用 Xcode 的故事板来设计本地用户界面时。请输入 Xcode 项目名称(通常是您的应用名称)、 产品名称 (应用名称)、公司名称和公司 ID 详情。
    在此示例中,我们将输入以下详细信息,以匹配 Android S:
    Xcode 项目名称: myfirstapp
    产品名称: myfirstapp
    公司名称: mycompany
    公司标识: com.mycompany

  • 点击“下一步”,配置新模块。该模块将是 iOS 模块。因此,我们将其命名为“iOS”。点击“完成”。
    现在,我们已在 Android Studio 中创建了 iOS 应用。如果 Android Studio 提示您同步 Gradle 脚本,请这样操作。在接下来的步骤中,我们将创建一个“common”模块,顾名思义,适用于 Android 和 iOS 应用的常见 Java 代码。
    现在,让我们继续创建保留有共享应用逻辑 (Java) 的“common”模块。在简单的示例中,共享逻辑将仅仅是 Java 对象,此对象拥有可返回 Java 字符串的 sayHello() 方法。
  • 再次右键点击“项目”窗格,然后添加一个新 模块
  • 在“新建模块”窗口中,选择“Java 库”,然后点击“下一步”。
  • 我们记得,该库将包含所有共享(common)应用逻辑。因此,我们将其命名为“common”,并让我们的第一个 Java 类别称为“AppLogic”。此外,还需要按其他模块生成的样式编辑 Java 包名称。一般情况下,将是如下所示:company_domain_in_reverse.appname.common, for example
    com.mycompany.myfirstapp.common
  • 点击“完成”,让 Android Studio 刷新“项目”窗格和 Gradle 脚本。
    现在,我们将一些代码添加到我们的 AppLogic 类别。
  • 导航到 common > java > com.mycompany.myfirstapp.common ,然后打开 AppLogic 类别。将内容更换为以下内容( 粗体 代码为最近添加/编辑的内容):
    package com.mycompany.myfirstapp.common;

    public class AppLogic {
      private String myString;

      public AppLogic(){
       this.myString = "Hello World from common";
    }

      public String sayHello(){
       return this.myString;

    }
    }
    最后,我们添加 common 模块作为 Android 和 iOS 应用的依赖项。注:在“项目”窗格中,他们的名称分别为“app”和“iOS”。
  • 选择任意模块的根(现在,您有三个,即 appiOScommon)。右键点击并选择 “打开模块设置”
  • appiOS 模块,请将 common 模块添加到 依赖项 选项卡。要执行此项操作,请点击底部的“+”号,点击 模块附属项 ,然后选择列表中的 common
    在添加 common 模块作为 iOS 模块的依赖项后,iOS 的模块设置应该是这样的:
    也针对 app 模块执行上述操作:
  • common 模块中的 Java 代码将由 Java 编译器进行编译。在构建过程中,该模块有自己的 Gradle* 脚本。我们需要更新脚本来告知 Gradle 哪个 Java 版本将用于编译我们的模块。请打开 common 模块的 Gradle 脚本(Gradle Scripts > build.gradle (Module: common)),并在结尾处添加以下内容:
    compileJava {
      targetCompatibility = 1.7
      sourceCompatibility = 1.7
    }
    现在,让我们编写一款带有按钮和文本字段的小型 Android 应用。当您点击文本字段时,您将调用共享 AppLogic 对象的 sayHello() 方法。
  • 对于 Android 应用,请打开 activity_main 布局
    (app>res>layout>activity_main.xml)。如果您看到 XML 代码,只需点击底部的 设计 选项卡,以便切换到图形界面。此时,应显示一个 Hello World 文本字段。将按钮从面板拖动到手机,即可添加按钮。双击该按钮,并将其重命名为“点击我!”。请注意,按钮的 ID 称为“button”。Android 将根据 ID 找到屏幕上相应的元件。当前的 Hello World 文本有 ID textView。您可以在“组件树”窗格或 XML 文件中看到此项内容(要查看 XML 代码,请点击底部的 文本 选项卡)

  • 接下来,在 MainActivity (app > package com.mycompany.myfirstapp > MainActivity) 中,我们将导入common 模块,并将特定逻辑添加到新建的按钮(请参阅 代码段 1)。 粗体 内容是所添加的几段代码。对于在 Android SDK 中提供的 按钮视图 类别,您可以按 Option+Enter,自动导入相关的软件包。
  • 可选:您可以在真实设备或模拟器上测试新的 Android 应用。您可以通过编辑 Android 应用的配置来执行此项操作。在配置菜单中,您可以选择目标设备。请参考官方 Android 文档,了解在 真实设备虚拟设备上执行应用的更多信息。

现在,让我们创建 iOS 应用。
  • 在“项目”页面上,打开 AppViewController java 文件。(iOS > java > com.mycompany.myfirstapp > ui > AppViewController)。编辑代码,以导入 common 模块,并向按钮添加必要的逻辑。注意:添加 Hello World 多操作系统引擎模块后,将自动创建一个按钮。请参阅以下 代码段 2 ,了解整个代码。 粗体 内容是所添加/编辑的内容。
  • iOS 应用的代码已准备就绪。让我们在 iOS 模拟器中执行 iOS 应用。要执行此项操作,请从下拉菜单中选择 iOS,如以下截图:
  • Voilà!现在,使 Hello World 应用在采用代码共享的 Android 和 iOS 上运行。
    这很酷!下面该怎么做?您可能希望在样本文件夹中查看更多高级的样本:/Applications/Intel/INDE/multi_os_engine/samples
    随意使用这款应用。如果您遇到任何困难,请在我们的 专门论坛上提出您的疑问。此外,请关注我们的 博客 ,了解有关多操作系统引擎的更新和特性。

代码段代码段 1 – Android (MainActivity.java)
package com.mycompany.myfirstapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


/* Import our common module */
import com.mycompany.myfirstapp.common.*;

public class MainActivity extends AppCompatActivity {

   AppLogic al = new AppLogic();
   Button button;
   TextView tv;


   @Override
   protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main);

     button = (Button) findViewById(R.id.button);
     tv = (TextView) findViewById(R.id.textView);

     button.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View v) {
         tv.setText(al.sayHello());
       }
     });

   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
     getMenuInflater().inflate(R.menu.menu_main, menu);
     return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
     // Handle action bar item clicks here. The action bar will
     // automatically handle clicks on the Home/Up button, so long
     // as you specify a parent activity in AndroidManifest.xml.
     int id = item.getItemId();

     //noinspection SimplifiableIfStatement
     if (id == R.id.action_settings) {
       return true;
     }

     return super.onOptionsItemSelected(item);
   }
}

Code snippet 2 – iOS – AppViewController.java
package com.mycompany.myfirstapp.ui;

import com.intel.inde.moe.natj.general.NatJ;
import com.intel.inde.moe.natj.general.Pointer;
import com.intel.inde.moe.natj.general.ann.Generated;
import com.intel.inde.moe.natj.general.ann.Owned;
import com.intel.inde.moe.natj.general.ann.RegisterOnStartup;
import com.intel.inde.moe.natj.objc.ObjCRuntime;
import com.intel.inde.moe.natj.objc.ann.ObjCClassName;
import com.intel.inde.moe.natj.objc.ann.Property;
import com.intel.inde.moe.natj.objc.ann.Selector;
import com.mycompany.myfirstapp.common.AppLogic;

import ios.NSObject;
import ios.uikit.UIButton;
import ios.uikit.UILabel;
import ios.uikit.UIViewController;

@com.intel.inde.moe.natj.general.ann.Runtime(ObjCRuntime.class)
@ObjCClassName("AppViewController")
@RegisterOnStartup
public class AppViewController extends UIViewController {

   AppLogic al = new AppLogic();

   static {
     NatJ.register();
   }

   @Generated("NatJ")
   @Owned
   @Selector("alloc")
   public static native AppViewController alloc();

   @Generated("NatJ")
   @Selector("init")
   public native AppViewController init();

   @Generated
   protected AppViewController(Pointer peer) {
     super(peer);
   }

   public UILabel statusText = null;
   public UIButton helloButton = null;

   @Override
   @Selector("viewDidLoad")
   public void viewDidLoad() {
     statusText = getLabel();
     helloButton = getHelloButton();
   }

   @Selector("statusText")
   @Property
   public native UILabel getLabel();
   @Selector("helloButton")
   @Property
   public native UIButton getHelloButton();

   @Selector("BtnPressedCancel_helloButton:")
   public void BtnPressedCancel_button(NSObject sender){
     statusText.setText(al.sayHello());

点评

上海上门***,足不出户就能体验高品味享受,我们全天候准备为您服务!使您全身活力再现!把轻松`舒适`和快乐带给您!官网taosilespa.com电话/微信1:13370271997微信2:shanmo12580,务必同时加,qq:806   发表于 2016-8-24 23:33
*滑动验证:
您需要登录后才可以回帖 登录 | 加入eoe

本版积分规则

推荐阅读
赞助商们

QQ|联系我们|小黑屋|手机版|eoe 移动开发者论坛 ( 京ICP备11018032 京公网安11010802020210  

GMT+8, 2017-6-29 06:44 , Processed in 0.552213 second(s), 23 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表
关闭

扫一扫 关注eoe官方微信