React-Native-For-Android圖片熱更新

RN對圖片加載支持了很多套方案,

//加載遠程圖片
<Image source={{url:'http://www.wacai.com/icon.png'}} />
//加載res類的圖片
<Image source={{url:'icon'}} />
//加載指定文件系統(tǒng)的圖片
<Image source={{url:'file:///sdcard/icon.png'}} />
//這個比較流弊猾封,請看下文介紹
<Image source={require('./assets/img/icon.ong')} 

為啥講require的方式比較流弊了,廢話不流弊FB會推薦這種方案嘛浊伙!我們的圖片熱更新全靠他了好嗎!網(wǎng)上的那些什么圖片熱更新的教程都別看长捧。FB在21的版本上已經(jīng)完美解決了嚣鄙。 完美....

熱部署

RN在19之前都是將圖片打包到res文件夾,通過圖片名稱找到對應(yīng)的ID串结,然后找到圖片的拗慨。下面是Android的實現(xiàn)。

public int getResourceDrawableId(Context context, @Nullable String name) {
    if (name == null || name.isEmpty()) {
      return 0;
    }
    name = name.toLowerCase().replace("-", "_");
    if (mResourceDrawableIdMap.containsKey(name)) {
      return mResourceDrawableIdMap.get(name);
    }
    int id = context.getResources().getIdentifier(
        name,
        "drawable",
        context.getPackageName());
    mResourceDrawableIdMap.put(name, id);
    return id;
  }

但是要知道res文件夾是沒有訪問權(quán)限的啊....那么我們代碼更新了奉芦,圖片要更新改怎么辦,怎么辦嘛剧蹂。

后來微軟的一位做CodePush的作者看不下去了声功,CodePush是什么請谷歌一下。于是咔咔把RN的加載代碼重構(gòu)了宠叼。FB看了說"我去,完美解決嘛!"于是尷尬的合并的代碼先巴。

那么問題來了,是怎么解決的了冒冬!

首先通過require獲取資源的時候回判斷是否為開發(fā)狀態(tài)“DEV”,開發(fā)狀態(tài)就通Node服務(wù)中獲取資源地址伸蚯,非開發(fā)狀態(tài)就去組裝native的資源地址

devServerURL ? getPathOnDevserver(devServerURL, asset) : getPathInArchive(asset),

根據(jù)不同的平臺獲取拼接不同的目錄,其中 offlinePath 是從native配置的資源目錄決定的。

function getOfflinePath() {
  if (_offlinePath === undefined) {
    var scriptURL = SourceCode.scriptURL;
    var match = scriptURL && scriptURL.match(/^file:\/\/(\/.*\/)/);
    if (match) {
      _offlinePath = match[1];
    } else {
      _offlinePath = '';
    }
  }

  return _offlinePath;
}

function getPathInArchive(asset) {
  var offlinePath = getOfflinePath();
  if (Platform.OS === 'android') {
    if (offlinePath) {
      // E.g. 'file:///sdcard/AwesomeModule/drawable-mdpi/icon.png'
      return 'file://' + offlinePath + getAssetPathInDrawableFolder(asset);
    }
    // E.g. 'assets_awesomemodule_icon'
    // The Android resource system picks the correct scale.
    return assetPathUtils.getAndroidResourceIdentifier(asset);
  } else {
    // E.g. '/assets/AwesomeModule/icon@2x.png'
    return offlinePath + getScaledAssetPath(asset);
  }
}

OK 那么我們該如何做圖片的熱部署简烤。

首先我沒有要定義一個js腳步目錄剂邮,可以是data目錄也可以是SdCard。注意一定要以/開頭横侦,就算編譯器告訴你這樣可能不對也得以/開頭挥萌。

protected String getJSBundleFile() {
  return "/sdcard/bundle/index.android.bundle";
}

然后打包,把打出的bundle和圖片放到這個目錄下枉侧。打開你APP玩耍吧....

作者 大光 更多文章 | Github

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末引瀑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子榨馁,更是在濱河造成了極大的恐慌憨栽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翼虫,死亡現(xiàn)場離奇詭異屑柔,居然都是意外死亡,警方通過查閱死者的電腦和手機蛙讥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門锯蛀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人次慢,你說我怎么就攤上這事旁涤∠枨” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵劈愚,是天一觀的道長瞳遍。 經(jīng)常有香客問我,道長菌羽,這世上最難降的妖魔是什么掠械? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮注祖,結(jié)果婚禮上猾蒂,老公的妹妹穿的比我還像新娘。我一直安慰自己是晨,他們只是感情好肚菠,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著罩缴,像睡著了一般蚊逢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上箫章,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天烙荷,我揣著相機與錄音,去河邊找鬼檬寂。 笑死终抽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焰薄。 我是一名探鬼主播拿诸,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼塞茅!你這毒婦竟也來了亩码?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤野瘦,失蹤者是張志新(化名)和其女友劉穎描沟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鞭光,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吏廉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惰许。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片席覆。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汹买,靈堂內(nèi)的尸體忽然破棺而出佩伤,到底是詐尸還是另有隱情聊倔,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布生巡,位于F島的核電站耙蔑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏孤荣。R本人自食惡果不足惜甸陌,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盐股。 院中可真熱鬧钱豁,春花似錦、人聲如沸疯汁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涛目。三九已至,卻和暖如春凛澎,著一層夾襖步出監(jiān)牢的瞬間霹肝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工塑煎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沫换,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓最铁,卻偏偏與公主長得像讯赏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冷尉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容