引言:导入封装好的功能工程在自己的工程上,等于直接 给自己的工程上一件“装备”,提升实力。
PS:我曾经代入别人的工程,并实现了主工程(Application)和导入工程(library)的界面跳转与函数的调用。其中有各种各样的困难和错误,所以我找两个独立的工程,和并在一起,我每一步都以截图并讲解,手把手教导,大家可以自己找两个工程来练练手,大家在哪一步有疑问的,评论说出来,成功的点个赞。
本来想弄两个简单的工程合并的,如:一个button的,TextView的,但这样大家看来也没什么兴趣。那我就弄一个有趣的工程合并。——————芝麻开灯。
芝麻开灯:一个是讯飞的语音识别工程,另一是我的WIFI调试助手源码工程,使用效果如下:按下按钮,说芝麻开灯,然后我的STM32就亮一盏灯,芝麻关灯就反之,其他指令无效。
好的现在开始我们的手把手教学。
1.成功导入工程,这些功能工程的设置和你的Android stduio 的版本号和设置不一定是相符。
都是成功建立的。
工程代码
语音程序如图:支持聊天和文字朗读
WIFI客户端
2.确认那个是library(导入的工程)
我把ChatRobot 作为导入的工程,Mpplication 作为主要工程。
(1).打开ChatRobot工程,设置为library.
修改的位置:
修改的内容:
修改位置1 apply plugin: 'com.android.application’改为apply plugin: 'com.android.library’
会出现一个提示,不要理会。
修改位置2
路径:
删除app的封装设置,如图标、界面、名字之类的。
删之前:
删之后:
我是删这么多的,留下两个,一个是允许返回,一是活动。我觉的这两个是很必要的。
看不清楚的,看下面的代码(图中的)
<application
android:allowBackup="true"
android:icon="@drawable/asd"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.yile.chatrobot.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<application
android:allowBackup="true">
<activity
android:name="com.yile.chatrobot.MainActivity">
</activity>
</application>
然后保存工程,然后关闭工程注意:建议关闭library工程,有导入不了的可能。
(2).现在要在Mpplication (主要工程)导入ChatRobot(library)
点击Import Module
选择library的路径:
然后点击OK
填写import的名字,然后finish。
然后就成功导入library。
重新编译也没出错。
然后要在主程序上,引用library这包,才能使用library里面代码。
(1).点击Project Strycture.
(2).看图
(3).
(4).
测试:
能·import library里Java文件。灰色的原因是我没使用。
(以上Android 导入别人的工程(成为主工程的library),手把手教学)的全部内容,我都是一边做,一边截图,一边写博客的,可靠性很高。
下面讲解实例代码(芝麻开灯),主要学习的是主工程(Application)和导入工程(library)的界面跳转与函数的调用,我想一起讲,我觉得这本来就放在一起学习的。
看图:
这两个都是工程的活动(activity),两个别再两座山上如何连接呢?
我要讲的是“连”在一起的方法。
1.首先是学习的是两个界面的跳转,
(1).两边各定义一个跳转按键。
(2).主界面跳转到library的界面
在按键上写上跳转代码
Intent IntentA = new Intent();
IntentA.setClass(clientActivity.this,MainActivity.class);//语音识别
startActivity(IntentA);
(2)library跳转到主界面的界面
跳转界面不是用setClass,而是用setComponent
把位置写清楚。 ComponentName comp = new ComponentName(this, “com.example.administrator,mpplication.clientActivity”);
在按键上写上跳转代码
Intent IntentB= new Intent();
IntentB.setComponent(comp);
startActivity(IntentB);
这样就实现,两个界面的跳转。
小结:主工程 import library ,就是有直接的关系,所以能直接跳转到library 的界面;而library 不可以import 主工程,没有直接关系,要托关系才能找到。
2.学习的函数调用
主工程为我的WiFi调试助手,library为讯飞的语音识别。
两边都设置一个按钮(点击后,说:“芝麻开灯或关灯”,能发送十六进制在我的PC端,这里我就不上单片机了,原理是一样的。)
主工程能调用library里面的函数,而library暂时不能调用主工程里面的函数(ps:我在网上找不到)。
主工程能调用library里面的函数方法:
1.首先主工程要import library。
2.要在library 里定好位置。
public static MainActivity instancechatrobot=null;
3.然后获取位置信息:
然后定义回调函数:
例如:
public int yuyinreturn()
{
return send;
}
public void yuyinreqingling(int a)
{
send=a;
}
public String yuyinwenzi()
{
return wenzi;
}
然后主程序调用这些在library的函数:
String wenzichulichuli=com.yile.chatrobot.MainActivitychat.instancechat.wenzichuli();
这样能直接把library的语音处理结果在工程里使用。
我的芝麻开灯的程序还在编写中,有BUG,是按下按键后,获取的语音识别是空(null),原因是语音识别要先发送你的话到讯飞的语音终端,再回复您的问答。一问一答要时间,而按键按下会直接获取当时回答或提问,而你还没开始问。所以我要在两边加个线程,合理正确处理信息。代码之后发布,有兴趣的评论点赞。