引言:導入封裝好的功能工程在自己的工程上,等於直接 給自己的工程上一件“裝備”,提升實力。
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),原因是語音識別要先發送你的話到訊飛的語音終端,再回復您的問答。一問一答要時間,而按鍵按下會直接獲取當時回答或提問,而你還沒開始問。所以我要在兩邊加個線程,合理正確處理信息。代碼之後發佈,有興趣的評論點贊。