1. 程式人生 > >apk自帶某些jar包,卻報找不到某個方法問題(自帶jar包包含此方法)

apk自帶某些jar包,卻報找不到某個方法問題(自帶jar包包含此方法)

售後報一個問題,升級系統後,某彩票apk 開啟後黑屏, 但是該apk再該平臺升級以前是執行良好的.

檢視log,發現 報以下問題:

 5252 01-01 13:49:08.567 I/System.out(13643): java.lang.NoSuchMethodError: org.jsoup.parser.Parser.xmlParser
 5253 01-01 13:49:08.567 I/System.out(13643):     at cn.pcai.echart.core.log.LogIniter.parseConf(LogIniter.java:45)
 5254 01-01 13:49:08.567 I/System.out(13643):     at cn.pcai.echart.core.log.LogIniter.doReset(LogIniter.java:120)
 5255 01-01 13:49:08.567 I/System.out(13643):     at cn.pcai.echart.core.log.LogIniter.reset(LogIniter.java:36)
 5256 01-01 13:49:08.567 I/System.out(13643):     at cn.pcai.echart.ext.service.WorkspaceServiceImpl.initApp(WorkspaceServiceImpl.java:39)
 5257 01-01 13:49:08.567 I/System.out(13643):     at cn.pcai.echart.ext.BeanFactoryIniter.init(BeanFactoryIniter.java:65)
 5258 01-01 13:49:08.567 I/System.out(13643):     at cn.pcai.echart.MyApplication.onCreate(MyApplication.java:56)
 5259 01-01 13:49:08.567 I/System.out(13643):     at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
 5260 01-01 13:49:08.567 I/System.out(13643):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4332)
 5261 01-01 13:49:08.567 I/System.out(13643):     at android.app.ActivityThread.access$1500(ActivityThread.java:135)
 5262 01-01 13:49:08.567 I/System.out(13643):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
 5263 01-01 13:49:08.567 I/System.out(13643):     at android.os.Handler.dispatchMessage(Handler.java:102)
 5264 01-01 13:49:08.567 I/System.out(13643):     at android.os.Looper.loop(Looper.java:136)   
 5265 01-01 13:49:08.567 I/System.out(13643):     at android.app.ActivityThread.main(ActivityThread.java:5012)
 5266 01-01 13:49:08.567 I/System.out(13643):     at java.lang.reflect.Method.invokeNative(Native Method)
 5267 01-01 13:49:08.567 I/System.out(13643):     at java.lang.reflect.Method.invoke(Method.java:515)
 5268 01-01 13:49:08.567 I/System.out(13643):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
 5269 01-01 13:49:08.567 I/System.out(13643):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
 5270 01-01 13:49:08.567 I/System.out(13643):     at dalvik.system.NativeStart.main(Native Method)
 5271 01-01 13:49:08.581 I/MTK_FPP (  915): function start:fpp_gpio_configure,arg:gpio_index=16
 5272 01-01 13:49:08.581 I/MTK_FPP (  915): function end:fpp_gpio_configure,arg:rRet=0      

從log看是找不到某個方法, 我們反編譯了改apk, 卻發現反編譯後的程式碼裡包含了 改方法.

這就有點奇怪,明明apk自身帶改方法,為什麼卻報找不到改方法呢?

於是我們大膽推測, 我們在新的系統裡的BOOTCLASSPATH裡添加了某個jar包, 該jar包也有一個 org.jsoup.parser.Parser類, 但是沒有xmlParse()方法.

於是我們再板子裡搜尋:

執行命令:

grep -r "jsoup" /


結果:

.........................................................

./data/dalvik-cache/[email protected]

@[email protected]:Lorg/jsoup/nodes/Entities;
./data/dalvik-cache/[email protected]@[email protected]:'Lorg/jsoup/nodes/Node$OuterHtmlVisitor;
./data/dalvik-cache/[email protected]@[email protected]:Lorg/jsoup/nodes/Node;
./data/dalvik-cache/[email protected]@[email protected]:Lorg/jsoup/nodes/TextNode;
./data/dalvik-cache/
[email protected]
@[email protected]: Lorg/jsoup/nodes/XmlDeclaration;
./data/dalvik-cache/[email protected]@[email protected]:"Lorg/jsoup/parser/CharacterReader;
./data/dalvik-cache/[email protected]@[email protected]:Lorg/jsoup/parser/ParseError;
./data/dalvik-cache/[email protected]@[email protected]:Lorg/jsoup/parser/Parser;
./data/dalvik-cache/[email protected]@[email protected]:Lorg/jsoup/parser/Tag;
./data/dalvik-cache/[email protected]@[email protected]:Lorg/jsoup/parser/Token$1;


.....................................................

看到了麼?  有一個叫com.tcl.tclvoicecontrol.jar 包裡面有org.jsoup.parser.Parser類,  我們在看看BOOTCLASSPATH裡是否有這個jar包.

執行: cat $BOOTCLASSPATH

結果:

/system/bin/sh: cat: /system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/com.mediatek.util.jar:/system/framework/com.mediatek.tv.jar:/system/framework/com.mediatek.tv.custom.jar:/system/framework/com.mediatek.dm.jar:/system/framework/com.mediatek.common.capture.jar:/system/framework/com.mediatek.record.jar:/system/framework/com.mediatek.common.PhotoPlayer.jar:/system/framework/com.mediatek.common.powercontrol.jar:/system/framework/com.mediatek.wfdsink.jar:/system/framework/com.tcl.tvmanager.jar:/system/framework/android.tclwidget.jar:/system/framework/com.tcl.device.authentication.jar:/system/framework/com.tcl.deviceinfo.jar:/system/framework/com.tcl.devicemanager.jar:/system/framework/com.tcl.seeker.jar:/system/framework/com.tcl.os.storage.jar:/system/framework/com.tcl.os.system.jar:/system/framework/com.tcl.net.ethernet.jar:/system/framework/com.tcl.media.jar:/system/framework/com.tcl.screenrecorder.jar:/system/framework/com.tcl.adsystem.jar:/system/framework/com.tcl.net.pppoe.jar:/system/framework/com.tcl.tclvoicecontrol.jar

果然com.tcl.tclvociecontorl.jar再BOOTCLASSPATH裡,

接著把com.tcl.tclvoicecontrol進行了反編譯, 發現org.jsoup.parser.Parser類裡果然沒有xmlParse()方法, 這下原因終於確定了.

結論: 每當虛擬機器啟動的時候 ,就會預先載入BOOTCLASSPATH裡的類, 如果BOOTCLASSPATH裡的某些類和apk自身帶的某些類報名一樣, 那麼會使用BOOTCLASSPATH裡的類, 因為這些類是在虛擬機器啟動的時候載入的. 這就會造成一個很奇怪的現象, apk裡自帶某些類,卻找不到該類的一些方法,因為bootclasspath裡的同名的類沒有該方法.

相關推薦

apk某些jar,某個方法問題(jar包含方法)

售後報一個問題,升級系統後,某彩票apk 開啟後黑屏, 但是該apk再該平臺升級以前是執行良好的. 檢視log,發現 報以下問題:  5252 01-01 13:49:08.567 I/System.out(13643): java.lang.NoSuchMethodErr

Vs 中關於專案中的某 NuGet 程式還原失敗:到“xxx”版本的程式“xxx”

問題:       首先出現這個bug的是在我的vs2017社群版的ide上,這兩天使用了出現了一個非常神奇的問題,就是我程式中的nuget包總提示找不到原始檔,並且我點選Nuget還原的話還一直提示著一個問題。 嚴重性 程式碼 說明 專案 檔案 行 禁止顯示狀態錯誤 專案 JJ

IDEA手動引入jar到maven中去,啟動程式依然到或者存在jar的解決辦法

今天博主在通過maven的pom.xml遠端下載一個modelmapper的jar包,發現下載不了,專案需要用到此jar包,所以樓主只有通過手動匯入jar包的方法來引入到工程中去: 當時博主是參考這個部落格連結來匯入的:https://blog.csdn.net/baidu_32492845

maven的dependencies已經引入jar 執行程式時提示jar

我是在連線oracle資料庫時 在pom.xml裡新增依賴後確認dependencies已經引入jar包,而專案執行時卻報ClassNotFound多次嘗試後,發現是因為在引入依賴時是複製以前的內容而忘記刪除scope標籤導致的 例如: 在maven的pom.xml裡面   

IntelliJ IDEA 2018.2裡到javax.servlet的jar

在初次使用 IntelliJ IDEA 中,當你使用javax.servlet包下的類時(例:javax.servlet.http.HttpServlet), 在你會發現在IntelliJ IDEA裡無法成功編譯這個程式。 解決方案如下: 1、選中專案(在IntelliJ中

Androidy打jar到目標檔案(到bundles目錄和jar)解決

1、說明 以前我們打包會在LibModule下的build.gradle中新增以下命令: task clearJar(type: Delete) { delete 'build/outputs/' } task makeJar(type: Copy) {

centos配置GPU的caffe 安裝依賴的yum install

yum install protobuf-devel leveldb-devel snappy-devel opencv-devel boost-devel hdf5-devel 實際上,hdf5-devel這個安裝會找不到。 但是:yum install gflags-devel glog-dev

關於引用第三方jar,生成自己jar執行時到第三方jar的解決方案

1.將所需的第三方jar包匯入專案檔案中的lib目錄下 2.在專案檔案目錄下建立MANIFEST.MF檔案,編輯檔案,如下圖: 注意: (1)Mainifset-Version:/Class-Pat

引入了jar,還是到 class 的問題

第一次用java 做 web 專案,遇到個奇怪的問題,引入了jar  包,但是還是找不到對應的class 解決辦法: 右鍵專案     選  p'roperties       deployment  assembly     add  jar包

IntelliJ IDEA裡到javax.servlet的jar

今天在複習Java Web時,因為初次使用 IntelliJ IDEA 中,當使用javax.servlet包下的類時(例:javax.servlet.http.HttpServletRequest),

springboot打jar後,到mybatis的實體類

剛剛接觸spring boot,專案中整合了mybatis,但配置沒用mybatis-spring-boot-autoconfigure自動配置, 導致mybatis的配置: mybatis.type-aliases-package=com.example.domain

關於專案打成jar檔案資源到的同學們你們有救了!!!

前言 說來話長那麼就長話短了,前幾天一個專案裡面有個操作是載入類的時候去讀取資原始檔夾下面的檔案資源,專案在Eclipse和IDEA上面執行的好好的,BUT一打成jar包說檔案找不到。去網上搜了搜發現,jar包是一個檔案不是一個資料夾當你以流的形式讀取的時候當

C#導入c++ dll到dll文件 masm32調用c++類庫

dll sca masm32 ++ 時也 類型 dumpbin exports 另一個   最近需要在C#下調用一個c++ dll庫,不管怎樣dllimport就是報錯找不到該dll文件,路徑、函數名稱、參數、dllimport參數逐個檢查確認無誤也無濟於事,無奈想用其他語

maven 搭建spring框架到applicationContext-*.xml文件

lte 重新 ID -- 直接 dao 成了 war包 config 問題原因: 早使用maven搭建web工程時,並沒有進行分布式搭建,我是把pojo、dao、service、web 四層直接放在了一個父工程中,並沒有一個一個的子工程區分,而是直接打包成了一個war包

Android Studio 到EventBus/ButterKnife等第三方解決方案

eventbus 圖片 com invalid Coding oid res validate 快的 廢話不多說,有圖有真相 Q·:可以正常Build,debug就是看著不舒服,代碼提示也出不來。 解決方案: 1. invalidate

VS2017打開VS2010項目到*.xaml”錯誤

mod state str wrapper security 詳細 mes time acc VS2017打開VS2010項目報 “找不到*.xaml”錯誤。詳細如下: 未處理System.IO.IOExceptionMessage: &ldquo

Python權威文檔,如果你需要某些在基礎書籍中到的特性,如果你英文還可以

python tran 語言 spa doc 基礎 docs 分享圖片 http 《Python Documention》 --在Python自帶的IDE中,按F1鍵,或者點擊 幫助 -> Python Docs 【重要章節】   藍框之後的部分   包括 Pyth

VMware中linux虛擬機器到VMware Tools的壓縮

說在前面 裝完CentOS 感覺桌面解析度太小,需要裝 VMware Tools。 移除CD驅動 右鍵虛擬機器,找到安裝VMware Tools,但是桌面死活找不到安裝包,只有一個 Vmware Tools虛擬光碟機. 檢視原因是因為在安裝 CentOS的時候安裝

記錄一次子母問題導致到路徑

根據這篇文章https://bbs.pediy.com/thread-246767.htm的思路 以廣州圈app為案例,分析其的程式碼發現,採用的是外掛化載入方式,下載的apk包只是一個載體,真正的apk隱藏在assets裡面,不過這樣感覺還是挺好的,可以減小apk包的大小,至於這種方式有沒

專案某個已經編譯好的class錯誤

今天下午做專案,剛從git上更新了程式碼,然後一更新就報找不到某個class的錯誤,這些class全是我自己的類,但是就是找不到,build也不讓,也是報錯,生氣之下,讓我把所有視窗都關了,專案也關閉了,再重啟之後,突然變好了,真是神奇。   好了之後,繼續創作專案,然後又rebuil