{"id":17918956,"url":"https://github.com/trinea/java-dynamic-load-jar","last_synced_at":"2025-03-23T23:31:15.902Z","repository":{"id":17804944,"uuid":"20692202","full_name":"Trinea/java-dynamic-load-jar","owner":"Trinea","description":"solve class loader isolation problem when load same classes in different jar","archived":false,"fork":false,"pushed_at":"2020-02-16T13:50:49.000Z","size":22,"stargazers_count":121,"open_issues_count":1,"forks_count":68,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-03-19T00:41:30.691Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.trinea.cn/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Trinea.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-06-10T16:09:58.000Z","updated_at":"2025-02-21T15:47:18.000Z","dependencies_parsed_at":"2022-09-02T12:24:01.833Z","dependency_job_id":null,"html_url":"https://github.com/Trinea/java-dynamic-load-jar","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinea%2Fjava-dynamic-load-jar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinea%2Fjava-dynamic-load-jar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinea%2Fjava-dynamic-load-jar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Trinea%2Fjava-dynamic-load-jar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Trinea","download_url":"https://codeload.github.com/Trinea/java-dynamic-load-jar/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245186646,"owners_count":20574551,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-28T20:13:44.623Z","updated_at":"2025-03-23T23:31:15.589Z","avatar_url":"https://github.com/Trinea.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Java Dynamic Load Jar\r\n=====================\r\n\r\nSolve class loader isolation problem when load same classes in different jar, but not work for android because of dalvik pre-verification failed, [cry...](https://github.com/Trinea/java-dynamic-load-jar#android \"View Details\")\r\n  \r\n\r\n### Dev Tools App\r\nThe Dev Tools App is a powerful android development tool that can help you improve efficiency greatly, It can be used to view the latest open source projects, view activity history, view manifest, decompile, color picker, extract apk or so, view app info, open or close the options in the developer options quickly, and more.  \r\n  \r\nYou can download it from **[DevTools@Google Play](https://play.google.com/store/apps/details?id=cn.trinea.android.developertools)**.  \r\n![](https://lh3.googleusercontent.com/ERb20Y50r3u_tZMMlqpH5cnS_MC_n366WoKvEjJyFfHz6d-EwvhaEUf7ZKAgRajboTWR=w720-h440-rw)  \r\n\r\n\r\n![Class Diagram](https://farm4.staticflickr.com/3872/14301963930_2f0f0fe8aa_o.png)  \r\n中文文档介绍：[Java 加载不同依赖 Jar 中的公共类](http://www.trinea.cn/android/java-loader-common-class/ ‎)  \r\n\r\n### Introduce\r\n\r\n[java-dynamic-loader-common](https://github.com/Trinea/java-dynamic-load-jar/tree/master/java-dynamic-loader-common)  \r\nOnly CommonClass.java  \r\n  \r\n[java-dynamic-loader-jar1](https://github.com/Trinea/java-dynamic-load-jar/tree/master/java-dynamic-loader-jar1)  \r\n1. ChildCommonClass1.java extend CommonClass.java  \r\n2. ClassJar1.java contains CommonClass field\r\n  \r\n[java-dynamic-loader-jar2](https://github.com/Trinea/java-dynamic-load-jar/tree/master/java-dynamic-loader-jar2)  \r\n1. ChildCommonClass2.java extend CommonClass.java  \r\n2. ClassJar2.java contains CommonClass field\r\n  \r\n[java-dynamic-loader-host](https://github.com/Trinea/java-dynamic-load-jar/tree/master/java-dynamic-loader-host)  \r\n1. JarClassLoader.java to load jar1 and jar2, load from current ClassLoader first if class is CommonClass .  \r\n2. HostMain.java have 3 tests  \r\nTestA: CommonClass loaded from jar1 and jar2 are equals  \r\nTestB: ChildCommonClass1 or ChildCommonClass2 can be reflected to CommonClass in host normaly  \r\nTestC: ClassJar1.java or ClassJar2.java those contains CommonClass field can be reflected and running normal.\r\n\r\n### Run\r\nLoading projects to eclipse, run `java-dynamic-loader-host` as a Java Application\r\n\r\n### Android\r\nIt's simple in java, but not work for TestB and TestC on android, because dalvik pre-verification failed. [This](http://stackoverflow.com/questions/15761081/custom-class-loading-fails-with-java-lang-illegalaccesserror-class-ref-in-pre-v) may solved it, but I have not try.  \r\n```xml\r\n17:28:36.095: E/PluginDexClassLoader(1464): support class is loading.cn.trinea.java.dynamic.load.common.CommonClass, current loader:1110431216, commmon lib loader:1108712248, clazz:1110549272\r\n17:28:36.095: W/dalvikvm(1464): Class resolved by unexpected DEX: Lcn/trinea/java/dynamic/load/jar1/ChildCommonClass1;(0x422fd5f0):0x6838f000 ref [Lcn/trinea/java/dynamic/load/common/CommonClass;] Lcn/trinea/java/dynamic/load/common/CommonClass;(0x42159b38):0x65ae6000\r\n17:28:36.095: W/dalvikvm(1464): (Lcn/trinea/java/dynamic/load/jar1/ChildCommonClass1; had used a different Lcn/trinea/java/dynamic/load/common/CommonClass; during pre-verification)\r\n17:28:36.095: W/dalvikvm(1464): Unable to resolve superclass of Lcn/trinea/java/dynamic/load/jar1/ChildCommonClass1; (993)\r\n17:28:36.095: W/dalvikvm(1464): Link of class 'Lcn/trinea/java/dynamic/load/jar1/ChildCommonClass1;' failed\r\n17:28:36.095: W/dalvikvm(1464): threadid=1: thread exiting with uncaught exception (group=0x416fb498)\r\n17:28:36.095: E/AndroidRuntime(1464): FATAL EXCEPTION: main\r\n17:28:36.095: E/AndroidRuntime(1464): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation\r\n17:28:36.095: E/AndroidRuntime(1464): \tat dalvik.system.DexFile.defineClass(Native Method)\r\n17:28:36.095: E/AndroidRuntime(1464): \tat dalvik.system.DexFile.loadClassBinaryName(DexFile.java:211)\r\n17:28:36.095: E/AndroidRuntime(1464): \tat dalvik.system.DexPathList.findClass(DexPathList.java:315)\r\n17:28:36.095: E/AndroidRuntime(1464): \tat dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:58)\r\n17:28:36.095: E/AndroidRuntime(1464): \tat java.lang.ClassLoader.loadClass(ClassLoader.java:501)\r\n```\r\n\r\n\r\n## License\r\n\r\n    Copyright 2014 trinea.cn\r\n\r\n    Licensed under the Apache License, Version 2.0 (the \"License\");\r\n    you may not use this file except in compliance with the License.\r\n    You may obtain a copy of the License at\r\n\r\n       http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n    Unless required by applicable law or agreed to in writing, software\r\n    distributed under the License is distributed on an \"AS IS\" BASIS,\r\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n    See the License for the specific language governing permissions and\r\n    limitations under the License.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrinea%2Fjava-dynamic-load-jar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrinea%2Fjava-dynamic-load-jar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrinea%2Fjava-dynamic-load-jar/lists"}