Android Studio 修改 package name(含Domain)

  1. 找到檔案 app/build.gradle
    修改applicationId
  2. 找到檔案:app/src/main/AndroidManifest.xml
    修改package
  3. 找到資料夾:app/src/main/java
    先新增一個你希望的Domain + name package
    將所有的class全部搬進新的Package
    舊的Package會自殺
  4. 重建專案(Make Project),沒報錯就完成了

如果有用git作專案維護,不建議修改最外層的資料夾名稱,會動到很多設定

廣告

以Express套件初始化Node.js開發環境,在WebStorm上

環境初始化

1.安裝nvm:

a.首先從 nvm GitHub 這裡複製以下代碼讓終端機下載套件

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.29.0/install.sh | bash

b.接著重啟終端機,安裝

nvm install 4.2.2

c.設定預設套件

nvm alias default 4.2.2

安裝各種套件

1.express:

npm install -g express-generator

2.bower:前端套件管理器

npm install -g bower

3.pm2:進程管理器

npm install -g pm2

專案初始化

1.透過express-generator帶less建立專案

express -e -c less [專案資料夾名稱]

-e:使用ejs
-c:宣告要用什麼CSS的編寫模式,預設就是原汁的CSS

2.安裝後端套件

到專案底下並且安裝所有相依套件

cd [專案資料夾]
npm install

如果要安裝樣版引擎:

npm install --save ejs-mate

3.安裝前端套件

初始化bower.json:紀錄相依性與已安裝套件

bower init

用bower安裝angular與bootstrap

bower install --save angular bootstrap

–save:會將安裝套件名稱與版本寫入bower.json,以便日後於其他機器中開發部署

4.啟動

用webstorm開啟

wstorm .

啟動

npm start

ADB無線debug,USB連線提示騷擾 go away!!!

  1. 確認電腦與手機連到同一台wifi分享器上
  2. 將手機與電腦先用USB連接起來
  3. 打開終端機(微軟就是Dos模式,Mac就叫做終端機),
    找到Android SDKadb的路徑(如果已製作adb環境變數則不用)
    Ex:cd …\android-sdk\platform-tools
  4. 輸入:adb tcpip 5555
    讓debug的port轉到5555,成功時會出現 restarting in TCP mode port: 5555
  5. 連線到手機:adb connect [手機IP](不含中括號),成功時會出現

    connected to 192.168.0.114:5555
    如果失敗的話,可以試試:adb connect [手機IP]:5555

接著就可以很開勳地用用wifidebug嘍~~~

But!!!

如果你的電腦是用要拿來debug的手機wifi基地台網路,就有可能無法取得手機IP,進而無法使用~~

傳值、傳址、傳參考呼叫

 

我們現在先假設目前有兩個變數,分別是A=5,B=10

又有一個swap(C,D)函數(即變數交換),裡面有著參數C與D

故一開始變數的情況如下:

變數 記憶體位址
A 5 0×04
B 10 0×08
C
D

以下便以BEFORE代表A,B剛傳入swap(C,D)時的狀態,以AFTER代表swap(C,D)執行完後的狀態

傳值呼叫(call by value):

函數宣告方式 函數用法
 swap(int C,int D) swap(A,B)
變數 值(Before) 記憶體位址(Before) 值(After) 記憶體位址(After)
A 5 0×04 5 0×04
B 10 0×08 10 0×08
C 5 0×16 10 0×16
D 10 0×32 5 0×32

根據上表所示,很明顯地傳值呼叫只是將A,B兩個變數的複製給C,D這兩個參數,爾後C,D如何的變化,都不會影響A,B

 

傳址呼叫(call by value of pointer 或 call by address):

函數宣告方式 函數用法
 swap(int *C,int *D) swap(&A,&B)

 

變數 值(BEFORE) 記憶體位址(BEFORE) 值(AFTER) 記憶體位址(AFTER)
A 5 0×04 10 0×04
B 10 0×08 5 0×08
C 0×04 0×16 0×04 0×16
D 0×08 0×32 0×08 0×32

 

傳址呼叫是將A,B的記憶體位址傳給C,D這兩個參數當作,就如同C,D是A,B在swap(C,D)裡面的反向傳出通道,其異動結果將會改變A,B的值,而不改變所有變數的記憶體指派情況

傳參考呼叫(call by reference):

函數宣告方式 函數用法
 swap(int &C,int &D) swap(A,B)

 

變數 值(BEFORE) 記憶體位址(BEFORE) 值(AFTER) 記憶體位址(AFTER)
A 5 0×04 10 0×08
B 10 0×08 5 0×04
C 5 0×04 10 0×08
D 10 0×08 5 0×04

傳參考呼叫是在C++以後才有的技術以C,D代理A,B的一切資料,包含值與記憶體位址。所以C,D的異動將會完全連動A,B的異動,且不需要額外分配新的記憶體給C,D

 

參考來源:mlab Blog

 

如何在GoogleMap上偵聽所有的觸發事件

Android給的GoogleMap類別中,只能在地圖上偵聽點擊(Click)與長按(LongClick)事件,但很多時候,我們會需要偵聽其他的事件,比如拖曳或手勢,這時候就無法就官方給的架構去時做出來了 所以我們就要客製化幾個類別,讓我們能夠偵聽到所有的觸發事件

1.客製化MapFragment的Layout容器,通常會是FrameLayout,在此建立偵聽功能

	public class HandleTouchEvent_FrameLayout extends FrameLayout {

		public HandleTouchEvent_FrameLayout(Context context) {
			super(context);
		}

		@Override
		public boolean dispatchTouchEvent(MotionEvent ev) {
			//任何碰到螢幕而你想偵聽的觸發事件都可以在此實作
			return super.dispatchTouchEvent(ev);
		}

2.客製化MapFragment,在此抽換掉原本Fragment裡面不具有偵聽任何Touch事件的Layout

public class HandleTouchEvent_MapFragment extends SupportMapFragment {
	
	private View mOriginalView;
	private HandleTouchEvent_FrameLayout mTouchRventHandler;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		
		mOriginalView = super.onCreateView(inflater, container, savedInstanceState);
		mTouchRventHandler = new HandleTouchEvent_FrameLayout(getActivity());
		mTouchRventHandler.addView(mOriginalView);
		
		
		return mTouchRventHandler;
	}

	@Override
	public View getView() {
		// TODO 自動產生的方法 Stub
		return mOriginalView;
	}
	}

3.記得相對應的xml檔也要換掉類別名稱

        <fragment
            android:id="@+id/google_map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            class="com.zoaks.tourpins.fragments.HandleTouchEvent_MapFragment" />

4.最後修正Activity上對Fragment的調用


GoogleMap mGoogleMap = ((HandleTouchEvent_MapFragment)
getSupportFragmentManager().findFragmentById(R.id.google_map)).getMap();

這樣就肥尼遜了…XDD