##Android插件化框架系列文章以及DEMO
nuptboyzhb / androidpluginframework Goto Github PK
View Code? Open in Web Editor NEWAndroidPluginFramework
License: Apache License 2.0
AndroidPluginFramework
License: Apache License 2.0
在第三课中,获取资源的时候会找不到相应的资源,总是返回0值,不知道这个是否成功的测试过?
1.aapt的改造
分别对不同的插件项目分配不同的packageId,然后对各个插件的资源进行编译,生成R文件,然后与宿主项目的R文件进行id的合并。
通过解demo-release-final.apk发现,资源id并没有合并。所以上面这句是不是说错了?
谢谢博主的文章,学到很多。
看到第二课的时候遇到一个问题,文章里说
“需要注意的是,apk中的类是加载到当前的PathClassLoader当中的,如果apk文件过多,可能会出现ANR的情况。那么,我们能不能使用DexClassLoader加载apk呢?当然是可以的!”
据我所知DexClassLoader和PathClassLoader区别仅仅在于一个可以加载外部路径的apk,一个只能加载/data/data/包名路径下的apk。对于内存和性能上的区别几乎是相同的
所以当PathClassLoader会ANR的时候DexClassLoader同样会ANR呀
而且理论上使用PathClassLoader是共用的一个ClassLoader,DexClassLoader反倒要遍历查找类,所以PathClassLoader应该效率更高才对。
希望博主能够解答我的疑惑,谢谢!
java.lang.ClassNotFoundException: Didn't find class "net.mobctrl.normal.apk.Utils" on path: DexPathList[[zip file "/data/app/net.mobctrl.hostapk-1.apk"],nativeLibraryDirectories=[/data/app-lib/net.mobctrl.hostapk-1, /vendor/lib, /system/lib]]
文章说“其中,R.layout.main_fragment我们可以通过上述方法获取其ID,那么关键的一步就是如何生成一个context?直接传入当前的context是不行的。”
测试证明直接传入当前的context是可以的。
另外有个问题,文中常常用到十六进制的id如“ 0x7f050001”,注释说“id参照Bundle apk中的R文件”。这个id是从插件apk的R文件中查询到的吗?感觉这种方式不靠谱啊,万一什么原因导致这个id变了怎么办,为啥不直接用resources.getIdentifier()的方法?这样更靠谱一些呀?请赐教谢谢
for(String fileName:fileNames){ if(!fileName.endsWith(FILE_FILTER)){ continue; }
“团队在开发时,对资源的命名进行约定,比如各业务线按照一定的规则命名,大家准守规则,避免重复。 然后在打包时,我们对各个插件的资源进行合并,统一生成R文件,所有插件和宿主的R文件内容都是完全一样的,资源都保存在宿主项目的资源中。”
插件之间无需互相访问资源,host不需要访问plugin的资源,只需要plugin能访问host的资源即可。所以应该是将host的R合并倒插件的R中。
我用了4.2和4.4都是class not found,只有5.0以上才支持这个
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.