當前位置:首頁 » 編程軟體 » rn編譯

rn編譯

發布時間: 2023-04-17 12:34:19

1. RN集成react-native-baidu-map及解決遇到的問題

創建一個React-native項目,並加入百孫拆寬度地圖的插件的方法:

1,react-native init --version="0.55.4" BaiMapDemo  //新建一個目錄,創建名為 BaiMapDemo 的項目,

出現如圖所示:

2,cd BaiMapDemo //進入BaiMapDemo 下

3,yarn add react-native--map 或者 npm install react-native--map--save 添加react-native--map插件 (安裝開源項目庫)

4,配置index.js

APP是默認的項目名稱,這里創建項目時,項目名稱是BaiMapDemo,

5,setting.gradle中添加:

include':react-native--map'project(':react-native--map').projectDir =newFile(settingsDir,'../node_moles/react-native--map/android')

6,app/build.gradle的dependencies中添加

7,MainApplication.java中添加:

8,在AndroidMainifest.xml中添加,注意:許可權不要重復添加,react-native編譯有時不通過。

9,application標簽內添加

10,然後,編譯一下,發現項目中會出現react-native--map模塊,會報錯,

然後解決問題:

1,createJSMoles不是重寫方法

2,WebView的修改:

從React15.5起,React.PropTypes被移入到單獨的package中。react提供了一個package(prop-types)去檢查props的類型。首先需要將prop-types引用到文件中。

更改項目中對組件原的引用方式,在此項目中需要在御叢node_moles\react-native--map\js\MapView.js文件中

3, 項目能運行,地圖不顯示。

主要因為keystore和及其則亮配置。

把keystore拷貝到 項目\android\keystores目錄下,

並在 項目\android\app\build.gradle中配置

(4) 提示MainActivity不存在 Activity is not exist

項目\android\app\src\main\AndroidManifest.xml中的 package

與 項目\android\app\build.gradle中的applicationId保持一致。

然後就餓沒有問題了,網路地圖的API_KEY自己生成添加進項目的Application中就行了.

2. 在linux中安裝交叉編譯器時的解包問題

具體操作步驟如下:
1. 下載
在GCC網站上( 3.3.1。可供下載的文件一般有兩種形式:gcc-3.3.1.tar.gz和 2,只是壓縮格式不一樣,內容完全一致,下載其中一種即可。
2. 解壓
根據壓縮格式,選擇下面相應的一種方式解包(以下的「%」表示命令行提示符):
% tar xzvf gcc-3.3.1.tar.gz
或者
% tar jxvf 2
新生成的gcc-3.3.1這個目錄被稱為源目錄,用${srcdir}表示它。以後在出現${srcdir}的地方,應該用真實的路徑來替換它。用pwd命令可以查看當前路徑。
在${srcdir}/INSTALL目錄下有詳細的GCC安裝說明,可用瀏覽器打開 ml閱讀。
3. 建立目標目錄
目標目錄(用${objdir}表示)是用來存放編譯結果的地方。GCC建議編譯後的文件不要放在源目錄${srcdir]中(雖然這樣做也可以),最好單獨存放在另外一個目錄中,而且不能是${srcdir}的子目錄。
例如,可以這樣建立一個叫 gcc-build 的目標目錄(與源目錄${srcdir}是同級目錄):

% mkdir gcc-build
% cd gcc-build
以下的操作主要是在目標目錄 ${objdir} 下進行。
4. 配置
配置的目的是決定將GCC編譯器安裝到什麼地方(${destdir}),支持什麼語言以及指定其它一些選項等。其中,${destdir}不能與${objdir}或${srcdir}目錄相同。
配置是通過執行${srcdir}下的configure來完成的。其命令格式為(記得用你的真實路徑替換${destdir}):
% ${srcdir}/configure --prefix=${destdir} [其它選項]
例如,如果想將GCC 3.3.1安裝到/usr/local/gcc-3.3.1目錄下,則${destdir}就表示這個路徑。
% ../gcc-3.3.1/configure --prefix=/usr/local/gcc-3.3.1 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java
將GCC安裝在/usr/local/gcc-3.3.1目錄下,支持C/C++和JAVA語言,其它選項參見GCC提供的幫助說明。
5. 編譯
% make
這是一個漫長的過程。

6. 安裝
執行下面的命令將編譯好的庫文件等拷貝到${destdir}目錄中(根據你設定的路徑,可能需要管理員的許可權):
% make install
至此,GCC 3.3.1安裝過程就完成了。
6. 其它設置
GCC 3.3.1的所有文件,包括命令文件(如gcc、g++)、庫文件等都在${destdir}目錄下分別存放,如命令文件放在bin目錄下、庫文件在lib下、頭文件在include下等。由於命令文件和庫文件所在的目錄還沒有包含在相應的搜索路徑內,所以必須要作適當的設置之後編譯器才能順利地找到並使用它們。
6.1 gcc、g++、gcj的設置
要想使用GCC 3.3.1的gcc等命令,簡單的方法就是把它的路徑${destdir}/bin放在環境變數PATH中。我不用這種方式,而是用符號連接的方式實現,這樣做的好處是我仍然可以使用系統上原來的舊版本的GCC編譯器。
首先,查看原來的gcc所在的路徑:
% which gcc
在系統上,上述命令顯示:/usr/bin/gcc。因此,原來的gcc命令在/usr/bin目錄下。可以把GCC 3.3.1中的gcc、g++、gcj等命令在/usr/bin目錄下分別做一個符號連接:
% cd /usr/bin
% ln -s ${destdir}/bin/gcc gcc33
% ln -s ${destdir}/bin/g++ g++33
% ln -s ${destdir}/bin/gcj gcj33
這樣,就可以分別使用gcc33、g++33、gcj33來調用GCC 3.3.0的gcc、g++、gcj完成對C、C++、JAVA程序的編譯了。同時,仍然能夠使用舊版本的GCC編譯器中的gcc、g++等命令。

3. RN run-android 項目時為什麼提示安裝APP Debug失敗

能夠在eclipse上運行調試應用程序之前,你必須為它創建一個啟動項。啟動項指定哪個工程將被啟動,哪個activity開始工作,以及使用哪些模擬器選項等。
按照以下步驟塵激為Eclipse版本的應用程序創建合適的啟動項:
打開啟動項管理工具。
在Eclipse 3.3 (Europa)的版本中,酌情選擇 Run > Open RunDialog... or Run > Open Debug Dialog... 。
在Eclipse3.4 (Ganymede)版本中,酌情選擇 Run > Run Configurations...or Run > Debug Configurations... 。
在左邊的工程類型列表選擇Android Application選擇,雙擊(或者點擊右鍵選擇new),創建一個新的啟動項。
輸入啟動項名稱。
在Android標簽中,瀏覽要開始的工程和Activity 。
在Target標簽中,設置想要顯示的屏幕及網路屬性,以及其他任何模擬器啟動選項。
你可以在Common標簽中設置更多的選項.
按下Apply保存啟動配置,或者按下Run或Debug()。
運行和調試應用程序
一旦你設定了工程和工程啟動配置,你就可以按照以下的說明運行和調試應用程序了。
從eclipse主菜單,根據情況選擇Run>Run 或者 Run>Debug,開始運行或者調試活動啟動項。
注意,這里活動啟動項是在運行配置管理中最最近一次選中的那個。它不一定就是在Eclipse Navigation 面板中選擇的程序(如果有的話)
設置和修改活動啟動項,可以使用啟動項管理工具。如何獲得啟動項管理工具可以參考創建一個啟動項
運行或調試應用程序將觸發以下動作:
啟動模擬器,如果他還沒有開始運行。
編譯工程, 如果在上次編譯的基礎上修改過代碼,將重新編譯。在模擬器上安裝應用程序。
Run選項,開始運行程序。
Debug 在"Wait for debugger "模式下啟動程序,然後打開調試窗口並將Eclipse Java調試器和程序關聯。
利用其他IDEs和工具開發Android應用程序
通常我們使用安裝有ADT插件的eclipse Eclipse with the ADT plugin.來開發Android程序,這個插件將編輯,build和調試功能集成到IDE上。
然而,如果你想在其他的IDE上開發程序,例罩鉛如IntelliJ,或者使用沒有ADT插件的eclipse也可以。SDK提供了安裝,編譯,調試應用程序所需要的工具。
創建一個android工程
Android SDK包含一個activityCreator的程序,它將為工程產生多個stub文件和一個build文件。你可以用這個程序創建一個新的 Android工程或者在現有代碼上創建工程,如SDK中包含的例子。對於Linux 和Mac系統,SDK提供activityCreator.py,一個 Python腳本,Windows上則是activityCreator.bat一個批處理腳本。無論是哪種平台,用法是一樣的。
按以下步驟運行activityCreator創建Android工程:
在命令行下,切換到SDK下的tools/目錄下,為你的工程文件新建一個目錄。如果你是在現有代碼上創建工程,切換到程序的根目錄下。
運行activityCreator。在命令行下,你必須指定完全合格的類名作為參數。如果你是創建一個全新的工程,這個類代表的與它同名的stub類和腳本文件。如果是在現有代碼上創建工程,必須指定軟體包中其中一個Activity類的名稱。命令選項的腳本包括:
--out <folder> 設定輸出目錄。默認情況下輸出目錄為當前目錄。如果你想為工程文件創建一個新的目錄,可以使用這物兄好個選項來指向它。
--ide intellij, 在一個新的項目中生成IntelliJIDEA 工程文件。
這里有個例子:
~/android_linux_sdk/tools $ ./activityCreator.py --out myprojectyour.package.name.ActivityName
package: your.package.name
out_dir: myproject
activity_name: ActivityName
~/android_linux_sdk/tools $
activityCreator腳本生成以下文件和目錄(但是不能重寫已有文件):
AndroidManifest.xml 程序的清單文件,同時為工程指定Activity類。
build.xml 一個Ant文件,用來編譯/打包應用程序。
src/your/package/name/ActivityName.java 你指定的輸入Activity類。
your_activity.iml, your_activity.ipr, your_activity.iws [only with the-ide intelliJ flag] intelliJ工程文件
res/ 資源目錄.
src/ 源代碼目錄.
bin/ build腳本的輸出目錄.
現在你可以將開發文件夾移到任何地方,但是記住,必須使用tool/文件夾下的adb程序將文件發送到模擬器上。因此你需要在你工作環境和tools/文件夾之間活動。
當然你需要避免移動SDK目錄,因為它將打斷編譯腳本。(再重新build之前需要手動更新SDK的映射路徑)
編譯 android應用程序
使用activityCreator生成的Ant文件build.xml來編譯程序
如果你沒有,你可以通過Apache Ant home page得到Ant文件。安裝它,並確定它在你的可執行文件路徑下。
呼叫Ant之前,你需聲明JAVA_HOME環境變數,並將它設置為JDK的安裝路徑。
注 意:在windows上,JDK默認的安裝路徑為"ProgramFiles",這個路徑將會引起Ant失敗,因為路徑中間有空格。解決這個問題,你可以像這樣指定環境變數 JAVA_HOME:JAVA_HOME=c:\Prora~1\Java\ 然而簡單的解決方法是將JDK安裝在沒有空格的目錄下。例如:c:\java\jdk1.6.0_02.
如果你還沒有這么准備好,按照上面創建一個新的工程的介紹建立一個工程。
現在你可以為你的工程運行Ant編譯文件,只需在build.xml同文件夾下輸入ant即可。每次修改原文件或是資源,都需要重新運行ant,它將把最新版的應用程序打包以便deploy.
運行Android程序
運行一個編譯好的程序,你需要用adb工具將.apk文件載入到模擬器的/data/app/目錄下,用法如下面介紹。
啟動模擬器(命令行下運行sdk目錄下的/tools/emulator)。
模擬器切換到主畫面(最好不要在程序運行的時候向模擬器安裝程序,可以按home鍵離開應用程序)。
運 行adb,安裝myproject/bin./<appname>.apk文件。例如,安裝Lunar Lander 示例,命令行下,切換到SDK目錄下的/sample/LunarLander子目錄下,輸入../../tools/adbinstall bin/LunarLander.apk
在模擬器中,打開可執行程序列表,卷動屏幕,選中並啟動你的應用程序。
注意:當你第一次安裝一個Activity時,你可能需要在啟動項顯示之前,或者其它程序調用它之前重新啟動模擬器。因為軟體包管理工具通常只有在模擬器啟動時才能完全的審查manifests。
為程序附加調試器
這一節我們介紹如何在屏幕上顯示調試信息(例如CPU使用率),以及如何將IDE和模擬器上運行的程序關聯起來。
使用eclipse插件可以自動的生成調試器。但你也可以通過配置IDES來監聽調試埠得到調試信息。
啟動Dalvik Debug Monitor Server (DDMS) 工具 ,它在IDE和模擬器之間扮演著埠轉換服務的角色。?
設置模擬器調試配置選項。例如,等到調試信息被載入後才啟動應用程序。注意,很多調試選項無需DDMS也可以使用,例如模擬器上顯示CPU的使用效率,或者屏幕的刷新頻率。
配置IDE,使得調試時IDE與8700埠關聯 .how to set up Eclipse to debug your project. 包含以下信息。
配置IDE附加調試埠
DDMS將為每一個虛擬機分配一個特殊的調試埠,這個埠在模擬器上可以找到。你必須將你的IDE與此埠(虛擬機上信息欄中有列出這些埠)關聯或者是默認的埠8700。這樣可以使IDE 連接到模擬器上程序列表中的任一個程序。
你的IDE需要能夠關聯模擬器上正在運行的程序,顯示它的線程,並允許你掛起它,檢查它的狀態,設置斷點。如果你在開發設置面板選擇了「等待調試」,應用程序將等到Eclipse連接後才運行,所以你需要在連接之前設置斷點。
修改正在調試的程序,或者在當前程序運行時選擇「等待調試」將引起系統殺死這個應用程序。如果你的程序處於一種壞的狀態,你可以使用方式殺死它,方法很簡單,只需要設置和鉤掉復選框。

4. 89S51單片機中的DJNZ指令是怎麼用的呢 例如: DJNZ Rn ,rel ; Rn←(Rn)- 1

DJNZ指令有兩種格式:DJNZ Rn,rel和DJNZ direct,rel,握絕前者為雙位元組指令,其中第二個人位元組存儲rel的相對地址,范圍是-128~+127,所以轉移范圍很窄,所以轉移的位置為指令的當前PC值加上rel;第二條指令的第三個位元組也是存儲rel的,和第一條指令段塌姿的轉移方式相同,都是PC+rel,你的衫運想法是對的。

Sjmp實現原地跳轉時只能用$,沒聽說過直接用絕對地址的數值來表示的。

"D2"在源代碼中是標號,但是編譯器在將其翻譯為機器代碼時會自動計算出它的物理地址並且用在指令中。一般只源代碼中都使用標號來表示地址,幾乎不同數字來直接表示地址,因為計算地址是很復雜的問題。

5. RN之Image

一個用於顯示多種不同類型圖片的React組件,包括網路圖片、靜態資源、臨時的畢虛本地圖片、以及本地磁碟上的圖片(如相冊)等。詳細用法參閱 圖片文檔 。

載入的圖片有兩碧知種來源,一種是本地圖片,一種是網路圖片。

image載入本地圖片的方法比較簡單,一般只需要設置source 屬性 即可,例如:

在React-native開發中,載入本地圖片是不允許使用字元串變數來制定與載入的圖片地址,因為React native實在編譯時處理所有的require聲明,而不是在運行時動態的處理,所以下面的寫法是錯誤的:

載入網路圖片和載入本地圖片的方法相似,唯一的區別就是網路圖片的地址的網路地址,所以要在圖片的網路地址前加上uri標簽。因為是網路圖片,所以事先載入時不知道其大小,所以在設置圖片的屬性是需要設置圖片的大小。例如:

載入網路圖片是在運行時手慧燃動態的處理的,所以載入網路圖片是可以使用字元串變數來制定與載入的圖片的地址,例如:

Image作為一個開發中經常使用的組件,他還有其他豐富的屬性,詳情請看官方文檔之 Image組件

6. RN集成到現有Android項目中版本只能是0.20.1

當我在做RN集成游斗到原有的Android項目時,配置下面兩項gradle後,點擊 Sync Now 後,神弊磨沒什麼問題

當按照官網步驟繼續下一步,創建RNPageActivity類集成卜談ReactActivity,報錯了!!!

最後發現是react-native的版本居然是0.20.1版本,現在都到0.57.5了。

最後的解決方案是把在項目build.gradle中配置的

改成

重新編譯,發現已經變成了0.57.5了。

7. re從零開始的反編譯教程

寫在開頭,引用很喜歡的一句話: 要麼學!要麼不學!學和不學之間沒有中間值 不學就放棄,學就要去認真的學! --致選擇

為了回溯編譯過程(或對程序進行逆向工程),我們使用各種工具來撤銷匯編和編譯過程,這些工具就叫反匯編器和反編譯器。反匯編器撤銷匯編過程,因此我們可以得到匯編語言形式的輸出結果。反編譯器則以匯編語言甚至是機器語言為輸入,其輸出結果為高級語言。

數組的表示方式是:在基本類型前加上前中括弧「[」,例如int數組和float數組分別表示為:[I、[F;對象的表示則以L作為開頭,格式是 LpackageName/objectName;

(注意必須有個分號跟在最後),例如String對象在smali中為: Ljava/lang/String; ,其中 java/lang 對應 java.lang 包,String就是定義在該包中的一個對象。或許有人問,既然類是用 LpackageName/objectName; 來表示,那類裡面的內部類又如何在smali中引用呢?
答案是:在 LpackageName/objectName/subObjectName subObjectName 前加 $ 符號。

方法的定義一般為: Func-Name (Para-Type1Para-Type2Para-Type3...)Return-Type
注意參數與參數之間沒有任何分隔符,同樣舉幾個例子就容易明白

無序列表的使用,在符號"-"後加空格使用。如下:

https://www.jianshu.com/p/1c54c1ccf5cc

https://www.cnblogs.com/onelikeone/p/7594177.html

解決:點擊進去jd-gui,刪除試一試。再不行換最新版本

解析結束後進行編譯報錯
解決方法: https://blog.csdn.net/fuchaosz/article/details/104800802

Failed parse ring installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompress

解決方法:

降低gradle里版本,若出現
signatures do not match the previously installed version;

使用adb install命令在手機上安裝app時,遇到這個報錯。原因是新裝的app和手機上現有的舊版app沖突了。
解決方法:刪除手機上原來的app,再重新安裝即可。

可是轉念一想如果反編譯的apk都是Version 30 R+以上,難道我解壓後挨個改一遍gradle?太徹淡了,一定有解決方法,所以有了下面探究出現這個問題的解決方法:既然報錯是資源文件高版本不支持,而且沒有4位對齊,那麼不編譯資源文件就好了

APK簽名工具之jarsigner和apksigner:

https://blog.csdn.net/xzytl60937234/article/details/89088215?utm_medium=distribute.pc_relevant.none-task-blog-js_landingword-1&spm=1001.2101.3001.4242

利用apktool反編譯apk,並且重新簽名打包:

https://blog.csdn.net/qq_21007661/article/details/109851522?utm_medium=distribute.pc_relevant.none-task-blog-js_title-4&spm=1001.2101.3001.4242

驗證apktool能否使用

apktool -r d apk名字.apk,不反編譯資源文件,為什麼這么做,先挖個坑

錯誤提示沒有4位對齊和不支持30版本以上的資源文件。所有嘗試不編譯資源文件

解決4位對齊的方法:

查看當前目錄,生成了新文件:abc.keystor

使用JarSigner對apk進行簽名,命令如下

jarsigner -verbose -keystore abc.keystore -signedjar testx.apk src.apk abc.keystore

直接反編譯的apk產生上述錯誤

但是只編譯資源文件的apk安裝時

發現沒有使用V2進行簽名,這時候進行V2簽名, (apksigner,默認同時使用V1和V2簽名

所以先對只編譯資源文件的apk進行V2嘗試看能否成功

重復1(進行apktool -r d apk名字.apk)-->2 -->3 -->4( 不使用jarsigner而使用apksigner )

將生成的abc.keystore和打包回的apk( apktoolapp-debugdist 里的app-debug.apk)放入 C:Users aowei.lianAppDataLocalAndroidSdkuild-tools30.0.3 下,因為Android studio的SDK下有apksigner.bat.

對jarsigner只是apk進行了V1簽名;在Android7.0引入了V2簽名,因此,當進入sdk25.0.0及後續版本,會發現一個apksigner.bat執行腳本。

我們可以通過apksigner進行V2簽名,當然,apksigner默認是同時支持V1與V2的,於是:

學習了公鑰和密鑰的使用和區別,使用私鑰的加密演算法稱為對稱加密演算法,這種演算法實現是接收方和發送方公用一道密鑰,優點是效率高,缺點是安全性差,如果被第三人得知密鑰則信息泄露,由此衍生了公鑰加密演算法,也就是非對稱加密演算法,這個演算法是接收方給發送方公鑰,發送方用公鑰加密後發給接收方,接受方再用私鑰解密。這樣即使所有人知道公鑰也不會造成信息泄露。缺點是效率非常低。

此外了解了RSA簽名的大致過程,發送方擁有公鑰和私鑰,對信息進行摘要然後把摘要通過密鑰進行簽名,然後把簽名和信息一起發出去,那麼如何驗證該信息就是發送方發出的呢,這時候就使用到了公鑰驗證,通過公鑰對信息進行解簽,然後使用一樣的摘要演算法得到摘要,如果得到的摘要和解簽後的內容一致則說明是發送方發出。
總結就是公鑰加密,私鑰解密。公鑰驗證,私鑰簽名

RSA 密碼體制是一種公鑰密碼體制,公鑰公開,私鑰保密,它的加密解密演算法是公開的。由公鑰加密的內容可以並且只能由私鑰進行解密,而由私鑰加密的內容可以並且只能由公鑰進行解密。也就是說,RSA 的這一對公鑰、私鑰都可以用來加密和解密,並且一方加密的內容可以由並且只能由對方進行解密。

因為公鑰是公開的,任何公鑰持有者都可以將想要發送給私鑰持有者的信息進行加密後發送,而這個信息只有私鑰持有者才能解密。

它和加密有什麼區別呢?因為公鑰是公開的,所以任何持有公鑰的人都能解密私鑰加密過的密文,所以這個過程並不能保證消息的安全性,但是它卻能保證消息來源的准確性和不可否認性,也就是說,如果使用公鑰能正常解密某一個密文,那麼就能證明這段密文一定是由私鑰持有者發布的,而不是其他第三方發布的,並且私鑰持有者不能否認他曾經發布過該消息。故此將該過程稱為「簽名」。

Android 簽名機制 v1、v2、v3

進入JDK/bin, 輸入命令

參數:

進入Android SDK/build-tools/SDK版本, 輸入命令

參數:

例如:

最後安裝加 -t :

附上參考鏈接:

https://blog.csdn.net/A807296772/article/details/102298970

配置NDK的時候如果按鈕是灰色的,手動配置

直接在javac後面指定編碼是UTF-8就是了。

需要注意的是要加上* -classpath .其中classpath後面的一個黑點是不能省略的。

編譯好後如何導入so庫

成功運行後發現lib目錄下已經apk編進去so了

https://www.52pojie.cn/thread-732298-1-1.html
本節所有到的工具和Demo

IDA
鏈接: https://pan..com/s/15uCX8o6tTSSelgG_RN7kBQ

密碼:ftie

Demo
鏈接: https://pan..com/s/1vKC1SevvHfeI7f0d2c6IqQ

密碼:u1an

找到so並打開它 因為我的機型是支持arm的所以我這里打開的是armeabi文件夾下的so 如果機型是x86模式的那麼這里要打開x86模式下的libJniTest.so

編譯過程:

按住鍵盤組合鍵 shift + f12 打開字元串窗口 這個窗口將會列舉出so中所包含的所有字元串 因為上節課我們只編寫了一個字元串 所以這里只有一個hello 52pojie! 如果打開的是x86的so這里還會有一些.so 但是字元串只有這一個

滑鼠點在hello 52pojie!字元串上,打開 Hex mp窗口,修改hello 52pojie!對應內存地址的內容
關於字元對應的16進制可以在網路搜索ascii碼表 找到字元所對應的16進制

因為我要把hello 52pojie!修改成hello world! 是不是只要找到每個字元所對應的hex修改就好了
這里我看到 hello 52pojie!對應的hex是:68 65 6C 6C 6F 20 35 32 70 6F 6A 69 65 21
我在ascii碼表上找到world所對應的十六進制是:77 6F 72 6C 64
所以hello world! 對應的十六進制是:68 65 6C 6C 6F 20 77 6F 72 6C 64 21

注意編輯的時候游標暫停的位置只有先輸入字母才能更改成功,修改好後 右鍵Apply changes應用

退出後保存

此時已經so修改完畢

大功告成,hello 52pojie! --> hello world!

8. rn的debug模式怎樣關閉搖一搖出現菜單

首先確保你的電腦和手機設備在同一個Wi-Fi環境下。
其次你需要開啟USB調試才能在你的設備上安裝你的APP。一定要確定你已經打開設備的USB調試開關!
確保你的設備已經被成功連接,可以輸入adb devices核實:

在右邊那列看到device說明你的設備已經被正確連接了。注意,你只應當連接僅僅一個設備。
因為如果你連接了多個設備(包含模擬器在內),你後續的一些操作可能會失敗。拔掉不需要的設備,或者關掉模擬器,確保adb devices的輸出只有一個是連接狀態。
現在我們可以運行 react-native run-android 來在設備上安裝並啟動我們的應用了


句命令執行後,實際上就是在本地起一個node server,並且將你的android
project編譯打包,再上傳到你的手機上。然後當js文件有改動或debug模式下手動選擇reload
js時候會自動更新bundle文件,達到改動js文件後即時顯示的調試效果。
這「紅屏」又是什麼鬼?別著急,是正常的,我們需要連接上開發伺服器,下面的步驟會解決這個問題。

搖晃手機,或者運行adb shell input keyevent 82,可以調出開發者菜單。

點擊進入Dev Settings
點擊Debug server host for device
輸入你電腦裂氏的IP地址和埠號(譬如我的是192.168.3.15:8081)

注意:如果你的設備是android5.0以上版本(API 21+),就不用折騰這步了
而是:運肆橋散行adb reverse tcp:8081 tcp:8081 (建立一個從設備向電腦轉發的埠,前提是設備和電腦通過USB相連)
不需要更多配置,你就可以使用Reload JS和其它的開發選項了
Chrome開發者工具
在Chrome上調試js代碼,需要在開發菜單中選擇Debug JS,這會打開一個新的頁。

Chrome中,按下? + option + i或者選擇視圖(View) -> 開發者(Developer) ->
開發工具(Developer Tools)來打開開發工具控制台。打開有異常時暫停(Pause On Caught
Exceptions)選項,能夠獲得更好的開發體驗。
Chrome中並不能直接看到App的用戶界面,而只能提供console的輸出,以及在sources項中斷點調試js腳本。

要查看APP日誌?
在終端下運行adb logcat *:S ReactNative:V ReactNativeJS:V可以看到你的應用的日誌。

實時刷新
這個選項可以在你的js代碼變更了之後,自動觸發所連設備或者模擬器自動刷新。
開啟方法:先打開開發菜單,選擇Dev Settings,然後選擇Auto reload on JS change選項。
到此才能完整的調試Android RN, 繁瑣到累絕不愛。。
等等,能否想辦法簡消物化一下過程?

既然我們的RN項目里包含了完整的android工程,何不把android工程導入到android studio 去運行?不但可以同時查看js的日誌和native的日誌,而且開發android的同學最熟悉AS,利用AS的快捷鍵和各類插件提升調試效率。
have a try , 答案是肯定的!
執行react-native start 也可以起一個node server,只是它不幫你安裝APP到device 。

以上就是我踩坑後整理的方法,按這套組合拳就可以愉快地調試了。水平有限,拋磚引玉,如果你有更好的方法!歡迎拍磚!
此處插播一個廣告:拍磚請拍到我們的杏樹林開放空間(246078103),期待感興趣的同學加入。
之後要解決的一些issue
1,關於設備MinSdkVerison
RN 只支持Android4.1.2(API16)以上設備,4.0根據網路數據大概佔比0.7比例,隨著大部分app已經不支持4.0以下設備了,這塊倒還可以接受 , 目前我們的病歷夾是3.0(API-11) , 口袋是4.0(API-14)
2,我們的androidRN現在只能通過Debug JS才能渲染出界面,而不能正常的用Reload JS
3,在界面跳轉時卡的令人發指

9. React Native 第三方庫SDK版本不兼容

1.在RN項目中,經常會引入很多第三方插件庫,如果只是單純的JS庫,一般比較好解決,但當引入一些原生插件庫時,需要非常謹慎。

android工程經常因為SDK編譯版本不一致導致報錯。

下圖所示錯誤初步以為是有第三方庫使用28compileSdk,與主工程中告喊27不兼容導致,嘗試使用

configurations.all {

    resolutionStrategy.force 'com.android.support:support-annotations:27.1.1'

}

對特定庫進行強制依賴,通過編譯,但在打包時始終會提示如下./gradle/cache中未找到兩個資源。只得將主工程改為28進行嘗試。

在RN項目的主工程Android目錄下的build.gradle進行知友胡如下配置,可使的一些比較完善的庫讀取主工程中的配置信息,從而保證第三方庫與主工程中compileSdkVersion等信息一致。

一些第三方庫的老舊版本,在內部寫死了搭攔配置信息,如下圖所示,則需要我們手動更改與主工程配置保持一致

一些比較完善的第三方庫,則獲取主工程android/build.gradle文件里的ext配置信息,切記檢查主工程中的配置無誤。

使用gradlew app:dependencies 命令查看項目依賴結構時,發現只有react-native-pdf的依賴中引入了com.github.barteksc:android-pdf-viewer:3.1.0-beta.1,此中依賴於support-v4,故用 exclude mole:'support-v4'命令排除依賴,然而並未解決問題

對於無法排除的第三方依賴庫問題,進行全部屏蔽,逐一放開測試,最終定位於react-native-device-info庫中,該版本implementation了『com.google.android.gms:play-services-gcm',導致。在主工程的build.gradle中配置如下解決。

ext{

googlePlayServicesVersion ="15.0.1"

}

RN項目通常固定package.json中的依賴版本,故該庫過於老舊導致,github上最新的版本build.gradle如下

10. 自己可以編譯安卓源碼

用最新的Ubuntu 16.04,請首先確保自己已經安裝了Git.沒安裝的同學可以通過以下命令進行安裝:

sudo apt-get install git git config –global user.email 「[email protected]」 git config –global user.name 「test」

其中[email protected]為你自己的郵箱.

簡要說明

android源碼編譯的四個流程:1.源碼下載;2.構建編譯環境;3.編譯源碼;4運行.下文也將按照該流程講述.

源碼下載

由於某牆的原因,這里我們採用國內的鏡像源進行下載.
目前,可用的鏡像源一般是科大和清華的,具體使用差不多,這里我選擇清華大學鏡像進行說明.(參考:科大源,清華源)

repo工具下載及安裝

通過執行以下命令實現repo工具的下載和安裝

mkdir ~/binPATH=~/bin:$PATHcurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repochmod a+x ~/bin/repo

補充說明
這里,我來簡單的介紹下repo工具,我們知道AOSP項目由不同的子項目組成,為了方便進行管理,Google採用Git對AOSP項目進行多倉庫管理.在聊repo工具之前,我先帶你來聊聊多倉庫項目:

我們有個非常龐大的項目Pre,該項目由很多個子項目R1,R2,...Rn等組成,為了方便管理和協同開發,我們為每個子項目創立自己的倉庫,整個項目的結構如下:


這里寫圖片描述

執行完該命令後,再使用make命令繼續編譯.某些情況下,當你執行jack-admin kill-server時可能提示你命令不存在,此時去你去out/host/linux-x86/bin/目錄下會發現不存在jack-admin文件.如果我是你,我就會重新repo sync下,然後從頭來過.

錯誤三:使用emulator時,虛擬機停在黑屏界面,點擊無任何響應.此時,可能是kerner內核問題,解決方法如下:
執行如下命令:

  • ./out/host/linux-x86/bin/emulator -partition-size 1024 -kernel ./prebuilts/qemu-kernel/arm/kernel-qemu-armv7

  • 通過使用kernel-qemu-armv7內核 解決模擬器等待黑屏問題.而-partition-size 1024 則是解決警告: system partion siez adjusted to match image file (163 MB >66 MB)

    如果你一開始編譯的版本是aosp_arm-eng,使用上述命令仍然不能解決等待黑屏問題時,不妨編譯aosp_arm64-eng試試.

    結束吧

    到現在為止,你已經了解了整個android編譯的流程.除此之外,我也簡單的說明android源碼的多倉庫管理機制.下面,不妨自己動手嘗試一下.

    熱點內容
    加密貨幣app 發布:2025-07-14 20:46:57 瀏覽:553
    醫院防汛演練方案與腳本 發布:2025-07-14 20:41:11 瀏覽:777
    公網ip做域伺服器地址 發布:2025-07-14 20:40:13 瀏覽:52
    php獲取幾 發布:2025-07-14 20:22:20 瀏覽:376
    舊安卓如何刷入最新安卓 發布:2025-07-14 20:16:14 瀏覽:763
    伺服器或網路不給力是什麼意思 發布:2025-07-14 20:15:36 瀏覽:318
    爬網站資料庫 發布:2025-07-14 20:15:20 瀏覽:520
    邵雍的演算法 發布:2025-07-14 20:13:49 瀏覽:119
    離線燒錄加密 發布:2025-07-14 20:12:13 瀏覽:620
    奧迪怎麼查配置 發布:2025-07-14 20:12:07 瀏覽:832