如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP

jopen 9年前發布 | 43K 次閱讀 移動Web開發框架 移動開發 Grunt

  如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP

一直想開發手機應用,也跟著教程學做了兩個iOS小應用,但開發思維上的轉變需要一個長期的過程,而且iOS系統功能很強大,陌生的地方也很多,很多功能不知道該自己開發還是系統上已經存在,也不了解現在iOS開發的流程。所以對于沒有任何移動平臺客戶端開發經驗的開發人員來說,想要做一個產品級別的產品出來,如果直接采用原生開發,不知道有多少坑要填。幸好現在有Hybrid APP方式,一種介于Web APP和Native APP之間的解決方案。Web APP無需安裝,但需要打開系統上的瀏覽器來運行,因為就是網頁嘛,用戶體驗不太好,操作局限性大。Native APP是安裝在系統上的應用,體驗更好,但是開發難度不小,并且需要針對不同系統開發對應的版本,開發和維護成本太高。Hybrid APP綜合了上述兩種APP的優點,用戶界面通過Web前端技術實現,使用JavaScript調用第三方庫封裝的系統API,這樣一來,不同系統下應用的UI界面不再需要使用原生語言重新開發,只用調用對應的第三方庫即可。

  • 為什么開發Hybrid APP
    Hybrid APP——混合APP,就是采用非原生APP的開發語言來制作APP的界面,調用第三方發布的APP中間件在各平臺上運行,關于中間件的介紹請參考《Hybrid App開發實戰》。由此可見,因為有第三方中間件封裝了各種平臺的底層API,Hybrid APP可以實現跨平臺開發,而且沒有原生APP開發經驗的開發人員也可以使用自己擅長的技術來開發APP。特別對于Web開發人員來講,如果沒有這種方式,轉向去學習純原生方式的開發,其成本和難度都不小。在前端方面,現在使用HTML5 + CSS3 + JavaScript可以快速開發出很強大的Web應用,所以能復用Web前端技術在APP開發上真是一件普大喜奔的好事。

  • 如何搭建一個基于PhoneGap的Hybrid APP
    我采用的是PhoneGap作為中間件,它采用命令行的方式來創建工程,所以需要先安裝PhoneGap的命令行工具,并且這個命令行工具要用到npm來安裝,也就是Node.js的包管理工具,所以在自己的開發環境里把Node.js安裝好就可以使用npm了。
    安裝妥當npm之后,全局條件下安裝PhoneGap的命令行工具,在命令行界面輸入如下命令,因為我的環境沒能成功安裝PhoneGap,所以采用cordova代替。

    $ sudo npm install -g phonegap
    我沒有成功安裝,于是安裝的cordova
    $ sudo npm install -g cordova
    安裝完畢之后,就可以使用cordova來創建PhoneGap項目。cordova是從PhoneGap提取出來的一個開源項目,在我看來,除了名字不一樣之外,二者沒有什么區別。
    然后在常用的項目文件夾下運行命令:

    $ cordova create hello com.example.hello "HelloWorld"
    Creating a new cordova project.
    $ ls
    hello
    create后面第一個參數hello是新建的項目文件夾名稱,第二個參數com.example.hello是公司名稱,第三個參數"HelloWorld"是項目名。在當前目錄下可以看到多了一個文件夾hello。
    然后進到項目文件夾里,添加對iOS的支持

    $ cd hello
    $ cordova platform add ios
    $ cordova prepare
    至此,就完成了對基于PhoneGap的Hybrid APP項目的創建工作,接下來用XCode來打開這個項目,運行iOS模擬器來檢驗這個項目能否正常運行。
    啟動Xcode,打開文件/hello/platforms/ios/HelloWorld.xcodeproj
    如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP
    如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP

    使用Xcode打開項目后,點擊運行按鈕后,稍等片刻,在模擬器中看到Cordova的界面,就表示成功運行。
    如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP
    如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP

    創建其他平臺的流程應該也是類似的,具體操作建議參考官方文檔。

    </li>

  • 怎樣加入Yeoman + Grunt + Bower開發流程
    通過上面的過程,創建了一個基于PhoneGap的Hybrid APP工程,可是APP本身的開發流程還沒有涉及到。我想采用當前Web前端流行的Yeoman + Grunt + Bower全明星組合,開發一款基于AngularJS的應用,然后將這個Web APP打包后放到PhoneGap的環境下,使用Xcode編譯之后就可以部署到iOS上運行了。
    Yeoman是一個Web APP的腳手架程序,所謂腳手架程序,就是幫助開發者完成搭建一個Web項目時經常重復的項目初始設置的過程,換句話說,就是用一個命令就可以搞定一個項目的初始搭建工作。
    Grunt是現在流行的Web前端自動化開源工具,并且有豐富的插件可以使用。可以完成單元測試,靜態文件合并、縮小,還可以為前端運行一個簡單的Web服務器等很多工作。
    Bower是Web前端的包管理工具,可以使用它來管理Web前端的各種第三方庫,比如jQuery,Bootstrap,AngularJS等。
    以上三者也是通過npm來安裝,既然上面已經安裝過了,現在只需要輸入安裝這三個工具的命令,

    $ npm install -g yo bower grunt-cli
    這三個工具安裝完畢之后,在之前創建的Hybrid APP項目文件夾下創建一個Web APP的目錄,比如叫yo,然后安裝用于創建基于angular的Web項目的自動生成器,并運行yeoman來創建一個Web APP項目。

    $ mkdir yo
    $ cd yo
    $ npm install -g generator-angular
    $ yo angular
    項目創建完成后,檢查一下項目能否正常運行,在命令行輸入

    $ grunt serve
    這樣就啟動了一個Web服務器來運行剛才創建的Web APP,順利的話可以在瀏覽器上看到這個yeoman的實例頁面。
    如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP

    好了,現在看看怎么把yeoman創建的項目放到Hybrid APP里運行。
    把Hybrid APP根目錄下的config.xml拷貝到yo/app目錄下,然后修改yo下的Gruntfile.js。
    1,增加xml到copy->dist->files->src中
    2,在copy->dist->files中添加
    {
      expand: true,
      cwd: '../platforms/ios/www',
      dest: '<%= yeoman.dist %>/scripts',
      src: [
      'plugins/**',
      'cordova.js',
      'cordova_plugins.js'
      ]
    }
    3,在clean中增加options: {force: true}

    修改后代碼如下:

    // Copies remaining files to places other tasks can use
    copy: {
      dist: {
        files: [{
          expand: true,
          dot: true,
          cwd: '<%= yeoman.app %>',
          dest: '<%= yeoman.dist %>',
          src: [
            '.{ico,png,txt,xml}',
            '.htaccess',
            '.html',
            'views/{,/}.html',
            'images/{,/}.{webp}',
            'styles/fonts/{,/}.'
          ]
        }, {
          expand: true,
          cwd: '.tmp/images',
          dest: '<%= yeoman.dist %>/images',
          src: ['generated/']
        }, {
          expand: true,
          cwd: '../platforms/ios/www',
          dest: '<%= yeoman.dist %>/scripts',
          src: [
          'plugins/*',
          'cordova.js',
          'cordova_plugins.js'
          ]
        }]
      },
      styles: {
        expand: true,
        cwd: '<%= yeoman.app %>/styles',
        dest: '.tmp/styles/',
        src: '{,/}*.css'
      }
    },

    // Empties folders to start fresh clean: {   dist: {     files: [{       dot: true,       src: [         '.tmp',         '<%= yeoman.dist %>/{,/}',         '!<%= yeoman.dist %>/.git{,/}'       ]     }]   },   server: '.tmp',   options: {     force: true   } },</pre>4,修改index.html,在angular的引用之前添加對cordova.js的引用

    <script type="text/javascript" src="scripts/cordova.js"></script>
    5,在命令行運行grunt build,打包整個Web APP項目,然后拷貝yo/dist下所有文件到Hybrid APP項目的www目錄下

    $ grunt build
    6,來到Hybrid APP項目的根目錄,在命令行運行cordova prepare

    $ cordova prepare
    7,用Xcode打開Hybrid APP項目,運行iOS模擬器,可以看到Web APP已經成功的在iOS上運行了。
    如何采用Yeoman + Grunt + Bower開發基于PhoneGap的Hybrid APP

    步驟5,6在每次將Web APP部署到iOS上調試時都要做,純屬重復的手工操作,我寫了一段shell腳本來運行

    echo '### Sync APP to Platforms ###'

    echo 'Building web APP...' echo 'Please be patient, it may take several minutes' grunt build

    sourceDir="dist" targetDir="../www" allFiles="/*"

    if [ -d $sourceDir ] then if [ ! -d $targetDir ] then mkdir -p $targetDir fi echo 'Copying source files to www/' cp -r $sourceDir$allFiles $targetDir

    echo 'Calling cordova prepare'
    cd ..
    cordova prepare
    echo 'All done'
    

    else echo 'Err: The source directory "dist" doesnot exist, use command "grunt build" to generate it firstly' fi</pre>


    但想要開發高效率的應用,公認還是做原生開發更好,iOS原生應用開發入門教程推薦王寒的編纂的《從零開始學iOS7開發系列》,教程寫的非常生動易懂,文章里的例子也很有代表性,仔細學習和琢磨之后可以舉一反三開發自己的應用。其實Hybrid APP開發早已經不限于移動平臺了,我最早接觸到的Hybrid APP是家用主機平臺,在XBOX ONE上,微軟也實現了供JavaScript調用的XBOX系統API,將Web APP通過Visual Studio打包后發布到主機上就可以運行。既然HTML5和CSS3在制作用戶界面上巨大的潛力,采用Hybrid APP方式確實可以極大的幫助Web開發人員開發瀏覽器平臺以外的應用。


參考

來自:http://my.oschina.net/zombiecat/blog/470435

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!