在Android studio 中如果要change layout的類型,要換成tablelayout,relativelayout....等,
可以到Component tree透過morphing來達成.
但是很可惜的預設建立的project找不到這個選項,似乎是官方IDE的一個bug.
如果堅持要在圖形化界面中使用這個功能,可能就必須先到"TEXT"模式下更改.
在"TEXT"模式改過一次之後,該選項就可以使用了
2015年4月22日 星期三
2015年4月20日 星期一
[Android]Linux kernel 開發基礎 (四)- 新增I2C device 範例
新增platform device 範例 是直接向platform bus註冊一個裝置
其他較常見的裝置要註冊也是大同小異,
makefile 與 kconfig 寫法是相同的,差異在於在哪個Bus下註冊裝置
底下為新增I2C device 範例:
1. makefile
根據kconfig的設定,定義要build的檔案
例如範例中的
obj-$(CONFIG_HELLO_DRIVER) += hello.o
這裡定義了:當CONFIG_HELLO_DRIVER為y
就將hello這個檔案build進kernel
2. kconfig
定義了driver 簡易描述以及預設值,與makefile一起,為kernel建立tree管理之用,
在make menuconfig時,可將該driver相關訊息顯示在視窗界面
config HELLO_DRIVER
default y
tristate "Hello Driver"
help
Say Y here if you want to enable hello driver.
這裡定義了一個新的driver HELLO_DRIVER,,
預設值為y
3.如果要向I2C bus註冊新裝置,必須先找到I2C bus initial 的檔案(根據每個BSP設計不同,這個位置與名稱也不同,通常位於kernel/arch/arm/"cpu_name"),透過i2c_register_board_info來註冊新裝置,
(參考自: https://www.kernel.org/doc/htmldocs/device-drivers/API-i2c-register-board-info.html)
例如:
i2c_register_board_info(i2c_bus_num, i2c_devs_define, ARRAY_SIZE(i2c_devs_define));
而i2c_devs_define 必須明確指出i2c device address 與i2c_bus_num才能根據設定將資料送到該裝置 ,定義範例如下:
static struct i2c_board_info i2c_devs_define[] __initdata = {
{
I2C_BOARD_INFO(i2c_device_name, i2c_address >> 1),
.irq = IRQ_EINT(IRQ_num),
},
};
4.最後調用i2c_add_driver(&i2c_driver);即可完成I2C device 新增
static const unsigned short normal_i2c[2] = {i2c_address,I2C_CLIENT_END};
static struct i2c_driver i2c_driver = {
.driver = {
.name = i2c_device_name,
.owner = THIS_MODULE,
},
.class = I2C_CLASS_HWMON,
.address_list = normal_i2c,
.id_table = id,
.probe = probe,
.remove = __exit_p(remove),
.suspend = suspend,
.resume = resume,
};
i2c_add_driver(&i2c_driver);
其他較常見的裝置要註冊也是大同小異,
makefile 與 kconfig 寫法是相同的,差異在於在哪個Bus下註冊裝置
底下為新增I2C device 範例:
1. makefile
根據kconfig的設定,定義要build的檔案
例如範例中的
obj-$(CONFIG_HELLO_DRIVER) += hello.o
這裡定義了:當CONFIG_HELLO_DRIVER為y
就將hello這個檔案build進kernel
2. kconfig
定義了driver 簡易描述以及預設值,與makefile一起,為kernel建立tree管理之用,
在make menuconfig時,可將該driver相關訊息顯示在視窗界面
config HELLO_DRIVER
default y
tristate "Hello Driver"
help
Say Y here if you want to enable hello driver.
這裡定義了一個新的driver HELLO_DRIVER,,
預設值為y
3.如果要向I2C bus註冊新裝置,必須先找到I2C bus initial 的檔案(根據每個BSP設計不同,這個位置與名稱也不同,通常位於kernel/arch/arm/"cpu_name"),透過i2c_register_board_info來註冊新裝置,
(參考自: https://www.kernel.org/doc/htmldocs/device-drivers/API-i2c-register-board-info.html)
Name
i2c_register_board_info — statically declare I2C devicesSynopsis
int i2c_register_board_info ( | int busnum, |
struct i2c_board_info const * info, | |
unsigned len) ; |
Arguments
busnum
- identifies the bus to which these devices belong
info
- vector of i2c device descriptors
len
- how many descriptors in the vector; may be zero to reserve the specified bus number.
i2c_register_board_info(i2c_bus_num, i2c_devs_define, ARRAY_SIZE(i2c_devs_define));
而i2c_devs_define 必須明確指出i2c device address 與i2c_bus_num才能根據設定將資料送到該裝置 ,定義範例如下:
static struct i2c_board_info i2c_devs_define[] __initdata = {
{
I2C_BOARD_INFO(i2c_device_name, i2c_address >> 1),
.irq = IRQ_EINT(IRQ_num),
},
};
static const unsigned short normal_i2c[2] = {i2c_address,I2C_CLIENT_END};
static struct i2c_driver i2c_driver = {
.driver = {
.name = i2c_device_name,
.owner = THIS_MODULE,
},
.class = I2C_CLASS_HWMON,
.address_list = normal_i2c,
.id_table = id,
.probe = probe,
.remove = __exit_p(remove),
.suspend = suspend,
.resume = resume,
};
i2c_add_driver(&i2c_driver);
Linux kernel 開發基礎 (三)- 新增platform device
新增platform device
並不複雜,
只需要更改三個地方
1. makefile
根據kconfig的設定,
定義要build的檔案
例如範例中的
obj-$(CONFIG_HELLO_DRIVER) += hello.o
這裡定義了:
當CONFIG_HELLO_DRIVER為y
就將hello這個檔案build進kernel
2. kconfig
定義了driver 簡易描述以及預設值,
與makefile一起,
為kernel建立tree管理之用,
在make menuconfig時,
可將該driver相關訊息顯示在視窗界面
config HELLO_DRIVER
default y
tristate "Hello Driver"
help
Say Y here if you want to enable hello driver.
這裡定義了一個新的driver HELLO_DRIVER,,
預設值為y
3. driver本身
static struct platform_driver hello_driver = {
.probe = hello_probe,
.remove = __devexit_p(hello_remove),
.driver = {
.name = "hello",
.owner = THIS_MODULE,
},
.suspend = hello_suspend,
.resume = hello_resume,
};
driver定義著platform device的功能,
如果還是不是很了解,
可以下載範例程式去build 看看
2015年4月19日 星期日
Zenfone Remote link
Zenfone Remote link
是一個功能強大的應用程式,
讓可透過手機來遙控notebook,
尤其是要做簡報的時候,
手機可以搖身變成簡單的簡報器:
1.首先要先在PC端與手機端安裝Asus remote link這支程式.
PC端程式下載
android端程式下載
(Zenfone有內建,其餘手機才需要安裝)
下圖為PC端安裝畫面.
下圖為手機安裝完執行的畫面.
值得一提的是這套軟體可讓手機利用wifi或者藍芽來遙控裝置
搜尋裝置並配對安裝成功之後選擇畫面最底下第二個圖示
在電腦打開.ppt檔案之後,
按下同步按鈕(右上第三個雙圓弧形箭頭).
就能夠在手機上面看到ppt檔案畫面,
在做簡報的時候,
可以透過螢幕下半左右兩邊的半圓來控制
上一頁,下一頁
除此之外,
這套軟體還提供使用手機來控制touch pad,
鍵盤,以及windows media player
2015年4月17日 星期五
[Android]Linux kernel 開發基礎 (二)- platform device
Linux自2.6之後導入新的驅動管理與註冊機制,在這樣的設計下,
bus , device , driver. 三者就是必須了解的基本元素.
CPU要執行某裝置的功能簡單的流程如下:
CPU->bus->device->driver
1. Bus 是CPU與各個裝置的連結通道,CPU 透過bus找到device.
2. Device是接在bus上的實體裝置
3. Driver則詳細定義了裝置的各項功能
Platform bus 是一個虛擬通道,現在大多數裝置都是建立在platform bus 上.
它可分為兩部份: platform_device 與 platform_driver
platform_device 的基礎定義:
bus , device , driver. 三者就是必須了解的基本元素.
CPU要執行某裝置的功能簡單的流程如下:
CPU->bus->device->driver
1. Bus 是CPU與各個裝置的連結通道,CPU 透過bus找到device.
2. Device是接在bus上的實體裝置
3. Driver則詳細定義了裝置的各項功能
Platform bus 是一個虛擬通道,現在大多數裝置都是建立在platform bus 上.
它可分為兩部份: platform_device 與 platform_driver
platform_device 的基礎定義:
struct platform_device { const char *name; u32 id; struct device dev; u32 num_resources; struct resource *resource; };
platform_driver的基礎定義
struct platform_driver { int (*probe)(struct platform_device *); int (*remove)(struct platform_device *); void (*shutdown)(struct platform_device *); int (*suspend)(struct platform_device *, pm_message_t state); int (*suspend_late)(struct platform_device *, pm_message_t state); int (*resume_early)(struct platform_device *); int (*resume)(struct platform_device *); struct device_driver driver; };
要利用platform bus管理裝置可透過:
int platform_device_add(struct platform_device *pdev);
int platform_device_register(struct platform_device *);
來註冊裝置.
這些定義可以在
kernel/include/linux/platform_device.h找到.
2015年4月16日 星期四
行動裝置瀏覽
這是最近從google寄來的訊息,
說明4月21號開始,google搜尋將納入與行動裝置相容性的設定,
如果是google Blogger使用者並不需要擔心,因為原本就有支援行動裝置瀏覽,
wordpress用戶的話,就需要透過安裝外掛才能取得支援.
WP Mobile Pack
是一個wordpress外掛程式可以讓網站支援行動裝置瀏覽,安裝簡潔也不需要複雜的設定
當然了,好的軟體是需要贊助的,提供給一般用戶只有一種版型,如果需要其他版型就必須付費了
在手機執行的畫面:
如果想測試自己網站是否支援行動裝置瀏覽,
可以前往進行google行動相容性測試
Android Studio 1.1.0 安裝
Android Studio 是google官方出的IDE ,
提供給程式開發者使用的一套軟體,
使用的方法類似Eclipse with ADT,
但卻又不盡相同,
所以還是要花點時間摸索,
今天就來介紹
Google在網站上面寫著開發者應使用官方IDE以取得最新的更新檔
If you have been using Eclipse with ADT, be aware that Android Studio is now the official IDE for Android, so you should migrate to Android Studio to receive all the latest IDE updates.
(取自官方網站)
1.安裝java sdk
點擊到 java網站下載
下載之後執行安裝程式
2.設定JAVA_HOME
新增JAVA_HOME環境變數,
在變數值填入JAVA路徑
3.到Google官方網站下載IDE程式,
並執行,
安裝的過程中,
可設定studio與sdk安裝路徑
4.安裝之後第一次執行studio會詢問是否之前有安裝過?
要不要保留設定?
程式會根據剛才設定的路徑安裝android sdk
安裝完按下Finish
即可看到Android Studio IDE的第一個畫面
提供給程式開發者使用的一套軟體,
使用的方法類似Eclipse with ADT,
但卻又不盡相同,
所以還是要花點時間摸索,
今天就來介紹
Android Studio 1.1.0 安裝
Google在網站上面寫著開發者應使用官方IDE以取得最新的更新檔
If you have been using Eclipse with ADT, be aware that Android Studio is now the official IDE for Android, so you should migrate to Android Studio to receive all the latest IDE updates.
(取自官方網站)
1.安裝java sdk
點擊到 java網站下載
下載之後執行安裝程式
2.設定JAVA_HOME
新增JAVA_HOME環境變數,
在變數值填入JAVA路徑
3.到Google官方網站下載IDE程式,
並執行,
安裝的過程中,
可設定studio與sdk安裝路徑
4.安裝之後第一次執行studio會詢問是否之前有安裝過?
要不要保留設定?
程式會根據剛才設定的路徑安裝android sdk
安裝完按下Finish
即可看到Android Studio IDE的第一個畫面
2015年4月15日 星期三
Zenfone變更鎖定螢幕中的快捷鍵
在Zenfone鎖定畫面中,
可以看到三個快捷鍵,
分別是"相機"."電話"以及"簡訊",
可以變更成自己常用的應用程式:
1.找到手機的"設定"可以看到有一個選項"鎖定螢幕"點進去
2.找到"快捷鍵"並點進去
3.可以看到預設有三個應用程式
4.點選其中一個,
就可以變更為自己常用的程式
可以看到三個快捷鍵,
分別是"相機"."電話"以及"簡訊",
Zenfone變更鎖定螢幕中的快捷鍵
可以變更成自己常用的應用程式:
1.找到手機的"設定"可以看到有一個選項"鎖定螢幕"點進去
2.找到"快捷鍵"並點進去
3.可以看到預設有三個應用程式
4.點選其中一個,
就可以變更為自己常用的程式
2015年4月14日 星期二
Zenfone PC link
ASUS Zenfone內建許多軟體,
當然了,
這些應用程式不見得每個人都喜歡,
但是基於原廠有心贈送,
還是研究一下怎麼操作
1.連接上Zenfone,
可以在"我的電腦"看到Zenfone自動建立了驅動程式光碟機
2.到"裝置管理員"安裝ASUS ADB driver,成功之後會如下圖
3.再到手機的"設定"-->"開發者選項"找到"USB偵錯"並把它打勾
4.到官方網站下載PC端應用程式,
然後執行"PCLinkSetup.exe"安裝應用程式
5.安裝完畢後,
執行程式即可看到手機連線如下
6.點選該裝置,
就可以直接在電腦上面控制手機
當然了,
這些應用程式不見得每個人都喜歡,
但是基於原廠有心贈送,
還是研究一下怎麼操作
Zenfone PC link
1.連接上Zenfone,
可以在"我的電腦"看到Zenfone自動建立了驅動程式光碟機
2.到"裝置管理員"安裝ASUS ADB driver,成功之後會如下圖
3.再到手機的"設定"-->"開發者選項"找到"USB偵錯"並把它打勾
4.到官方網站下載PC端應用程式,
然後執行"PCLinkSetup.exe"安裝應用程式
5.安裝完畢後,
執行程式即可看到手機連線如下
6.點選該裝置,
就可以直接在電腦上面控制手機
2015年4月3日 星期五
blender物體基本操作(二)
blender物體基本操作(二)
新增物體可以透過快速鍵
Shift+A .
或者由底下工具列選擇"添加"
建模一般選擇網格為基礎物體.
當工作區有多個物體時,
可利用以下幾種方法來選取
1.按B鍵: 矩形選取
2.按Shift+滑鼠右鍵,可連續選擇多個物體
3.按Alt+滑鼠右鍵,
可在重疊的物體中選擇要編輯的物體,
要刪除物體只需要在選取之後,
按Delete鍵或者X鍵即可.
windows8更改預設輸入法
安裝windows8如果選繁體中文,
在結束安裝之後常遇到輸入法預設是中文,
這實在是有點不大方便,
三個步驟即可:
1.到"控制台",選擇"變更輸入法"
在結束安裝之後常遇到輸入法預設是中文,
這實在是有點不大方便,
windows8更改預設輸入法
三個步驟即可:
1.到"控制台",選擇"變更輸入法"
2.點擊"選項"
3.在"預設輸入模式"中選擇"英數模式"即可
這樣開機進去就不會預設中文了.
當然了.最簡便的方法是:
直接在右下角"中"圖示上面按滑鼠右鍵出現選單,
選擇"內容"也可以直達上圖.
2015年4月1日 星期三
[android]開發基礎(四)- 安全機制 SELinux
SELinux 使用白名單來定義系統可進行的行為,也就是說只有被允許的行為才會被執行.
Android 預設使用uid/gid來管理行為的權限,如果有應用程式取得root權限權限,此程式將不受任何限制,並且可在裝置上執行任何行為,基於SELinux設計的裝置可以限制這些取得root權限的程式(或者使用者),避免安全問題.
由於SELinux基於白名單方式的管理,所以系統如果有新增裝置或者功能,所以必須根據需求更改相關權限,以確保新的程式或者行為可以正確執行.
查詢裝置是否有被阻擋的行為可利用dmesg查詢:
su -c dmesg | grep 'avc: '
自訂SELinux主要有三個步驟
1.在BSP/device/manufacturer/device-name/sepolicy/底下,新增一個.te檔案
命令語法:
EX:(允許sdcard存取/data/下所有資料)
allow sdcardd media_data_file:file{read write};
2.更新boardconfig.mk,把新增的規則加進去
BOARD_SEPOLICY_DIRS += \
device/manufacturer/device-name/sepolicy
BOARD_SEPOLICY_UNION += \
file_contexts \
new_rule.te
3.更新file_contexts,把新的type加入
/data/(/.*)? u:object_r:media_data_file:s0
重新build image,更新之後
即可套用新的規則.
官方也有相關說明
網址是:
官方說明網址
Android 預設使用uid/gid來管理行為的權限,如果有應用程式取得root權限權限,此程式將不受任何限制,並且可在裝置上執行任何行為,基於SELinux設計的裝置可以限制這些取得root權限的程式(或者使用者),避免安全問題.
由於SELinux基於白名單方式的管理,所以系統如果有新增裝置或者功能,所以必須根據需求更改相關權限,以確保新的程式或者行為可以正確執行.
查詢裝置是否有被阻擋的行為可利用dmesg查詢:
su -c dmesg | grep 'avc: '
自訂SELinux主要有三個步驟
1.在BSP/device/manufacturer/device-name/sepolicy/底下,新增一個.te檔案
命令語法:
EX:(允許sdcard存取/data/下所有資料)
allow sdcardd media_data_file:file{read write};
2.更新boardconfig.mk,把新增的規則加進去
BOARD_SEPOLICY_DIRS += \
device/manufacturer/device-name/sepolicy
BOARD_SEPOLICY_UNION += \
file_contexts \
new_rule.te
3.更新file_contexts,把新的type加入
/data/(/.*)? u:object_r:media_data_file:s0
重新build image,更新之後
即可套用新的規則.
官方也有相關說明
網址是:
官方說明網址
訂閱:
文章 (Atom)