关于在android studio上通过freetype渲染文字2

直接导入so或者生成aar再导入


之前一篇说了终于把freetype跑起来了,但是那个GVR的代码已经很多了,我不能把这个代码导进去然后在里面编译so然后用吧,而且即使弄进去了也不一定能用哦。不够我没有这么尝试过。


按照一般的做饭,既然生成了so并且试过了能用,接下来,就是要在这个jni的c文件中的接口函数,也就是在java层的native函数,要修改一下,因为换了一个项目调用嘛,那个函数的名字是由项目名+类名+函数名构成的,这个是知识点啊,写过jni的肯定知道,就不细说了。


现在的问题是,我把so弄出来了,怎么放进这个GVR的项目呢,放在哪个文件夹呢,这里有牵涉到另一个问题。用过OpenGL的小伙伴肯定知道,这个3维图形库其实是要用c来用的,所以在android上用肯定还是jni,不知道是不是导师知道我以前是写c的之后,才让我来弄这个,但是这个GVR的项目,都已经写好了,Java这边的调用几乎完全没有痕迹,感觉就是他自己支持了,我也不知道怎么描述,因为连native的声明都没有,你放哪里去了,不需要么,是不是es版已经提供了android的api呢,不得而知,反正这个项目一共有4个app然后两个ndk嘛,名字写的很清楚,但是那两个ndk到底怎么编译的,编译出来的so在哪,到底有没有使用,并不是很清楚,在找了很久之后我放弃了,本想找到这so的存放路径,我把要导入的so放一起不就完了,不过此路不通。然后百度studio怎么导入so文件,这就用到前面说的那个jniLibs.srcDir的设置了,这是网上说的,但是这个GVR感觉非常高端,用到了网上很少有人提到的,不需要mk文件直接自动编译jni的方法,所谓的gradle-experimenta,如果对这个不需要mk就可以编译ndk的方法感兴趣,可以直接搜索,不过感觉其实还是需要mk文件的,只不过放到build.gradle里面了,实用性打问号。


上面啰嗦了下,使用的不是传统的gradle的问题就是这个sourceSet放不进去,会报错,也就是不能设置加载路径,也就是so没法导入,虽说网上有说什么默认路径就是jniLibs,但是试过了都没有什么用,在多次尝试之后,放弃so,转而看看aar的调用。


实现我并不知道aar是什么,只是看到这个GVR的目录里面还是有一些aar的,百度一下是什么东西,原来差不多就是安卓使用的库文件吧,而且这个库文件包含了很多东西,包括图片图标还有so,所以果断的把之前的那个freetype改改,主要就是在build.gradle中修改apply plugin: 'com.android.application'为apply plugin: 'com.android.library',也就是把应用改成一个库,下面还有application的地方的都注释或者处理一下,然后build一下之后,可以看到生成了debug.aar文件,在这个app文件夹,也就是modulede的目录下的build下的output里面,根据网上查到的方法,此时直接再创建一个应用module来导入这个aar,然后就会生成release.aar,把这个拷出来到GVR的项目中,这个同样要指定一个路径,在build.gradle中最外层,也就是和android花括号同一级增加这句话

repositories {
        flatDir {
            dirs 'libs'
        }
    }

就不解释是啥意思了,理解为加载路径就好,然后在下面的dependencies中添加一个compile(name: 'FreeTypeTools-release', ext: 'aar'),没错,这就是用代码添加依赖,貌似直接通过设置添加依赖,找不到这个aar。不过这个导入aar有两种方法,网上的帖子有的只说了一种,有的都有说明,不过一般来讲貌似都比较喜欢通过代码导入,但是这个才是折磨的开始,从结论上来看,这一系列操作,花了两天时间试错,然后找到方法,然后导入,然后再错,一直持续了3天,最终承认,是无用功。唉!


其实之前的导入都很顺利,gradle也很正常,当然也是解决了很多问题,最主要的就是总是报错R找不到,也是醉了。

关于cannot resolve symbol R的问题,反正最后查到AndroidManifest.xml简直是个小贱人,因为aar里面其实也包含了一个项目,导入的时候两个xml会冲突,简单理解就是这样,然后需要添加tools标签和replace。


首先在manifest xmlns:android的下面(里面),增加一个

xmlns:tools="http://schemas.android.com/tools"

应该叫什么,声明吧,然后在application标签下增加这句

tools:replace="android:icon, android:theme, android:label"

原理同样不解释了,好奇宝宝自己查查去。


然后还有各种版本的问题,因为freetype的那个项目估计是比较老的了,很多设置的版本号都比较旧,导入的时候各种提示,而且就光这个项目本身就在各种报版本问题,不过都可以百度解决,还好。




不知道为什么明明这一篇写的很详细,但是都是无用功,花了好多天啊,最后还是通过其他方式使用的。

简单说一下吧,其实我觉得导入aar是我比较希望的方式,因为这样的话,我可以直接在freetype那个项目进行修改编辑什么的,然后直接编译就好了,如果是so的话,就需要先调试,调试好了再修改函数名,然后再导入,再试一下,挺麻烦。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值