NativeScript / NativeScript/nativescript-cli
TNS majority of output missing on Android
還沒有人認領這個 Issue。
- 主要語言
- JavaScript
- 星號
- 1.1k
- 分支
- 204
- 平均合併
- 1 天 9 小時
- 30 天內合併 PR
- 8
描述
Did you verify this is a real problem by searching the
Searched the issues in the repo.
Tell us about the problem
If the Android App crashes with a thread dump; it only logs a small amount (useless part) of the log of why it crashed.
TOTAL Log TNS outputted:
08-29 20:20:25.013 5080 5080 F art : art/runtime/java_vm_ext.cc:410] from java.lang.Object
com.tns.Runtime.callJSMethodNative(int, int, java.lang.String, int, boolean, java.lang.Object[])
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #40 pc 000dda38
/data/app/org.nativescript.demo-1/lib/x86/libNativeScript.so (Java_com_tns_Runtime_callJSMethodNat
ive+152)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #41 pc 002c29a4
/data/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod
Native(int, int, java.lang.String, int, boolean, java.lang.Object[])+200)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #42 pc 002c39ab
/data/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.dispatchCall
JSMethodNative(int, java.lang.String, boolean, long, java.lang.Class, java.lang.Object[])+607)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #43 pc 002c2838
/data/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod
Impl(java.lang.Object, java.lang.String, java.lang.Class, boolean, long, java.lang.Object[])+1212)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #44 pc 002c20aa
/data/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod
(java.lang.Object, java.lang.String, java.lang.Class, boolean, long, java.lang.Object[])+254)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #45 pc 002c218a
/data/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod
(java.lang.Object, java.lang.String, java.lang.Class, boolean, java.lang.Object[])+158)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] native: #46 pc 002c2226
/data/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod
(java.lang.Object, java.lang.String, java.lang.Class, java.lang.Object[])+90)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] at com.tns.Runtime.call
JSMethodNative(Native method)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] at com.tns.Runtime.disp
atchCallJSMethodNative(Runtime.java:1116)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] at com.tns.Runtime.call
JSMethodImpl(Runtime.java:996)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] at com.tns.Runtime.call
JSMethod(Runtime.java:983)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] at com.tns.Runtime.call
JSMethod(Runtime.java:967)
08-29 20:20:25.014 5080 5080 F art : art/runtime/java_vm_ext.cc:410] at com.tns.Runtime.call
JSMethod(Runtime.java:959)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #42 pc 000dda38 /d
ata/app/org.nativescript.demo-1/lib/x86/libNativeScript.so (Java_com_tns_Runtime_callJSMethodNative+
152)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #43 pc 002c29a4 /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethodNati
ve(int, int, java.lang.String, int, boolean, java.lang.Object[])+200)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #44 pc 002c39ab /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.dispatchCallJSMe
thodNative(int, java.lang.String, boolean, long, java.lang.Class, java.lang.Object[])+607)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #45 pc 002c2838 /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethodImpl
(java.lang.Object, java.lang.String, java.lang.Class, boolean, long, java.lang.Object[])+1212)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #46 pc 002c20aa /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod(jav
a.lang.Object, java.lang.String, java.lang.Class, boolean, long, java.lang.Object[])+254)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #47 pc 002c218a /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod(jav
a.lang.Object, java.lang.String, java.lang.Class, boolean, java.lang.Object[])+158)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] native: #48 pc 002c2226 /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod(jav
a.lang.Object, java.lang.String, java.lang.Class, java.lang.Object[])+90)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thodNative(Native method)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.dispatch
CallJSMethodNative(Runtime.java:1116)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thodImpl(Runtime.java:996)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thod(Runtime.java:983)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thod(Runtime.java:967)
08-29 20:20:25.244 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thod(Runtime.java:959)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #45 pc 000dda38 /d
ata/app/org.nativescript.demo-1/lib/x86/libNativeScript.so (Java_com_tns_Runtime_callJSMethodNative+
152)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #46 pc 002c29a4 /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethodNati
ve(int, int, java.lang.String, int, boolean, java.lang.Object[])+200)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #47 pc 002c39ab /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.dispatchCallJSMe
thodNative(int, java.lang.String, boolean, long, java.lang.Class, java.lang.Object[])+607)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #48 pc 002c2838 /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethodImpl
(java.lang.Object, java.lang.String, java.lang.Class, boolean, long, java.lang.Object[])+1212)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #49 pc 002c20aa /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod(jav
a.lang.Object, java.lang.String, java.lang.Class, boolean, long, java.lang.Object[])+254)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #50 pc 002c218a /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod(jav
a.lang.Object, java.lang.String, java.lang.Class, boolean, java.lang.Object[])+158)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] native: #51 pc 002c2226 /d
ata/app/org.nativescript.demo-1/oat/x86/base.odex (java.lang.Object com.tns.Runtime.callJSMethod(jav
a.lang.Object, java.lang.String, java.lang.Class, java.lang.Object[])+90)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thodNative(Native method)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.dispatch
CallJSMethodNative(Runtime.java:1116)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thodImpl(Runtime.java:996)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thod(Runtime.java:983)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thod(Runtime.java:967)
08-29 20:20:25.245 5080 5080 F art : art/runtime/runtime.cc:372] at com.tns.Runtime.callJSMe
thod(Runtime.java:959)
ActivityManager: Process org.nativescript.demo (pid 5080) has died
You can see from the log; all the important parts of the log is missing. In fact what it does currently print is completely worthless as it is always missing the actual cause which is typically partially explained in the last thread and fully explained in the first thread dump. Which then requires me to open another terminal and do a adb logcat to actually get the log I need which produced:
08-29 20:20:24.985 5080 5080 E art : JNI ERROR (app bug): attempt to pass an instance of javax
.net.ssl.TrustManager[] as argument 2 to okhttp3.OkHttpClient$Builder okhttp3.OkHttpClient$Builder.s
slSocketFactory(javax.net.ssl.SSLSocketFactory, javax.net.ssl.X509TrustManager)
08-29 20:20:25.013 5080 5080 F art : art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APP
LICATION: bad arguments passed to okhttp3.OkHttpClient$Builder okhttp3.OkHttpClient$Builder.sslSocke
tFactory(javax.net.ssl.SSLSocketFactory, javax.net.ssl.X509TrustManager) (see above for details)
(many many thread dump lines deleted)
08-29 20:20:25.355 243 243 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr ------
--
08-29 20:20:25.373 243 243 F DEBUG : Abort message: 'art/runtime/java_vm_ext.cc:410] JNI DETEC
TED ERROR IN APPLICATION: bad arguments passed to okhttp3.OkHttpClient$Builder okhttp3.OkHttpClient$
Builder.sslSocketFactory(javax.net.ssl.SSLSocketFactory, javax.net.ssl.X509TrustManager) (see above
for details)'
Both parts of the error messages are actually in the logging gotten by ADB; but neither show up from TNS...
Which platform(s) does your issue occur on?
Android
Please provide the following version numbers that your issue occurs with:
- CLI: 4.2.0
- Cross-platform modules: 4.2.0
- Plugin(s): Theme-Core
Please tell us how to recreate the issue in as much detail as possible.
I'm in the process of creating a new plugin; Basically anything that causes the engine to abort out where the engine outputs all the thread backtraces. The Backtraces and error messages that are output at the top are missing, and all that is output is just a very tiny part of the stack trace (it appears only the middle of one thread, TNS logs).
Is there code involved?
In my case I duplicated it a many times as the docs weren't real clear on what was expected. So the error in the logs above actually is slightly different than the code below. The code below produces the same type of error but it is a much smaller code sample for you to easily duplicate. 😀
var loadKeystore = function(keyStoreName, keyStorePassword, type) {
var keyStoreType = type || java.security.KeyStore.getDefaultType();
var _keystore = java.security.KeyStore.getInstance(keyStoreType);
var keyStorePath = keyStoreName;
if (keyStoreName.indexOf("~/") === 0) {
keyStorePath = keyStorePath.replace("~/", fs.knownFolders.currentApp().path + "/");
}
var readStream = new java.io.FileInputStream(keyStorePath);
_keystore.load(readStream, keyStorePassword);
};
loadKeystore("~/client.p12", "test", "PKCS12");
(Client.p12 certificate in zip file)
client.zip
This is a test generated client.p12 unused by anything. So that you don't have to create one.
The crash is caused by the _keystore.load, because it expects the keyStorePassword to actually be an array of characters, not a string. So it will crash out with a JNI variable exception...
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
首先,使用提供的 JavaScript keystore 範例重現 Android 引擎中止,然後將 TNS 輸出與 issue 中顯示的完整 adb logcat 輸出進行比較。追蹤 TNS 如何選取並列印當機輸出;完成的標準是保留開頭的錯誤訊息和相關執行緒傾印,而不是只保留中間的一段。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- android, javascript
- 領域
- cli, mobile-dev, observability
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100