《react-native系列1》嵌入到Android的搭建

? ? ? ? 這篇文章 主要是為了進行對react-native項目當中Android的基座進行搭建,但是不同于網上很多的其他文章,直接進行npm install生成的一個react-native的項目目錄里面包括了Android IOS 以及JS。這篇是先創建一個Android項目,之后吧react-native嵌入其中。從而把整個給拆分開來。

? ? ? ? ? http://www.lxweimin.com/p/2fbdf5a12922

? ? ? ?第一步 不用說了 就是在AndroidStudio中創建一個新的Android項目。

? ? ? ?第二步 添加JS代碼管理

? ? ? 在項目的根目錄運行以下命令

? ? 1. 先進行npm init,進行對項目中生成package.json文件,只要按照步驟進行名字版本號等等進行完成就可以了

? ? 2.進行npm install --save react react-native?

? ? ?這樣會創建一個node_modules的目錄,而react-native的源碼就會生成,之后主要就是對之中的react-native進行依賴就可以了

? ? ?3.打開package.json文件 進行添加 ?"start": "node node_modules/react-native/local-cli/cli.js start"

?第三步 就是主要Android項目中的一些配置了

? 1.進行依賴庫的添加 ? ?

? 首先在的項目build.gradle文件中

allprojects {

? ? ? repositories {

? ? ? ? ? ? ? ? ?mavenLocal()

? ? ? ? ? ? ? ? ? ?jcenter()

? ? ? ? ? ? ? ? ? ? maven {

? ? ? ? ? ? ? ? ? ? ? // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm

? ? ? ? ? ? ? ? ? ? ?url"$projectDir/../node_modules/react-native/android"

? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ?}

}

? 2.在你app的build.gradle文件內添加React Native相關依賴:

compile 'com.facebook.react:react-native:+'?

或者

compile'com.facebook.react:react-native:0.42.3'// From node_modules.一般最好寫最新的

3.基本上都需要在AndroidManifest.xml清單文件中添加一行代碼

? 這個的主要作用是為了在開發中進行調試的作用

以及必須要添加權限否則會報錯,android studio中會要求需要INTERNRT ?Permission:

準備工作基本已經完成了

第四步主要完成react-native顯示的頁面的代碼了

public classReactMainActivityextendsAppCompatActivityimplementsDefaultHardwareBackBtnHandler {

private React RootView mReactRootView;

private ReactInstanceManager mReactInstanceManager;

private int OVERLAY_PERMISSION_REQ_CODE=0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//配置權限保證開發過程中紅屏錯誤能正確展示 設置權限

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

? ? ? ? if(!Settings.canDrawOverlays(this)) {

? ? ? ? Intent intent =new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,

? ? ? ? ?Uri.parse("package:"+ getPackageName()));

? ? ? ? ?startActivityForResult(intent,OVERLAY_PERMISSION_REQ_CODE);

? ? ? }

}

mReactRootView=new ReactRootView(this);

mReactInstanceManager= ReactInstanceManager.builder()

.setApplication(getApplication())

.setBundleAssetName("index.android.bundle")//可遠程地址

.setJSMainModuleName("index.android")//根目錄下index.android.js文件

.addPackage(newMainReactPackage())

.setUseDeveloperSupport(true)//如果為true,則會啟用諸如JS重新加載和調試之類的開發人員選項.反之打包

.setInitialLifecycleState(LifecycleState.RESUMED)

.build();

//'AwesomeProject'==>index.android.js 頁面內注冊名稱,可根據自己隨意調整

mReactRootView.startReactApplication(mReactInstanceManager,"AwesomeProject",null);

setContentView(mReactRootView);

}

@Override

protected void onPause() {

super.onPause();

if(mReactInstanceManager!=null) {

mReactInstanceManager.onHostPause(this);

}

}

@Override

protected void onResume() {

super.onResume();

if(mReactInstanceManager!=null) {

mReactInstanceManager.onHostResume(this,this);

}

}

@Override

protected void onDestroy() {

super.onDestroy();

if(mReactInstanceManager!=null) {

mReactInstanceManager.onHostDestroy(this);

}

}

@Override

public boolean onKeyUp(intkeyCode, KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_MENU&&mReactInstanceManager!=null) {

mReactInstanceManager.showDevOptionsDialog();

return true;

}

return super.onKeyUp(keyCode, event);

}

@Override

public void invokeDefaultOnBackPressed() {

super.onBackPressed();

}

//最后,必須覆蓋onActivityResult() 方法(如下面的代碼所示)來處理一致性UX的權限接受或拒絕的情況。

@Override

protected voidonActivityResult(intrequestCode,intresultCode, Intent data) {

if(requestCode ==OVERLAY_PERMISSION_REQ_CODE) {

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {

if(!Settings.canDrawOverlays(this)) {

// SYSTEM_ALERT_WINDOW permission not granted...

}

}

}

}

}

第五步 上述已經完成AndroidStudio中的設置了,最后就是要書寫react-native的js頁面代碼了

在項目的根目錄下面建一個index.android.js文件里面填寫一下代碼

import React, { Component } from 'react';

import { AppRegistry, Text } from 'react-native';

class AwesomeProject extends Component {?

?render() {??

? return (Hello world!);?

?}

}

// 注意,這里用引號括起來的'AwesomeProject'必須和你init創建的項目名一致

AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);

第六步,在根目錄下面打開命令窗口,運行react-native start


要是現實連接不上端口號port8081,可能是因為你電腦上的服務可能把8081端口號給占了,需要你去任務管理器去查看并把那個服務給關閉了。

再就是真機測試了,但是一般都會出現這樣的錯誤


這種一般會是兩個比較常見的問題

1.是手機連接的網絡和電腦的服務器的地址不在一個局域網中,或者手機就沒連接WiFi

2.是應該設置你手機的端口號和IP地址“ : IP是你自己電腦的IP:端口號一般都是8081


最后就會顯示了你的手機如圖就表示成功配置完成了。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,597評論 25 707
  • 原文鏈接:http://blog.csdn.net/xueshanhaizi/article/details/52...
    小小程序員jh閱讀 1,288評論 0 1
  • 從麗江回來有一周了,如果只說風景這杯酒,只能讓我微醺,真正讓我留下“麗江后遺癥”的,是這里的人。這里的...
    異族人生閱讀 378評論 0 5
  • 這片褐色的土地 沒有上帝的足跡 看著上學的身影 小女孩開始做夢 她夢見了彩虹和讀書生聲 夢的身后拴著一頭?!?/div>
    舒嚴閱讀 168評論 0 0
  • 雨落霧重 遮眼影朦朧 震雷驚人夢 神慌尋芳蹤 樓閣空洞 失魂心忡忡 橫斷肝腸人欲瘋 濁淚漸狂涌 怒斥蒼穹 隔斷天涯...
    清星閱讀 278評論 0 0