Android端10個最常見問題

jopen 9年前發布 | 17K 次閱讀 Android Android開發 移動開發

這里逐條記錄下最容易遇到的React native android 相關case:

  • 1. app啟動后,紅色界面,unable load jsbundle :

    </li> </ul>

    1. 解決辦法:一般來說就是,你是用dev-serve方式,且你的server沒有正確匹配上,如果是用手機跑的話,需要pc和手機在同一個wifi下,且通過menu鍵設置menu-ip為pc的ip,如果是模擬器,則不需要手動設置ip,設置的話,反倒會出錯

      </li> </ol>

      • 2. app啟動后,紅色界面,unRegisteredProject

        </li> </ul>

        1. 提示提示什么,你的app沒有在啟動時候注冊

          </li>

        2. 解決辦法:這個后面也是一看就知道的錯誤,就是你的index.android.bundle中的最下面寫的那個

          </li>

        3. 'componetNameInYourLocalProject'在你的java代碼中不是叫這個名字,自己check下,立刻就能修復AppRegistry.registerComponent('componetNameInYourLocalProject', () => JSObjAndroid);

          </li> </ol>

          • 3. require("xxx")的組件失敗

            </li> </ul>

            1. js代碼中有時候會出現require("xxx")的組件出錯 解決辦法:檢測該node組件是否存在你的服務器上,如果是自己封裝的NativeModule話可以直接使用

              </li>

            2. var CustomMoudle = React.NativeModules.YourCustomModule CustomMoudle.yourMethodDeclearInYourNative('someparms');

              </li> </ol>

              • 4.調試

                </li> </ul>

                1. 解決辦法:可以利用pc端的chrome的 debug工具進行js端的調試,native的調試就只能用logcat跟蹤了,目前看到大部分的錯誤都是自己代碼的問題,ReactAndroid本身的Crash較少

                  </li> </ol>

                  • 5.so庫的問題

                    </li> </ul>

                    1. gradle的話,可以通到ndk filter來控制:
                    2. </ol>

                      android { defaultConfig { ndk { abiFilters "x86", "armeabi-v7a" } }

                      1. maven的話,可以手動通過libs下的so拷貝來解決問題。

                        </li>

                      2. 這塊有個比較大的坑就是,默認引入的jsc.aar中存在armabi文件夾,但是里面沒有jsc.so 。導致在多個地方,去編碼源碼時ndk方面會報錯。

                        </li> </ol>

                        • 6. 關于設備MinSdkVerison

                          </li> </ul>

                          1. 默認Android要求4.1以上設備(4.0根據網絡數據大概占比0.7比例,隨著大部分app已經不支持4.0以下設備了,這塊倒還可以接受)

                            </li>

                          2. 剛開始一直使用一個5.0的設備進行ReactAndorid的測試和開發,后來方向,其實搞上一個5.0+的Genymotion模擬器聯調起來效率會更高。

                            </li> </ol>

                            • 7.UIExplorer demo問題

                              </li> </ul>

                              1. 之前一直在看具體接入和代碼實現方面的,當大頭的工作回過頭來看,其實當時應該先從這個UIExploror入手的話,效率和進度應該會有較大提高的。

                                </li>

                              2. 這塊需要編譯react源代碼,如果遇到了https://github.com/非死book/react-native/issues/3976 的問題,可以使用我在下面回復的方法hook,但是本質原因還是那個armabi jsc.so的問題 screenshot

                                </li> </ol>

                                • 8.能力覆蓋范圍

                                  </li> </ul>

                                  1. 根據團隊之前React iOS的經驗,跟進主干代碼,依賴RN本身提供的UI組件可以滿足大部分業務場景。

                                    </li>

                                  2. 當然自己如果想復用之前團隊沉淀下來的,配合著UIManager和UIModule這塊本身工作量到也不算太大。

                                    </li>

                                  3. 但是應該盡可能的和團隊以后的JS端和iOS端的協議接口保持一致,讓React最大的意義發揮出來,“lean once run everywhere”

                                    </li> </ol>

                                    • 9.數據安全

                                      </li> </ul>

                                      1. 0.14之前只支持dev-pc 和assert方式,從0.14.0 realease版本開始支持local file patch加載方式,最新版0.15.1。

                                        </li>

                                      2. 因為如果要動態能力,js必定是走網絡端下發的,js本身是明文(即使JS做了混淆),數據防劫持的保護還是必須要做的,這點可以配合https防篡改+sign校驗來做

                                        </li> </ol>

                                        • 10.JNI消息輪訓帶來的影響

                                          </li> </ul>

                                          1. 由于JNI的通信限制,Java層和Native通信是單向的,且為了保證RN的16ms的渲染頻率,所有Java-Native-jscore層的通信都是異步的,這樣可能對于JAVA層的UI渲染是個性能問題。

                                            </li>

                                          2. 當消息量非常大或ListView頁面非常復雜時候,每1層Cell的渲染要以Css-ScrowllerView模型需要UI線程的連續繪制,對于瀑布流負責listview等可能會存在性能問題,但是該問題本身肯定是優于H5的體驗的

                                            </li> </ol> 來自:https://github.com/yipengmu/ReactNative_Android_QA

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