<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Android &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/android/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Sun, 04 Jun 2023 13:10:37 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>Android &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>手機空間不足，無法安裝APP，簡單一招教你刪除快取檔案，幫LINE瘦身</title>
		<link>https://noter.tw/7679/%e6%89%8b%e6%a9%9f%e7%a9%ba%e9%96%93%e4%b8%8d%e8%b6%b3%ef%bc%8c%e7%84%a1%e6%b3%95%e5%ae%89%e8%a3%9dapp%ef%bc%8c%e7%b0%a1%e5%96%ae%e4%b8%80%e6%8b%9b%e6%95%99%e4%bd%a0%e5%88%aa%e9%99%a4%e5%bf%ab/</link>
					<comments>https://noter.tw/7679/%e6%89%8b%e6%a9%9f%e7%a9%ba%e9%96%93%e4%b8%8d%e8%b6%b3%ef%bc%8c%e7%84%a1%e6%b3%95%e5%ae%89%e8%a3%9dapp%ef%bc%8c%e7%b0%a1%e5%96%ae%e4%b8%80%e6%8b%9b%e6%95%99%e4%bd%a0%e5%88%aa%e9%99%a4%e5%bf%ab/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 29 Jul 2020 04:30:00 +0000</pubDate>
				<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[儲存空間已滿]]></category>
		<category><![CDATA[無法安裝APP]]></category>
		<category><![CDATA[LINE]]></category>
		<category><![CDATA[快取檔案]]></category>
		<category><![CDATA[清除快取]]></category>
		<category><![CDATA[容量不足]]></category>
		<category><![CDATA[空間不足]]></category>
		<category><![CDATA[LINE刪除資料]]></category>
		<category><![CDATA[暫存檔案]]></category>
		<category><![CDATA[LINE瘦身]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[刪除快取]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=7679</guid>

					<description><![CDATA[<p>小蛙這次回屏東時，蛙爸問小蛙「有辦法不刪除程式就可以更新嗎？」小蛙一開始不太懂意思，詳細問了之後才知道原委。 iPhone 比較少遇到類似的狀況，因架構設計上的問題，主要遇到空間不足的大多是 Andr&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/7679/%e6%89%8b%e6%a9%9f%e7%a9%ba%e9%96%93%e4%b8%8d%e8%b6%b3%ef%bc%8c%e7%84%a1%e6%b3%95%e5%ae%89%e8%a3%9dapp%ef%bc%8c%e7%b0%a1%e5%96%ae%e4%b8%80%e6%8b%9b%e6%95%99%e4%bd%a0%e5%88%aa%e9%99%a4%e5%bf%ab/" data-wpel-link="internal">手機空間不足，無法安裝APP，簡單一招教你刪除快取檔案，幫LINE瘦身</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙這次回屏東時，蛙爸問小蛙「有辦法不刪除程式就可以更新嗎？」小蛙一開始不太懂意思，詳細問了之後才知道原委。</p>



<span id="more-7679"></span>



<script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"VideoObject","name":"儲存空間不足 清除 Android iPhone 快取檔案 |  | 無法安裝APP | 最基本的手機減肥 | 刪除不必要的檔案 | LINE刪除資料 | 小蛙的手機及APP教學 Ep1 | 記下來","description":"#空間不足 是很多人的夢魘，這部影片介紹最基本的 #清除快取檔案\n以 #LINE 為例，使用很久從來沒清過快取的話，可能都佔超過 1GB 以上\n手機使用時，為了加快載入速度，通常會使用所謂的快取\n久了之後這些快取檔案越來越肥大，導致經常跳出空間不足的警告\n這種情形最容易出現在 Android 的中低階手機或平板上\n\n00:00 開頭\n01:15 Android - 紅米 7 (清除所有快取)\n01:35 Android - 紅米 7 (清除個別 app 快取)\n02:03 Android - Nexus 7 (清除所有快取)\n02:15 Android - Nexus 7 (清除個別 app 快取)\n02:30 ASUS\n02:48 SAMSUNG\n03:07 iPhone 清除 LINE 快取\n\n如果遇上內部儲存空間不足時，可以清除以下快取\n會有意想不到的收穫喔！\n1. LINE\n2. YouTube\n3. Chrome\n4. Facebook\n5. Google Maps\n\n或是清除自己最常用的 app，很常用長期下來就會累積很多\n要注意是「清除快取」，不要按到「清除資料」\n搞錯的話可是會讓 app 裡的所有資訊都被清除喔！\n\n===參考資料===\n1. ASUS 如何清除應用程式的資料或快取?\nhttps:\/\/www.asus.com\/tw\/support\/FAQ\/1006432\/\n2. Galaxy Note 5 如何清除應用程式資料／快取？\nhttps:\/\/www.samsung.com\/tw\/support\/mobile-devices\/how-to-clear-application-data-cache\/\n3. OPPO 手機\nhttp:\/\/www.mcdulll.com\/blog\/post\/117099644\n\n===製作工具===\n使用 VideoScribe 製作 + Final Cut Pro X\n\n===圖片來源===\n1. かわいいフリー素材集 いらすとや\nhttps:\/\/www.irasutoya.com\/\n2. 阿咕","thumbnailUrl":"https:\/\/i.ytimg.com\/vi\/KrVJbWFB_Wo\/maxresdefault.jpg","uploadDate":"2020-07-04T07:00:50Z","duration":"PT3M52S","embedUrl":"https:\/\/www.youtube.com\/watch?v=KrVJbWFB_Wo"}</script>



<p>iPhone 比較少遇到類似的狀況，因架構設計上的問題，主要遇到空間不足的大多是 Android 系統，尤其是中低階的評價 Android 手機或平板，明明空間還有很多卻提示空間不足，常讓人不解。</p>



<p class="pre left green">此方法為 Android 原生功能，免安裝 app，如果想要清得更乾淨，可以搜尋安裝清理手機垃圾的相關 app</p>



<p>而蛙爸遇到的問題就是這個，因為內部儲存空間不足，開啟台新銀行 Richart App 有時需要做些小更新，但是系統卻提示空間不足，需要刪除 LINE，蛙姐就幫蛙爸把 LINE 刪除，更新完 Richart 之後再安裝回 LINE，每次都要這樣一次，讓蛙爸覺得非常麻煩，所以才會問小蛙有沒有其他方式。</p>



<p>小蛙看了一下蛙爸的平板，決定從快取檔案下手，快取檔案存在的目的是加快載入速度或是暫存一些資料，這樣下次就可以直接從這些快取檔案中讀取，不用重新下載或生成，一個 app 用久之後，快取檔案會有越來越龐大的趨勢，像小蛙看了一下蛙爸的平板，發現常常接收或發送「長輩圖」「早安圖」「正向能量圖」的話，LINE 的快取檔案會成長非常快速，蛙爸的 LINE 快取檔案就有快 1G 左右，另外還有 Facebook、YouTube、Chrome &#8230; 等等，總共清出了 2G 左右的空間，瞬間回春的感覺！</p>



<p>小蛙爸在旁邊筆記下來，小蛙從頭一步一步操作，讓蛙爸記錄下來，然後再讓蛙爸自己操作兩次看看，確定沒問題可以按出來後，蛙爸很開心的說，以後再也不用因為這樣又要刪除 LINE，而且還打包票，以後蛙媽、蛙叔遇到這狀況的時候，蛙爸就可以上場救援！</p>



<p>小蛙製作了一個影片，有遇到相同問題的朋友可以直接照著操作看看，要清除哪些 app 除了每個點進去看之外，可以從一些非常常使用的 app 或是 LINE、Facebook、Chrome、YouTube 這種比較容易產生大量快取的 app 著手。</p>


<div class="wp-block-image no-lightbox">
<figure class="aligncenter size-large is-resized"><a href="https://www.youtube.com/watch?v=KrVJbWFB_Wo&amp;list=PL1o1M_rBW-34mmUlNqcocBGwELdt519GC&amp;index=16" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external"><img fetchpriority="high" decoding="async" src="https://lh3.googleusercontent.com/pw/ACtC-3cp-NIOligRTndu8q99P_meEZLXd38h-muLZuTcOpVmoWCaDmME8XQxI6S_8Y7FAHalQi4ud7PNAUzJAPOCOz4bMYNnx9V9g7Ezptw2fuhpdrCAd0Z2_UOumnQnEKz1K2g_V73YoL1UdTgqdm2YWM76LQ=w1280-h720-no?authuser=2" alt="ACtC 3cp NIOligRTndu8q99P meEZLXd38h muLZuTcOpVmoWCaDmME8XQxI6S 8Y7FAHalQi4ud7PNAUzJAPOCOz4bMYNnx9V9g7Ezptw2fuhpdrCAd0Z2 UOumnQnEKz1K2g V73YoL1UdTgqdm2YWM76LQ=w1280 h720 no?authuser=2 手機空間不足，無法安裝APP，簡單一招教你刪除快取檔案，幫LINE瘦身" width="640" height="360" title="手機空間不足，無法安裝APP，簡單一招教你刪除快取檔案，幫LINE瘦身"></a><figcaption class="wp-element-caption">(點圖開啟 YouTube)</figcaption></figure></div><p>這篇文章 <a rel="nofollow" href="https://noter.tw/7679/%e6%89%8b%e6%a9%9f%e7%a9%ba%e9%96%93%e4%b8%8d%e8%b6%b3%ef%bc%8c%e7%84%a1%e6%b3%95%e5%ae%89%e8%a3%9dapp%ef%bc%8c%e7%b0%a1%e5%96%ae%e4%b8%80%e6%8b%9b%e6%95%99%e4%bd%a0%e5%88%aa%e9%99%a4%e5%bf%ab/" data-wpel-link="internal">手機空間不足，無法安裝APP，簡單一招教你刪除快取檔案，幫LINE瘦身</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/7679/%e6%89%8b%e6%a9%9f%e7%a9%ba%e9%96%93%e4%b8%8d%e8%b6%b3%ef%bc%8c%e7%84%a1%e6%b3%95%e5%ae%89%e8%a3%9dapp%ef%bc%8c%e7%b0%a1%e5%96%ae%e4%b8%80%e6%8b%9b%e6%95%99%e4%bd%a0%e5%88%aa%e9%99%a4%e5%bf%ab/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>targetSdkVersion 設定成 API 28 之後噴出的兩個 RuntimeException 處理</title>
		<link>https://noter.tw/6507/%e5%8d%87%e7%b4%9a-api-28-%e4%b9%8b%e5%be%8c%e5%99%b4%e5%87%ba%e7%9a%84%e5%85%a9%e5%80%8b-runtimeexception-%e8%99%95%e7%90%86/</link>
					<comments>https://noter.tw/6507/%e5%8d%87%e7%b4%9a-api-28-%e4%b9%8b%e5%be%8c%e5%99%b4%e5%87%ba%e7%9a%84%e5%85%a9%e5%80%8b-runtimeexception-%e8%99%95%e7%90%86/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sat, 16 Nov 2019 13:42:22 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[錯誤]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[java.lang.RuntimeException: Stub!]]></category>
		<category><![CDATA[FLAG_ACTIVITY_NEW_TASK]]></category>
		<category><![CDATA[startActivity()]]></category>
		<category><![CDATA[android.util.AndroidRuntimeException]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=6507</guid>

					<description><![CDATA[<p>小蛙在更新「我的股票精算師」的時候沒辦法上傳 apk 到 Play 商店，錯誤提示 targetSdkVersion 要從 26 提高到 28，小蛙照做之後，卻又得到這個錯誤「java.lang.Ru&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6507/%e5%8d%87%e7%b4%9a-api-28-%e4%b9%8b%e5%be%8c%e5%99%b4%e5%87%ba%e7%9a%84%e5%85%a9%e5%80%8b-runtimeexception-%e8%99%95%e7%90%86/" data-wpel-link="internal">targetSdkVersion 設定成 API 28 之後噴出的兩個 RuntimeException 處理</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙在更新「我的股票精算師」的時候沒辦法上傳 apk 到 Play 商店，錯誤提示 targetSdkVersion 要從 26 提高到 28，小蛙照做之後，卻又得到這個錯誤「java.lang.RuntimeException: Stub!」及「android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?」，記錄一下解決方法。</p>



<span id="more-6507"></span>



<h2 class="para wp-block-heading">java.lang.RuntimeException: Stub!</h2>



<p>看 stacktrace 裡面是用到 HttpGet 這個 function，可能在 Android 9 之後拿掉了，因此報這個錯誤。解決的方法參考這篇：<a href="https://developer.android.com/about/versions/pie/android-9.0-changes-28" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">Behavior changes: apps targeting API level 28+<span class="wpel-icon wpel-image wpel-icon-6"></span></a>。</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/qzh2CSts4UVD7pKzwgin-Byo5nLWGaGSjbh7YMgh_jD1Xl5botiL-rXcwFBD5aosLyB8me9Nhg2kx92ntv5pdYdOlYcYUzbcyYKNwLz8iSOukoRSksHvQANWfNCyZEhbiEX7nMOt2O1TIqIy1pcp4rGTCpGpBBb4N-AA-XaHGL3b4aQuiaUD9Nbqj-wyRGiPUkvrCNWc5UaltBcLf8VI4xPIy61dq-5gPLdLGm71ACsEiuhjcH_RDGlEowEEu_2wIDQkcW9usCIlTxibwGmZvz7XEEEukUvV8FvFfbZc3oOR2AASzFIakscArvqQ-VLprovUv9os1hGTqKKM9PGu4iBrqFc5ndmVacxqqAyGRH0HjmCUeWNDy8S4W0HxuZ81LEteQwxELQsnY5ADJ1i_xzUHvXZU9_dBqadrCjEA3g720rWsz-JgtUsWFn2QBijSOK2Di9HMH6r7gEWanqKUR3EYz0lRg5-H77Auol0Udncl8jYMfCJff1GC8k0LO1AWn-M_CvIoMSaL9OERGMfSmOdbXfHj07EtmZjdrJx8Gibcp_z-yU8AfMH-698DjyoxiVcH_zZQhLvvdF7mgsWJMmmYYkgCmn6FIjnRhqMwqUG_4Y672n48nrgCipHRhgDiMtQ_s8U21rj2bCDDqQ__jShcxicQSsKNl9_Olag42C0cW5EaBT6m9UkjvxRIKu_QxmbEPJaYmI0x8AqYt-j-iY1oroBCpFN8rRQ46ETZReyNcuTL=w884-h488-no" alt="qzh2CSts4UVD7pKzwgin Byo5nLWGaGSjbh7YMgh jD1Xl5botiL rXcwFBD5aosLyB8me9Nhg2kx92ntv5pdYdOlYcYUzbcyYKNwLz8iSOukoRSksHvQANWfNCyZEhbiEX7nMOt2O1TIqIy1pcp4rGTCpGpBBb4N AA XaHGL3b4aQuiaUD9Nbqj wyRGiPUkvrCNWc5UaltBcLf8VI4xPIy61dq 5gPLdLGm71ACsEiuhjcH RDGlEowEEu 2wIDQkcW9usCIlTxibwGmZvz7XEEEukUvV8FvFfbZc3oOR2AASzFIakscArvqQ VLprovUv9os1hGTqKKM9PGu4iBrqFc5ndmVacxqqAyGRH0HjmCUeWNDy8S4W0HxuZ81LEteQwxELQsnY5ADJ1i xzUHvXZU9 dBqadrCjEA3g720rWsz JgtUsWFn2QBijSOK2Di9HMH6r7gEWanqKUR3EYz0lRg5 H77Auol0Udncl8jYMfCJff1GC8k0LO1AWn M CvIoMSaL9OERGMfSmOdbXfHj07EtmZjdrJx8Gibcp z yU8AfMH 698DjyoxiVcH zZQhLvvdF7mgsWJMmmYYkgCmn6FIjnRhqMwqUG 4Y672n48nrgCipHRhgDiMtQ s8U21rj2bCDDqQ jShcxicQSsKNl9 Olag42C0cW5EaBT6m9UkjvxRIKu QxmbEPJaYmI0x8AqYt j iY1oroBCpFN8rRQ46ETZReyNcuTL=w884 h488 no targetSdkVersion 設定成 API 28 之後噴出的兩個 RuntimeException 處理" title="targetSdkVersion 設定成 API 28 之後噴出的兩個 RuntimeException 處理"></figure></div>



<p>根據官方文件，只要在 <mark class="yellow">AndroidManifest.xml</mark> 裡面加入</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">&lt;uses-library android:name="org.apache.http.legacy" android:required="false"/&gt;</pre>



<p>要加在哪裡呢？加在 &lt;application&gt; 的標籤下面就可以了</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">&lt;application&gt;
  ...
  &lt;uses-library android:name="org.apache.http.legacy" android:required="false"/&gt;
  ...
&lt;/application&gt;</pre>



<h2 class="para wp-block-heading">android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?</h2>



<p>這個問題呢是小蛙加入了 CustomTabsIntent 如果在 API 26 的時候編譯跟執行都沒有任何問題，更新到 API 28 之後一點就噴上面的錯誤，Google 了一下發現只要加入錯誤提示裡面的 flag 就可以了，修改的方式如下</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
CustomTabsIntent customTabsIntent = builder.build();        
// 只要加入這行就可以了
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
customTabsIntent.launchUrl(getApplicationContext(), Uri.parse(url));</pre>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6507/%e5%8d%87%e7%b4%9a-api-28-%e4%b9%8b%e5%be%8c%e5%99%b4%e5%87%ba%e7%9a%84%e5%85%a9%e5%80%8b-runtimeexception-%e8%99%95%e7%90%86/" data-wpel-link="internal">targetSdkVersion 設定成 API 28 之後噴出的兩個 RuntimeException 處理</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/6507/%e5%8d%87%e7%b4%9a-api-28-%e4%b9%8b%e5%be%8c%e5%99%b4%e5%87%ba%e7%9a%84%e5%85%a9%e5%80%8b-runtimeexception-%e8%99%95%e7%90%86/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>紅米 7 (Redmi 7) 連接到 Android Studio (Mac)</title>
		<link>https://noter.tw/5024/%e7%b4%85%e7%b1%b3-7-redmi-7-%e9%80%a3%e6%8e%a5%e5%88%b0-android-studio-mac/</link>
					<comments>https://noter.tw/5024/%e7%b4%85%e7%b1%b3-7-redmi-7-%e9%80%a3%e6%8e%a5%e5%88%b0-android-studio-mac/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Tue, 11 Jun 2019 14:19:45 +0000</pubDate>
				<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[2019]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[紅米7]]></category>
		<category><![CDATA[紅米]]></category>
		<category><![CDATA[Android Studio]]></category>
		<category><![CDATA[INSTALL_FAILED_USER_RESTRICTED]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=5024</guid>

					<description><![CDATA[<p>小蛙後來使用 iPhone，之前在 Android 開發的「我的股票精算師」，因為 HTC New One 升不上去了，就越來越少維護，經過那麼長的時間，Android 也越改越多，越來越好用，越來越&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/5024/%e7%b4%85%e7%b1%b3-7-redmi-7-%e9%80%a3%e6%8e%a5%e5%88%b0-android-studio-mac/" data-wpel-link="internal">紅米 7 (Redmi 7) 連接到 Android Studio (Mac)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙後來使用 iPhone，之前在 Android 開發的「我的股票精算師」，因為 HTC New One 升不上去了，就越來越少維護，經過那麼長的時間，Android 也越改越多，越來越好用，越來越安全，前幾天不斷有使用者回報會閃退 &#8230;&#8230;</p>



<span id="more-5024"></span>



<h2 class="para wp-block-heading">囉哩八唆</h2>



<p>小蛙手邊沒有實體 Android 8+ 的裝置，雖然 Android Studio 有提供模擬器，但是模擬器不能完全跟實體機一模一樣，小蛙不管怎麼試都沒辦法試出閃退的狀況，只能先「盲改」，看錯誤訊息再把可能會出現錯誤的部份處理掉。</p>



<p>回家過端午，看著問題越來越多，心想這樣不是辦法，好像應該要有一台 Android 8+ 的手機來做測試，到台北之後立刻跟阿咕到三創買一隻最便宜的紅米 7 來當測試機。</p>



<p>題外話，前一天阿咕偷買 Google Pixel 3a 給小蛙，一知道後立馬讓阿咕把手機退掉，小蛙還沒準備要跳回 Android，即使 Google 親兒子的評價很好，但是小蛙用 Mac + iPhone 合作無間很方便！一下子跑回 Android 覺得傷感，況且小蛙買 Android 只是為了當測試機，Google Pixel 3a 這台測試機太高貴了。</p>



<p>買到紅米 7 之後一直到今天才有時間開箱</p>



<div class="wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/9VAYpF7vnKc_5utcRuvafu3lO5Z-3A77IaI1PJojBNr4xmIaPt_1f16pe8VXU_C5auyTprsFSlsvTjiHTCrHdDgIBKFktiL6IsWcIliOJkktADZ7wYVlowTklgb9ZhomXR8OwSFoLe1jrR7bhbvgpZHHrhGwN0UMAAh-_zIskGT0fEe1o19_1X0OyvLSrU4b1_nyRvSm6h1uZarfgG8U5_SbviCNRXLCyNgA3BCPaC51O0uJrJMOcH8kyT7Q46uqqHcHUd1G9idhHfTuqUxpNn1B_KMoWmIJ_4t1HIFaoq9dEQ_vZqUXf1BIXQSGEfLzc5TYn1Z4ftb9Ls4XvV2L0N5NEpTR2C5uh6j7IVIHHyzro5H04kVDBfE1iAQdKyLXnlPVDdpe-v8ZlF4Qze93Bxwtukprd5Eo6HhtatWaN7KbYa1nT8B26ZkWmwTUFioM1DB_mBHqAjhazw43RslKolnmW-7Am5q0AoUO_Rzk2VtRE2W7WX6vDnFumkeFTVy805j41xskD3xj66wJbjlpNDF-eV_pDRKwgMP7QZ1P_OjfH7PJTaO3d4VgKvafF5l6GzULob3GHc6C4A6zqwkvLi4fIfgT5tguJbuqRh9NgUZQcgHcgH9aR2xEKWtBbagEfZcdglfxbL5PsQ2pXR8f0DMAh5a6hQcfaOEyRmvc7I39soN91cJ6S9pHVtc8GkX1q3KHlUzDjrbiCfudg0Se4T1i3Q=s1532-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/9VAYpF7vnKc_5utcRuvafu3lO5Z-3A77IaI1PJojBNr4xmIaPt_1f16pe8VXU_C5auyTprsFSlsvTjiHTCrHdDgIBKFktiL6IsWcIliOJkktADZ7wYVlowTklgb9ZhomXR8OwSFoLe1jrR7bhbvgpZHHrhGwN0UMAAh-_zIskGT0fEe1o19_1X0OyvLSrU4b1_nyRvSm6h1uZarfgG8U5_SbviCNRXLCyNgA3BCPaC51O0uJrJMOcH8kyT7Q46uqqHcHUd1G9idhHfTuqUxpNn1B_KMoWmIJ_4t1HIFaoq9dEQ_vZqUXf1BIXQSGEfLzc5TYn1Z4ftb9Ls4XvV2L0N5NEpTR2C5uh6j7IVIHHyzro5H04kVDBfE1iAQdKyLXnlPVDdpe-v8ZlF4Qze93Bxwtukprd5Eo6HhtatWaN7KbYa1nT8B26ZkWmwTUFioM1DB_mBHqAjhazw43RslKolnmW-7Am5q0AoUO_Rzk2VtRE2W7WX6vDnFumkeFTVy805j41xskD3xj66wJbjlpNDF-eV_pDRKwgMP7QZ1P_OjfH7PJTaO3d4VgKvafF5l6GzULob3GHc6C4A6zqwkvLi4fIfgT5tguJbuqRh9NgUZQcgHcgH9aR2xEKWtBbagEfZcdglfxbL5PsQ2pXR8f0DMAh5a6hQcfaOEyRmvc7I39soN91cJ6S9pHVtc8GkX1q3KHlUzDjrbiCfudg0Se4T1i3Q=s1532-no" alt="9VAYpF7vnKc 5utcRuvafu3lO5Z 3A77IaI1PJojBNr4xmIaPt 1f16pe8VXU C5auyTprsFSlsvTjiHTCrHdDgIBKFktiL6IsWcIliOJkktADZ7wYVlowTklgb9ZhomXR8OwSFoLe1jrR7bhbvgpZHHrhGwN0UMAAh zIskGT0fEe1o19 1X0OyvLSrU4b1 nyRvSm6h1uZarfgG8U5 SbviCNRXLCyNgA3BCPaC51O0uJrJMOcH8kyT7Q46uqqHcHUd1G9idhHfTuqUxpNn1B KMoWmIJ 4t1HIFaoq9dEQ vZqUXf1BIXQSGEfLzc5TYn1Z4ftb9Ls4XvV2L0N5NEpTR2C5uh6j7IVIHHyzro5H04kVDBfE1iAQdKyLXnlPVDdpe v8ZlF4Qze93Bxwtukprd5Eo6HhtatWaN7KbYa1nT8B26ZkWmwTUFioM1DB mBHqAjhazw43RslKolnmW 7Am5q0AoUO Rzk2VtRE2W7WX6vDnFumkeFTVy805j41xskD3xj66wJbjlpNDF eV pDRKwgMP7QZ1P OjfH7PJTaO3d4VgKvafF5l6GzULob3GHc6C4A6zqwkvLi4fIfgT5tguJbuqRh9NgUZQcgHcgH9aR2xEKWtBbagEfZcdglfxbL5PsQ2pXR8f0DMAh5a6hQcfaOEyRmvc7I39soN91cJ6S9pHVtc8GkX1q3KHlUzDjrbiCfudg0Se4T1i3Q=s1532 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/261loL7f82sezp2SPpvjLGqKVPzeAuUJU9mDrRaOPfSjTdHX90Dc-QMOhbVIrc11K4S1HULX00qR-c95C7mfFcNCTrdTV6uiAEz3gdzAjcUgUnq4bUhvNC9NUA6YHliBOK8twsUFW5PkMkBjbw9_3ODt0tIZIcdRFELYQ7h-YDVLStdnpxOVWxiVDtJu0M_oH8g7QaQv2VHaK53lPGmHOnOYi3jbPkeofcnFQIbV7IMgiCs5KL5E2lb0wmtBS4irycHcnQ9HRCs8700ag3HiWQy-7h7eR58b-AAxE_b2u7BfjBj6TyiBkfNW56OtBsiadxdiW1ALt4QUixPh9oBDrL-3cnRwmUkMiFCjh81cFnUXnKuAMefk99Sn22UuRP7NXHw-ij7MLifXkFGL6daA6FlbXVQXymTKdw2oTcXLkAcoIhLSeDnu0bxAwDXcBAbaRmzZTYFAbQYOi1u8Vfi0jyD9uEoPQeuRFnpCupK3Lq7ueRytWD3aQghKynm7qQDfq3jpRB1vXTaOkq0ySC1aTUd3l-7x_lyIgalUDiPFkhSEK_BQOBFIgd4XwrhtYFqHW0R8cP5pYNayU5Dr8BNe4t3Rdu5Kw1F37xNWK52FMkVatm-Hjg34KSrAzpGBtwER19DiIdpcd9A_OQd6zhr8BCS9di39KLD52q_Kn4fcoFzGZkxw3UyQxrPmfc9P_nYxoMX64SHTB6qEK34fkjEWUa99WA=s1434-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/261loL7f82sezp2SPpvjLGqKVPzeAuUJU9mDrRaOPfSjTdHX90Dc-QMOhbVIrc11K4S1HULX00qR-c95C7mfFcNCTrdTV6uiAEz3gdzAjcUgUnq4bUhvNC9NUA6YHliBOK8twsUFW5PkMkBjbw9_3ODt0tIZIcdRFELYQ7h-YDVLStdnpxOVWxiVDtJu0M_oH8g7QaQv2VHaK53lPGmHOnOYi3jbPkeofcnFQIbV7IMgiCs5KL5E2lb0wmtBS4irycHcnQ9HRCs8700ag3HiWQy-7h7eR58b-AAxE_b2u7BfjBj6TyiBkfNW56OtBsiadxdiW1ALt4QUixPh9oBDrL-3cnRwmUkMiFCjh81cFnUXnKuAMefk99Sn22UuRP7NXHw-ij7MLifXkFGL6daA6FlbXVQXymTKdw2oTcXLkAcoIhLSeDnu0bxAwDXcBAbaRmzZTYFAbQYOi1u8Vfi0jyD9uEoPQeuRFnpCupK3Lq7ueRytWD3aQghKynm7qQDfq3jpRB1vXTaOkq0ySC1aTUd3l-7x_lyIgalUDiPFkhSEK_BQOBFIgd4XwrhtYFqHW0R8cP5pYNayU5Dr8BNe4t3Rdu5Kw1F37xNWK52FMkVatm-Hjg34KSrAzpGBtwER19DiIdpcd9A_OQd6zhr8BCS9di39KLD52q_Kn4fcoFzGZkxw3UyQxrPmfc9P_nYxoMX64SHTB6qEK34fkjEWUa99WA=s1434-no" alt="261loL7f82sezp2SPpvjLGqKVPzeAuUJU9mDrRaOPfSjTdHX90Dc QMOhbVIrc11K4S1HULX00qR c95C7mfFcNCTrdTV6uiAEz3gdzAjcUgUnq4bUhvNC9NUA6YHliBOK8twsUFW5PkMkBjbw9 3ODt0tIZIcdRFELYQ7h YDVLStdnpxOVWxiVDtJu0M oH8g7QaQv2VHaK53lPGmHOnOYi3jbPkeofcnFQIbV7IMgiCs5KL5E2lb0wmtBS4irycHcnQ9HRCs8700ag3HiWQy 7h7eR58b AAxE b2u7BfjBj6TyiBkfNW56OtBsiadxdiW1ALt4QUixPh9oBDrL 3cnRwmUkMiFCjh81cFnUXnKuAMefk99Sn22UuRP7NXHw ij7MLifXkFGL6daA6FlbXVQXymTKdw2oTcXLkAcoIhLSeDnu0bxAwDXcBAbaRmzZTYFAbQYOi1u8Vfi0jyD9uEoPQeuRFnpCupK3Lq7ueRytWD3aQghKynm7qQDfq3jpRB1vXTaOkq0ySC1aTUd3l 7x lyIgalUDiPFkhSEK BQOBFIgd4XwrhtYFqHW0R8cP5pYNayU5Dr8BNe4t3Rdu5Kw1F37xNWK52FMkVatm Hjg34KSrAzpGBtwER19DiIdpcd9A OQd6zhr8BCS9di39KLD52q Kn4fcoFzGZkxw3UyQxrPmfc9P nYxoMX64SHTB6qEK34fkjEWUa99WA=s1434 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/yKdDhpcuZFLBGZTzcWhXlbHLiZugDxZUun1Wp9qjSALrTHuDtngl6pbYjdT7HtGx9T9jO7_PjVvaYWhkut8D-FjS_Cm2h-RG7JvM0v8SRSyiISmOh1zpf0nKTrBMFVjW_hh34T_g7YvYljrsPcWYv7T_3erIggOVAzhliIitz3l2s0vsnPAvuHt1JWTp_eHEdikxsFAY2no0P_ynojk4rPMIIkn74E78D_5YnGO2taRdqxC_Uc2sKZvUpesJNLlAwtkmhKARNtcwZydSepq86_6-MxwjrviFsmOpsXFJcfcIrBoxA3_t16vT75ecvqGyfBb1TajHUnBfflHw1-Hc2pM-hG0OZRBIXu-vxxvIfX96f3fdp5Xw101jQAt0_v8KS_QRr8V9BJqhqPAtHb8MS3lmkI9V51HevlgmrD_bcQIUpl4cCqQnbQJEKIzFEAwvmNJyVi1YxqQK3tMCQVkbE6Pz_KMkFEgjNpcm1LXYjmbxXjMypqB52lcNBafgAtSvizIvXhB1X1uuPJH3ofUpsA9EOG5qB3sf9nmj-mXK0q0GsuMgkCjZ9xc4cQpNXRhOrx-P4nxn6_46i0iZGaWwCLnsCMj7N4u18Z0zWWHxyimpsw5vBjJJwQvqBEj76KYaKpWjAeRw7vpWjOt1cm6NPNh-ihIACIHJjbyo9VEmv_pDJZOkS13JFg8dxSSi34UXgtGe4xN8pt5WPwOMoAUx8FJQkg=s1434-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/yKdDhpcuZFLBGZTzcWhXlbHLiZugDxZUun1Wp9qjSALrTHuDtngl6pbYjdT7HtGx9T9jO7_PjVvaYWhkut8D-FjS_Cm2h-RG7JvM0v8SRSyiISmOh1zpf0nKTrBMFVjW_hh34T_g7YvYljrsPcWYv7T_3erIggOVAzhliIitz3l2s0vsnPAvuHt1JWTp_eHEdikxsFAY2no0P_ynojk4rPMIIkn74E78D_5YnGO2taRdqxC_Uc2sKZvUpesJNLlAwtkmhKARNtcwZydSepq86_6-MxwjrviFsmOpsXFJcfcIrBoxA3_t16vT75ecvqGyfBb1TajHUnBfflHw1-Hc2pM-hG0OZRBIXu-vxxvIfX96f3fdp5Xw101jQAt0_v8KS_QRr8V9BJqhqPAtHb8MS3lmkI9V51HevlgmrD_bcQIUpl4cCqQnbQJEKIzFEAwvmNJyVi1YxqQK3tMCQVkbE6Pz_KMkFEgjNpcm1LXYjmbxXjMypqB52lcNBafgAtSvizIvXhB1X1uuPJH3ofUpsA9EOG5qB3sf9nmj-mXK0q0GsuMgkCjZ9xc4cQpNXRhOrx-P4nxn6_46i0iZGaWwCLnsCMj7N4u18Z0zWWHxyimpsw5vBjJJwQvqBEj76KYaKpWjAeRw7vpWjOt1cm6NPNh-ihIACIHJjbyo9VEmv_pDJZOkS13JFg8dxSSi34UXgtGe4xN8pt5WPwOMoAUx8FJQkg=s1434-no" alt="yKdDhpcuZFLBGZTzcWhXlbHLiZugDxZUun1Wp9qjSALrTHuDtngl6pbYjdT7HtGx9T9jO7 PjVvaYWhkut8D FjS Cm2h RG7JvM0v8SRSyiISmOh1zpf0nKTrBMFVjW hh34T g7YvYljrsPcWYv7T 3erIggOVAzhliIitz3l2s0vsnPAvuHt1JWTp eHEdikxsFAY2no0P ynojk4rPMIIkn74E78D 5YnGO2taRdqxC Uc2sKZvUpesJNLlAwtkmhKARNtcwZydSepq86 6 MxwjrviFsmOpsXFJcfcIrBoxA3 t16vT75ecvqGyfBb1TajHUnBfflHw1 Hc2pM hG0OZRBIXu vxxvIfX96f3fdp5Xw101jQAt0 v8KS QRr8V9BJqhqPAtHb8MS3lmkI9V51HevlgmrD bcQIUpl4cCqQnbQJEKIzFEAwvmNJyVi1YxqQK3tMCQVkbE6Pz KMkFEgjNpcm1LXYjmbxXjMypqB52lcNBafgAtSvizIvXhB1X1uuPJH3ofUpsA9EOG5qB3sf9nmj mXK0q0GsuMgkCjZ9xc4cQpNXRhOrx P4nxn6 46i0iZGaWwCLnsCMj7N4u18Z0zWWHxyimpsw5vBjJJwQvqBEj76KYaKpWjAeRw7vpWjOt1cm6NPNh ihIACIHJjbyo9VEmv pDJZOkS13JFg8dxSSi34UXgtGe4xN8pt5WPwOMoAUx8FJQkg=s1434 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/vXdHmMj66a5AP1fu0t49KqLH1mzpMEdRObmJyzrdrb4Yit9YeETdWhFGz_ZhVaDVFoyIQPbkiX-43yDVjiF9eV1fWMM7m4Y1k_AfeYIef299RcrImnGZV8cluvSwBGTuXCPohgkpfX4cPkNlN4siwJXueXyanRSbu5K4KzI5Ftqtf3ektVhbTTfbBrt1JLHFwptsIoyoiQ4K8U9EF9uyweTBtjmsnzccir_hcNGzZPfH3DPD4vhP2jh7faR1i_Haijfz2ZUbl0rPgQ7waHCuoKIkd-g8yPqvQxw2YR73IvVp_5IcHW8UnzqdW06c6MV9O7nzSNmbimgAU5MZnFskilXprzUwssQ5MLh6HS3Yirzo6jhs3cCxRTtni0uMEUyJ3xsqCHiDr3B9T-n-vd7a9PYG3JKz80WdrpYugtr7acVnxjDwMsByixZLpJIMv4hgrcF1oQmkYSFdAvJuQulHrEFNtk7J_JSCZeM0i6ca7zas0E6m4xWVRPf_ZwSr6Kf6SL-zlelWya4_M5xK0zNa0hd427jfFBUTryFuIusu3nQjRpU8qNcL2jjIj_CvLw9bMplvtB1TAILhiDd6Ymv2MES9DBVhaWkLhVyketNORPfsUk4P44D5ElBnpAy08e9J5Vvocb_nRbV93TkxxeKHKIsO2J9QdjgbKFZK_haCRVUf_Tl_Ik5wuPSTUPR0ZX0_-lzf3YycyFhN-2jVkmD5E-hsUg=s1434-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/vXdHmMj66a5AP1fu0t49KqLH1mzpMEdRObmJyzrdrb4Yit9YeETdWhFGz_ZhVaDVFoyIQPbkiX-43yDVjiF9eV1fWMM7m4Y1k_AfeYIef299RcrImnGZV8cluvSwBGTuXCPohgkpfX4cPkNlN4siwJXueXyanRSbu5K4KzI5Ftqtf3ektVhbTTfbBrt1JLHFwptsIoyoiQ4K8U9EF9uyweTBtjmsnzccir_hcNGzZPfH3DPD4vhP2jh7faR1i_Haijfz2ZUbl0rPgQ7waHCuoKIkd-g8yPqvQxw2YR73IvVp_5IcHW8UnzqdW06c6MV9O7nzSNmbimgAU5MZnFskilXprzUwssQ5MLh6HS3Yirzo6jhs3cCxRTtni0uMEUyJ3xsqCHiDr3B9T-n-vd7a9PYG3JKz80WdrpYugtr7acVnxjDwMsByixZLpJIMv4hgrcF1oQmkYSFdAvJuQulHrEFNtk7J_JSCZeM0i6ca7zas0E6m4xWVRPf_ZwSr6Kf6SL-zlelWya4_M5xK0zNa0hd427jfFBUTryFuIusu3nQjRpU8qNcL2jjIj_CvLw9bMplvtB1TAILhiDd6Ymv2MES9DBVhaWkLhVyketNORPfsUk4P44D5ElBnpAy08e9J5Vvocb_nRbV93TkxxeKHKIsO2J9QdjgbKFZK_haCRVUf_Tl_Ik5wuPSTUPR0ZX0_-lzf3YycyFhN-2jVkmD5E-hsUg=s1434-no" alt="vXdHmMj66a5AP1fu0t49KqLH1mzpMEdRObmJyzrdrb4Yit9YeETdWhFGz ZhVaDVFoyIQPbkiX 43yDVjiF9eV1fWMM7m4Y1k AfeYIef299RcrImnGZV8cluvSwBGTuXCPohgkpfX4cPkNlN4siwJXueXyanRSbu5K4KzI5Ftqtf3ektVhbTTfbBrt1JLHFwptsIoyoiQ4K8U9EF9uyweTBtjmsnzccir hcNGzZPfH3DPD4vhP2jh7faR1i Haijfz2ZUbl0rPgQ7waHCuoKIkd g8yPqvQxw2YR73IvVp 5IcHW8UnzqdW06c6MV9O7nzSNmbimgAU5MZnFskilXprzUwssQ5MLh6HS3Yirzo6jhs3cCxRTtni0uMEUyJ3xsqCHiDr3B9T n vd7a9PYG3JKz80WdrpYugtr7acVnxjDwMsByixZLpJIMv4hgrcF1oQmkYSFdAvJuQulHrEFNtk7J JSCZeM0i6ca7zas0E6m4xWVRPf ZwSr6Kf6SL zlelWya4 M5xK0zNa0hd427jfFBUTryFuIusu3nQjRpU8qNcL2jjIj CvLw9bMplvtB1TAILhiDd6Ymv2MES9DBVhaWkLhVyketNORPfsUk4P44D5ElBnpAy08e9J5Vvocb nRbV93TkxxeKHKIsO2J9QdjgbKFZK haCRVUf Tl Ik5wuPSTUPR0ZX0 lzf3YycyFhN 2jVkmD5E hsUg=s1434 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>
</div>
</div>



<p>目前開始使用第一天，把該更新的更新一下，整體感覺都還不錯，小蛙買的是黑色的，因為感覺其他兩種顏色塑膠感太重 &#8230;</p>



<h2 class="para wp-block-heading">紅米 7 連接 Android Studio</h2>



<p>說太多廢話了，小蛙把紅米 7 連接上 Mac，在 Android Studio 裡面按下 Run，果然沒有那麼簡單</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">21:17 Session 'app': Install failed. Installation failed Rerun</pre>



<p>之前開發都要先裝 driver，但是 Mac 下小蛙好像都沒有裝過 driver，就能開發其他安卓裝置，好久沒使用安卓裝置，印象中有一個東西叫做「USB 偵錯」以及「MTP」。</p>



<p>MTP 設定好了，但找不到 USB 偵錯，努力回想 ～ 有一個東西叫做「開發者模式」（在紅米裡面叫做開發者選項）</p>



<pre class="left green">設定 -&gt; 關於手機 -&gt; MIUI 版本（連點多下就可以開啟開發者選項）</pre>



<div class="wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/YFnh1AfyWzU5hbGLp7Bj5h3MwpcD4yXRPSF78F5UYWf4TTVjApUNXqlqvQPIPThuELF3QN3d0XNfaozvgoaOKPlxYvoakWYgHlXJSyzPUfRaHvmVpNQofxPLx9JUO7bf_DkgtIwAc2IOTscTy6BOS1e9-2ELTuH473uV-___hn0VqyuPQNI_2CSmn85bmEVrAdlHMuWZ6APieBOjnLtEipvZqYCycjNJnmUnKRdug36SooJJOVvQI2o7BWZrHkMXsqvJF8y_-R1_vhe_nWGYaxDW8NsncZXekkAbBQ9cuVmUVwaL6OpdVNhobIBG4Tso_rbw-J63mDDEinDYwgKheUq3CyDnAuh-BJ5PFdBRtKM4d2-Y4O2YvdlEb7p2aZrOSWtI34OOwm8yhqoVOA83rTSp_fqZB9VrllIgAxnIiSEGAHS_AgI-Bn7kPQRTaS_8e1MbFHJeZQIok3vG1YweTchyEW9BeGtY9Wzu8WpNOGgOqG4Hn8Pr-hqb7Oqwvl1sfocMvQWMrQkWWtvibc0n1ghSG13-ySEVBPNNhcrhLpGb5TrFD4Z7JlDAaQUFvknXmGj9K-BNtUeWmza6mLb5mlR2oVa73VWFNVJdPjcUjle78PbbTpIANKO4GdJeuQmGp3Cq4uqR68MNGx-LUtE8MwXHE1C6-doSAE8Qh2nfvPsfjC7eNzdRuJYLJlzQjsyH2iMjSTqgmALWumL5sy1k6GDNIQ=w720-h1520-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/YFnh1AfyWzU5hbGLp7Bj5h3MwpcD4yXRPSF78F5UYWf4TTVjApUNXqlqvQPIPThuELF3QN3d0XNfaozvgoaOKPlxYvoakWYgHlXJSyzPUfRaHvmVpNQofxPLx9JUO7bf_DkgtIwAc2IOTscTy6BOS1e9-2ELTuH473uV-___hn0VqyuPQNI_2CSmn85bmEVrAdlHMuWZ6APieBOjnLtEipvZqYCycjNJnmUnKRdug36SooJJOVvQI2o7BWZrHkMXsqvJF8y_-R1_vhe_nWGYaxDW8NsncZXekkAbBQ9cuVmUVwaL6OpdVNhobIBG4Tso_rbw-J63mDDEinDYwgKheUq3CyDnAuh-BJ5PFdBRtKM4d2-Y4O2YvdlEb7p2aZrOSWtI34OOwm8yhqoVOA83rTSp_fqZB9VrllIgAxnIiSEGAHS_AgI-Bn7kPQRTaS_8e1MbFHJeZQIok3vG1YweTchyEW9BeGtY9Wzu8WpNOGgOqG4Hn8Pr-hqb7Oqwvl1sfocMvQWMrQkWWtvibc0n1ghSG13-ySEVBPNNhcrhLpGb5TrFD4Z7JlDAaQUFvknXmGj9K-BNtUeWmza6mLb5mlR2oVa73VWFNVJdPjcUjle78PbbTpIANKO4GdJeuQmGp3Cq4uqR68MNGx-LUtE8MwXHE1C6-doSAE8Qh2nfvPsfjC7eNzdRuJYLJlzQjsyH2iMjSTqgmALWumL5sy1k6GDNIQ=w720-h1520-no" alt="YFnh1AfyWzU5hbGLp7Bj5h3MwpcD4yXRPSF78F5UYWf4TTVjApUNXqlqvQPIPThuELF3QN3d0XNfaozvgoaOKPlxYvoakWYgHlXJSyzPUfRaHvmVpNQofxPLx9JUO7bf DkgtIwAc2IOTscTy6BOS1e9 2ELTuH473uV hn0VqyuPQNI 2CSmn85bmEVrAdlHMuWZ6APieBOjnLtEipvZqYCycjNJnmUnKRdug36SooJJOVvQI2o7BWZrHkMXsqvJF8y R1 vhe nWGYaxDW8NsncZXekkAbBQ9cuVmUVwaL6OpdVNhobIBG4Tso rbw J63mDDEinDYwgKheUq3CyDnAuh BJ5PFdBRtKM4d2 Y4O2YvdlEb7p2aZrOSWtI34OOwm8yhqoVOA83rTSp fqZB9VrllIgAxnIiSEGAHS AgI Bn7kPQRTaS 8e1MbFHJeZQIok3vG1YweTchyEW9BeGtY9Wzu8WpNOGgOqG4Hn8Pr hqb7Oqwvl1sfocMvQWMrQkWWtvibc0n1ghSG13 ySEVBPNNhcrhLpGb5TrFD4Z7JlDAaQUFvknXmGj9K BNtUeWmza6mLb5mlR2oVa73VWFNVJdPjcUjle78PbbTpIANKO4GdJeuQmGp3Cq4uqR68MNGx LUtE8MwXHE1C6 doSAE8Qh2nfvPsfjC7eNzdRuJYLJlzQjsyH2iMjSTqgmALWumL5sy1k6GDNIQ=w720 h1520 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/_BicEHsMOi_OdxIudL_ELmqOKuTpjfVGbLwmsuagm9IM07Udf3LW-xryPAS24pVBl5Qwu07zWxneOMD4x1ZFRtsZsuiTQfk4TFA0mTbxtz8QRrcvxqRO2k4cNPPWsrnHWKewgmRl0Z1hB8VUgwTfGvGndkHrg9TunRUq0ejU2Rg7WpqjjSlWkeSSoUiuqKic5ewqVu4OgavpRSe7VADPRvvEAX-2aNRrwmFkpZWuTHkgt1RZCVpkON6nm-m6CoZTLc8SVhPAzKW5b_tEYeSkjojLxhs1dNFWnafls1iy0KOOzBwEeoKav1E7KSgA42zix-KGsl5gm0g5fI9pCwV6N07YzZf7rJRhLph8H7F1f44E6NG7xL6YH_szk3ln-fki3lrPtKtoePLMOVXNBaerRngNeQral9uRwiPfq_N4YDDSnbWb7hjpv66n-XpURPyh19_09uOnEkE5ID7oDqjHVWXnzD3c6ly2iphWtWI1UovtOPlYKHLE4Pz3NJsx4U0_qZXUYZmecbEWDnkWaHjpCdfPg8Q44atr99NUFa_Qfr5aicHMLX03sMeI_zonPN1smIUzqwUUOs5arR-FXBOblsr9kUM55AHvf75JYR1086fgrFfaSYMFx3S1r0ZHVArKt31LPoEY3al7xn2js-GjlXDZzMoIcLNs88MIAF2KziWAmc2LibB6Hmq5XdjcvjNsU3rtR4HLOXz6t4aulsweh0fjXQ=w720-h1520-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/_BicEHsMOi_OdxIudL_ELmqOKuTpjfVGbLwmsuagm9IM07Udf3LW-xryPAS24pVBl5Qwu07zWxneOMD4x1ZFRtsZsuiTQfk4TFA0mTbxtz8QRrcvxqRO2k4cNPPWsrnHWKewgmRl0Z1hB8VUgwTfGvGndkHrg9TunRUq0ejU2Rg7WpqjjSlWkeSSoUiuqKic5ewqVu4OgavpRSe7VADPRvvEAX-2aNRrwmFkpZWuTHkgt1RZCVpkON6nm-m6CoZTLc8SVhPAzKW5b_tEYeSkjojLxhs1dNFWnafls1iy0KOOzBwEeoKav1E7KSgA42zix-KGsl5gm0g5fI9pCwV6N07YzZf7rJRhLph8H7F1f44E6NG7xL6YH_szk3ln-fki3lrPtKtoePLMOVXNBaerRngNeQral9uRwiPfq_N4YDDSnbWb7hjpv66n-XpURPyh19_09uOnEkE5ID7oDqjHVWXnzD3c6ly2iphWtWI1UovtOPlYKHLE4Pz3NJsx4U0_qZXUYZmecbEWDnkWaHjpCdfPg8Q44atr99NUFa_Qfr5aicHMLX03sMeI_zonPN1smIUzqwUUOs5arR-FXBOblsr9kUM55AHvf75JYR1086fgrFfaSYMFx3S1r0ZHVArKt31LPoEY3al7xn2js-GjlXDZzMoIcLNs88MIAF2KziWAmc2LibB6Hmq5XdjcvjNsU3rtR4HLOXz6t4aulsweh0fjXQ=w720-h1520-no" alt="BicEHsMOi OdxIudL ELmqOKuTpjfVGbLwmsuagm9IM07Udf3LW xryPAS24pVBl5Qwu07zWxneOMD4x1ZFRtsZsuiTQfk4TFA0mTbxtz8QRrcvxqRO2k4cNPPWsrnHWKewgmRl0Z1hB8VUgwTfGvGndkHrg9TunRUq0ejU2Rg7WpqjjSlWkeSSoUiuqKic5ewqVu4OgavpRSe7VADPRvvEAX 2aNRrwmFkpZWuTHkgt1RZCVpkON6nm m6CoZTLc8SVhPAzKW5b tEYeSkjojLxhs1dNFWnafls1iy0KOOzBwEeoKav1E7KSgA42zix KGsl5gm0g5fI9pCwV6N07YzZf7rJRhLph8H7F1f44E6NG7xL6YH szk3ln fki3lrPtKtoePLMOVXNBaerRngNeQral9uRwiPfq N4YDDSnbWb7hjpv66n XpURPyh19 09uOnEkE5ID7oDqjHVWXnzD3c6ly2iphWtWI1UovtOPlYKHLE4Pz3NJsx4U0 qZXUYZmecbEWDnkWaHjpCdfPg8Q44atr99NUFa Qfr5aicHMLX03sMeI zonPN1smIUzqwUUOs5arR FXBOblsr9kUM55AHvf75JYR1086fgrFfaSYMFx3S1r0ZHVArKt31LPoEY3al7xn2js GjlXDZzMoIcLNs88MIAF2KziWAmc2LibB6Hmq5XdjcvjNsU3rtR4HLOXz6t4aulsweh0fjXQ=w720 h1520 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>
</div>
</div>



<p>開啟之後，我們就來設定開發者選項</p>



<pre class="left green">設定 -&gt; 更多設定 -&gt; 開發者選項 -&gt; 開啟 USB 偵錯及 USB 安裝 </pre>



<div class="wp-block-columns has-2-columns is-layout-flex wp-container-core-columns-is-layout-3 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/8zG1bznplS7T2d6uHR7sqnWV28UBMY1c2700igm0mpFauN1wfQjFIvewF7WT19LQ8flGZak2845aZapigSwHSAbQW9uplIuMrMuHtxlSqZJ5cnKhfo1R-aLYMs06xjgzrjsbLA5BfqX6K4FTJnQXYrP2xIUOycfcCiTiqjOHbi4sxs_Msd5kYLOgGDnqsSau1aTI8v5flnl4SPoEXxbtdT6K0uoomC_YBHkN7Nm0JmfQWGiWkkPcJXOlZqmqWFmgpdbYitmRQPTyDxZBQHiVVWE0Y514UqY3knwA1ukjMfRzHnFo0ukojLya0P162Pr7n-agJM_oIaNV4bwvSoRdlciV0MAowNy5RqFmx5xSagfijPWP_B2pf2WNCvTTbjzuV93Sn9Bc1a5iOMziu4s0sQuzZCBPreBuinYQ3hvtAtZVFqUO2XaaKOBzODTvVxWJ8236VJPrJ8TcdM8YckwtpGQSrUil9ne1GHQrY4A0QuEbSRhVSpcllcwYPTrfmN2vL7lIP8NQ_5Q5MxmcYNP143LtaCsHEL-NlD6hdulwnik16H5H4brzLWTw5Pnh6qnFXnOE0dhnjihvmKAfmZVkrMGDUy-Y2_yAc_TtBFchUIH0P9hPpBOlZGugHhy79C7mE3mkjomJaLEjPbJIIqXZ9bYxxNhpZsbzKFND0_-Bt1U1_btVGV2Iw29Z6GiCECYFoLKPfuZMBxg1hkOjellvxM-umQ=w720-h1520-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/8zG1bznplS7T2d6uHR7sqnWV28UBMY1c2700igm0mpFauN1wfQjFIvewF7WT19LQ8flGZak2845aZapigSwHSAbQW9uplIuMrMuHtxlSqZJ5cnKhfo1R-aLYMs06xjgzrjsbLA5BfqX6K4FTJnQXYrP2xIUOycfcCiTiqjOHbi4sxs_Msd5kYLOgGDnqsSau1aTI8v5flnl4SPoEXxbtdT6K0uoomC_YBHkN7Nm0JmfQWGiWkkPcJXOlZqmqWFmgpdbYitmRQPTyDxZBQHiVVWE0Y514UqY3knwA1ukjMfRzHnFo0ukojLya0P162Pr7n-agJM_oIaNV4bwvSoRdlciV0MAowNy5RqFmx5xSagfijPWP_B2pf2WNCvTTbjzuV93Sn9Bc1a5iOMziu4s0sQuzZCBPreBuinYQ3hvtAtZVFqUO2XaaKOBzODTvVxWJ8236VJPrJ8TcdM8YckwtpGQSrUil9ne1GHQrY4A0QuEbSRhVSpcllcwYPTrfmN2vL7lIP8NQ_5Q5MxmcYNP143LtaCsHEL-NlD6hdulwnik16H5H4brzLWTw5Pnh6qnFXnOE0dhnjihvmKAfmZVkrMGDUy-Y2_yAc_TtBFchUIH0P9hPpBOlZGugHhy79C7mE3mkjomJaLEjPbJIIqXZ9bYxxNhpZsbzKFND0_-Bt1U1_btVGV2Iw29Z6GiCECYFoLKPfuZMBxg1hkOjellvxM-umQ=w720-h1520-no" alt="8zG1bznplS7T2d6uHR7sqnWV28UBMY1c2700igm0mpFauN1wfQjFIvewF7WT19LQ8flGZak2845aZapigSwHSAbQW9uplIuMrMuHtxlSqZJ5cnKhfo1R aLYMs06xjgzrjsbLA5BfqX6K4FTJnQXYrP2xIUOycfcCiTiqjOHbi4sxs Msd5kYLOgGDnqsSau1aTI8v5flnl4SPoEXxbtdT6K0uoomC YBHkN7Nm0JmfQWGiWkkPcJXOlZqmqWFmgpdbYitmRQPTyDxZBQHiVVWE0Y514UqY3knwA1ukjMfRzHnFo0ukojLya0P162Pr7n agJM oIaNV4bwvSoRdlciV0MAowNy5RqFmx5xSagfijPWP B2pf2WNCvTTbjzuV93Sn9Bc1a5iOMziu4s0sQuzZCBPreBuinYQ3hvtAtZVFqUO2XaaKOBzODTvVxWJ8236VJPrJ8TcdM8YckwtpGQSrUil9ne1GHQrY4A0QuEbSRhVSpcllcwYPTrfmN2vL7lIP8NQ 5Q5MxmcYNP143LtaCsHEL NlD6hdulwnik16H5H4brzLWTw5Pnh6qnFXnOE0dhnjihvmKAfmZVkrMGDUy Y2 yAc TtBFchUIH0P9hPpBOlZGugHhy79C7mE3mkjomJaLEjPbJIIqXZ9bYxxNhpZsbzKFND0 Bt1U1 btVGV2Iw29Z6GiCECYFoLKPfuZMBxg1hkOjellvxM umQ=w720 h1520 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-image"><figure class="aligncenter"><a href="https://lh3.googleusercontent.com/436nwDnU7dXmcX0ocpFKvnwelSkmkosRI0HLlnVN-mf7I0wCKtzbn1M74YhF3MGxYsoixnuUc5pqu-JAeAfrcjq2s_pZFTFpx-Oyt_GhNIZV4EWOIHeNgHz0N8DauRF2jzbzBAN_2Dd5CWT6rOHQ0IaLhM-FdhH2IqXFPJW5YPhMKb5uI0m6jd5NakxubGEdmj02hz3wkdo5RgeYZJljZYxk1dNBc71LJXNUCPy5IF9n7Gs9tfllWOjvGmSRcfpRPPnq8yqTYg1FLJ0AanwxRqFS_dnSLRqrnqmDpgoX-bYxmed9FtYJq8xh-LkpEZQeHZ8xnD1C02I--NCXniOaBS3DdOgPFSOBOVYp32xqXgh3j_0hCFDIlrTUwxAJj2V48au2oHRakNxMeMLW7j1MaB6Icp974XT8yHjfdPyw3UC97WM3Wd9wYnIZxZDrkylen1SxM0Vnmbz3oyy4LD6sdjPZoUXKsvWfVDIWQKAuoZzWke2NKsDRcaFRjRH-DXqhE-0TbokP7LmNP6UnOtkGzNbet46O43MLR5FEPT5nS5QYRIHyyExq6WjfFTFLuVRTqN-_1I6nI3aWdMKCrTFDTdGCEXok8v99iLE3CTFuHX45tOMPEXNvljSgib-8af4u4miFDQrKSDDMpgzWs8ZxQ2ZZDGwXsgRBJrlVlk4bWdDMqcvuxtpcAp1ElfLjsrL2JssfddvfSIU2faBFVOXTEXa3jQ=w720-h1520-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/436nwDnU7dXmcX0ocpFKvnwelSkmkosRI0HLlnVN-mf7I0wCKtzbn1M74YhF3MGxYsoixnuUc5pqu-JAeAfrcjq2s_pZFTFpx-Oyt_GhNIZV4EWOIHeNgHz0N8DauRF2jzbzBAN_2Dd5CWT6rOHQ0IaLhM-FdhH2IqXFPJW5YPhMKb5uI0m6jd5NakxubGEdmj02hz3wkdo5RgeYZJljZYxk1dNBc71LJXNUCPy5IF9n7Gs9tfllWOjvGmSRcfpRPPnq8yqTYg1FLJ0AanwxRqFS_dnSLRqrnqmDpgoX-bYxmed9FtYJq8xh-LkpEZQeHZ8xnD1C02I--NCXniOaBS3DdOgPFSOBOVYp32xqXgh3j_0hCFDIlrTUwxAJj2V48au2oHRakNxMeMLW7j1MaB6Icp974XT8yHjfdPyw3UC97WM3Wd9wYnIZxZDrkylen1SxM0Vnmbz3oyy4LD6sdjPZoUXKsvWfVDIWQKAuoZzWke2NKsDRcaFRjRH-DXqhE-0TbokP7LmNP6UnOtkGzNbet46O43MLR5FEPT5nS5QYRIHyyExq6WjfFTFLuVRTqN-_1I6nI3aWdMKCrTFDTdGCEXok8v99iLE3CTFuHX45tOMPEXNvljSgib-8af4u4miFDQrKSDDMpgzWs8ZxQ2ZZDGwXsgRBJrlVlk4bWdDMqcvuxtpcAp1ElfLjsrL2JssfddvfSIU2faBFVOXTEXa3jQ=w720-h1520-no" alt="436nwDnU7dXmcX0ocpFKvnwelSkmkosRI0HLlnVN mf7I0wCKtzbn1M74YhF3MGxYsoixnuUc5pqu JAeAfrcjq2s pZFTFpx Oyt GhNIZV4EWOIHeNgHz0N8DauRF2jzbzBAN 2Dd5CWT6rOHQ0IaLhM FdhH2IqXFPJW5YPhMKb5uI0m6jd5NakxubGEdmj02hz3wkdo5RgeYZJljZYxk1dNBc71LJXNUCPy5IF9n7Gs9tfllWOjvGmSRcfpRPPnq8yqTYg1FLJ0AanwxRqFS dnSLRqrnqmDpgoX bYxmed9FtYJq8xh LkpEZQeHZ8xnD1C02I NCXniOaBS3DdOgPFSOBOVYp32xqXgh3j 0hCFDIlrTUwxAJj2V48au2oHRakNxMeMLW7j1MaB6Icp974XT8yHjfdPyw3UC97WM3Wd9wYnIZxZDrkylen1SxM0Vnmbz3oyy4LD6sdjPZoUXKsvWfVDIWQKAuoZzWke2NKsDRcaFRjRH DXqhE 0TbokP7LmNP6UnOtkGzNbet46O43MLR5FEPT5nS5QYRIHyyExq6WjfFTFLuVRTqN 1I6nI3aWdMKCrTFDTdGCEXok8v99iLE3CTFuHX45tOMPEXNvljSgib 8af4u4miFDQrKSDDMpgzWs8ZxQ2ZZDGwXsgRBJrlVlk4bWdDMqcvuxtpcAp1ElfLjsrL2JssfddvfSIU2faBFVOXTEXa3jQ=w720 h1520 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>
</div>
</div>



<div class="wp-block-image"><figure class="aligncenter is-resized"><a href="https://lh3.googleusercontent.com/10UL7qLgfAaHhIQvd4skYgfw1cxZ4Pc57WxpPSNRDZxoqSfm1dytXECfZFYujOuTE3X2HY_6o_5BPGfW4iN2d_zT6WIYEzwgbBMqE2ZkhBAd1XvJR5T1p7PeESFCO70-sBVzjlHWwKY5Ki2-k8iQoR9B4Vdw8rSry0Z6vx0AgsAwIIH1uPLULgQRwwPIj5VBkJ4dYBuvRYZJmO06FDyXFHnTj5x14OIFL19rKcRdwWPD7EwiGWQLOQ2YoJhpBXu_4hnTlm3kbSOOx-H266dFL-JjnJX_vNp4gRP6qsQgQccIAXiwvNl0k7iIUeHECDgMBIG5DoOaIusD7zjbknsp9Liyasdl_MgznTe0EAdx3UFvviutY2DRMrhN1JrHbViqYMKnuUkJgLzORaWqCLwftu-nhLMLOHk-_k7QcyYSZNqNSgfvihcKhLQ38jbQFhvbgQgbdYr7L6EqYNE5cY4doeLLwFdXJHs310wy6M4W3BcAsvyEHCiOAlNI2PZd04TxCn2P5AIIAFC3bl5WM6SA7jj38BvdzTWXql6Colw81MiVlG2MPb2cOpeJWhCyb7RALDtFvtSCRIl26aVZa-6cuH8P5HgEXdXYnlq_No7cEBNWSg5bKMrTKibSBN6c40teEN5RCqtFuzd_uZDuX2RKGaUndunnBa7BgXq1JBNo2rp2sv5HLQihbRGIOkPZbE3WdPmv0djW6hy7HHmGcz1pkB_Ouw=w720-h1520-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/10UL7qLgfAaHhIQvd4skYgfw1cxZ4Pc57WxpPSNRDZxoqSfm1dytXECfZFYujOuTE3X2HY_6o_5BPGfW4iN2d_zT6WIYEzwgbBMqE2ZkhBAd1XvJR5T1p7PeESFCO70-sBVzjlHWwKY5Ki2-k8iQoR9B4Vdw8rSry0Z6vx0AgsAwIIH1uPLULgQRwwPIj5VBkJ4dYBuvRYZJmO06FDyXFHnTj5x14OIFL19rKcRdwWPD7EwiGWQLOQ2YoJhpBXu_4hnTlm3kbSOOx-H266dFL-JjnJX_vNp4gRP6qsQgQccIAXiwvNl0k7iIUeHECDgMBIG5DoOaIusD7zjbknsp9Liyasdl_MgznTe0EAdx3UFvviutY2DRMrhN1JrHbViqYMKnuUkJgLzORaWqCLwftu-nhLMLOHk-_k7QcyYSZNqNSgfvihcKhLQ38jbQFhvbgQgbdYr7L6EqYNE5cY4doeLLwFdXJHs310wy6M4W3BcAsvyEHCiOAlNI2PZd04TxCn2P5AIIAFC3bl5WM6SA7jj38BvdzTWXql6Colw81MiVlG2MPb2cOpeJWhCyb7RALDtFvtSCRIl26aVZa-6cuH8P5HgEXdXYnlq_No7cEBNWSg5bKMrTKibSBN6c40teEN5RCqtFuzd_uZDuX2RKGaUndunnBa7BgXq1JBNo2rp2sv5HLQihbRGIOkPZbE3WdPmv0djW6hy7HHmGcz1pkB_Ouw=w720-h1520-no" alt="10UL7qLgfAaHhIQvd4skYgfw1cxZ4Pc57WxpPSNRDZxoqSfm1dytXECfZFYujOuTE3X2HY 6o 5BPGfW4iN2d zT6WIYEzwgbBMqE2ZkhBAd1XvJR5T1p7PeESFCO70 sBVzjlHWwKY5Ki2 k8iQoR9B4Vdw8rSry0Z6vx0AgsAwIIH1uPLULgQRwwPIj5VBkJ4dYBuvRYZJmO06FDyXFHnTj5x14OIFL19rKcRdwWPD7EwiGWQLOQ2YoJhpBXu 4hnTlm3kbSOOx H266dFL JjnJX vNp4gRP6qsQgQccIAXiwvNl0k7iIUeHECDgMBIG5DoOaIusD7zjbknsp9Liyasdl MgznTe0EAdx3UFvviutY2DRMrhN1JrHbViqYMKnuUkJgLzORaWqCLwftu nhLMLOHk k7QcyYSZNqNSgfvihcKhLQ38jbQFhvbgQgbdYr7L6EqYNE5cY4doeLLwFdXJHs310wy6M4W3BcAsvyEHCiOAlNI2PZd04TxCn2P5AIIAFC3bl5WM6SA7jj38BvdzTWXql6Colw81MiVlG2MPb2cOpeJWhCyb7RALDtFvtSCRIl26aVZa 6cuH8P5HgEXdXYnlq No7cEBNWSg5bKMrTKibSBN6c40teEN5RCqtFuzd uZDuX2RKGaUndunnBa7BgXq1JBNo2rp2sv5HLQihbRGIOkPZbE3WdPmv0djW6hy7HHmGcz1pkB Ouw=w720 h1520 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" width="360" height="760" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>



<p>開啟 USB 安裝必須要先登入小米帳號，這邊小蛙因為不想登入小米帳號，一直得到這個錯誤</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">Error: INSTALL_FAILED_USER_RESTRICTED: Install canceled by user</pre>



<p>這兩個選項打開，再回到 Android Studio Run Project 就可以了喔！</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><a href="https://lh3.googleusercontent.com/JuV_hEKp9U926LeEfvqaCh6eRrxNPKFBCFJziRYKGp2yrXqPi6eIdU1lXt6asSg_liI36jukgIWGZONq5kwPif9rBEDcD-WE8EE-TFGQ0a63fnIfHD8liB3jwR-i7vdMCCjYRRgIvl5WSSjexIY7cKTvUW01n78wTLqH72xO00qBN6PRtOshsU3_Slff8Xe0jEuaXdaBG7lnQxUw3B1gl3iEmn-J7Bz1txUFvIA7VtIXb3s34a1CH_yKJ-5yuu_9F-4R4vf4voyDSJzrVOyPd3ngGNqDU1fVlknFFtan78pmOdbGe0gBT9Azh9LICxBOD4REKbUrDf2Mr-jVPATHhLRQN__q_0IQjcy2gKOiaufLBCBjdkeQS73jS60tTywMyPoQ5-rd4FuSDsGFyn45NnuCASwz9pCuFz3HY_SwZHDwgoxIQVCLes7zoyuz9dTADdQbEsp7apC1Cil_p1yi9wJrJ3yiexEOP1RqnBfIBcgi4XI0QWwYtZIkxLdPzV1Ta6Vi7nsTNC9TcBnFMYlaYrGnGi0QTePGy-ZiaiOau9wem_xr_BxDqeZXsb4flBpncFq_VGQ8DYrBfB7JRh6XETITmIE77xAxGv9Cqa-d2HfRe8JGEnD8r9ycYvB16fUrJGSk4iqwl9ElEbMMMICasPY2dAhGxQdZnw66QfPwru8-zLmbgkI6rOne4u0OgpeFecZE8OLf8JiPST0mE0M-FUS_ig=w720-h1520-no" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external"><img decoding="async" src="https://lh3.googleusercontent.com/JuV_hEKp9U926LeEfvqaCh6eRrxNPKFBCFJziRYKGp2yrXqPi6eIdU1lXt6asSg_liI36jukgIWGZONq5kwPif9rBEDcD-WE8EE-TFGQ0a63fnIfHD8liB3jwR-i7vdMCCjYRRgIvl5WSSjexIY7cKTvUW01n78wTLqH72xO00qBN6PRtOshsU3_Slff8Xe0jEuaXdaBG7lnQxUw3B1gl3iEmn-J7Bz1txUFvIA7VtIXb3s34a1CH_yKJ-5yuu_9F-4R4vf4voyDSJzrVOyPd3ngGNqDU1fVlknFFtan78pmOdbGe0gBT9Azh9LICxBOD4REKbUrDf2Mr-jVPATHhLRQN__q_0IQjcy2gKOiaufLBCBjdkeQS73jS60tTywMyPoQ5-rd4FuSDsGFyn45NnuCASwz9pCuFz3HY_SwZHDwgoxIQVCLes7zoyuz9dTADdQbEsp7apC1Cil_p1yi9wJrJ3yiexEOP1RqnBfIBcgi4XI0QWwYtZIkxLdPzV1Ta6Vi7nsTNC9TcBnFMYlaYrGnGi0QTePGy-ZiaiOau9wem_xr_BxDqeZXsb4flBpncFq_VGQ8DYrBfB7JRh6XETITmIE77xAxGv9Cqa-d2HfRe8JGEnD8r9ycYvB16fUrJGSk4iqwl9ElEbMMMICasPY2dAhGxQdZnw66QfPwru8-zLmbgkI6rOne4u0OgpeFecZE8OLf8JiPST0mE0M-FUS_ig=w720-h1520-no" alt="JuV hEKp9U926LeEfvqaCh6eRrxNPKFBCFJziRYKGp2yrXqPi6eIdU1lXt6asSg liI36jukgIWGZONq5kwPif9rBEDcD WE8EE TFGQ0a63fnIfHD8liB3jwR i7vdMCCjYRRgIvl5WSSjexIY7cKTvUW01n78wTLqH72xO00qBN6PRtOshsU3 Slff8Xe0jEuaXdaBG7lnQxUw3B1gl3iEmn J7Bz1txUFvIA7VtIXb3s34a1CH yKJ 5yuu 9F 4R4vf4voyDSJzrVOyPd3ngGNqDU1fVlknFFtan78pmOdbGe0gBT9Azh9LICxBOD4REKbUrDf2Mr jVPATHhLRQN q 0IQjcy2gKOiaufLBCBjdkeQS73jS60tTywMyPoQ5 rd4FuSDsGFyn45NnuCASwz9pCuFz3HY SwZHDwgoxIQVCLes7zoyuz9dTADdQbEsp7apC1Cil p1yi9wJrJ3yiexEOP1RqnBfIBcgi4XI0QWwYtZIkxLdPzV1Ta6Vi7nsTNC9TcBnFMYlaYrGnGi0QTePGy ZiaiOau9wem xr BxDqeZXsb4flBpncFq VGQ8DYrBfB7JRh6XETITmIE77xAxGv9Cqa d2HfRe8JGEnD8r9ycYvB16fUrJGSk4iqwl9ElEbMMMICasPY2dAhGxQdZnw66QfPwru8 zLmbgkI6rOne4u0OgpeFecZE8OLf8JiPST0mE0M FUS ig=w720 h1520 no 紅米 7 (Redmi 7) 連接到 Android Studio (Mac)" width="360" height="760" title="紅米 7 (Redmi 7) 連接到 Android Studio (Mac)"></a></figure></div>



<p>以上，留給有需要的人！或是不久之後遺忘過程的自己！</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/5024/%e7%b4%85%e7%b1%b3-7-redmi-7-%e9%80%a3%e6%8e%a5%e5%88%b0-android-studio-mac/" data-wpel-link="internal">紅米 7 (Redmi 7) 連接到 Android Studio (Mac)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/5024/%e7%b4%85%e7%b1%b3-7-redmi-7-%e9%80%a3%e6%8e%a5%e5%88%b0-android-studio-mac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</title>
		<link>https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/</link>
					<comments>https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 06 Jul 2016 03:24:19 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[jPCT-AE]]></category>
		<category><![CDATA[multitarget]]></category>
		<category><![CDATA[多重模型]]></category>
		<category><![CDATA[Android]]></category>
		<guid isPermaLink="false">https://wazai.net/?p=3739</guid>

					<description><![CDATA[<p>要進到這系列最後一篇文章了，這篇文章拖了很久，一直沒有時間整理，結果到最後 &#8230; 程式碼留下來了，記憶卻有些模糊了，這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。 設計自己的物件 因為這邊&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>要進到這系列最後一篇文章了，這篇文章拖了很久，一直沒有時間整理，結果到最後 &#8230; 程式碼留下來了，記憶卻有些模糊了，這邊小蛙配著程式碼盡可能的把還記得的東西寫下來。 </p>



<span id="more-3739"></span>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/blank-e-box-for-software-etc-4-1238246-1280x960.jpg" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/blank-e-box-for-software-etc-4-1238246-1280x960-500x375.jpg" alt="圖片來源：http://tw.freeimages.com/photo/blank-e-box-for-software-etc-4-1238246" class="wp-image-3753" title="Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例"></a><figcaption> 圖片來源：http://tw.freeimages.com/photo/blank-e-box-for-software-etc-4-1238246</figcaption></figure></div>


<h2 class="para">設計自己的物件</h2>
<p>因為這邊要載入多個模型，而每個模型搭配的參數都不同，例如：刀鋒戰士要放大 10 倍並且往 y 軸位移 50、茶壺要 blablabla &#8230;，這邊可以根據自己的需求去做設計，小蛙隨意列了幾個可能會隨著不同模型調整的屬性</p>
<div>
<div id="highlighter_408527" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">class</code> <code class="java plain">MyObjs {</code></div>
<div class="line number2 index1 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java plain">String symbol;</code></div>
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java plain">String obj;</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java plain">String mtl;</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java plain">List&lt;String&gt; textures;</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">scale = </code><code class="java value">1</code><code class="java plain">;</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">postScale = </code><code class="java value">1</code><code class="java plain">;</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 0 度躺著正面朝上</code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">rotateX = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">rotateY = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">rotateZ = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">traslateX = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">traslateY = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java keyword">float</code> <code class="java plain">traslateZ = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">private</code> <code class="java plain">Object3D target;</code></div>
<div class="line number16 index15 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>有看不懂的可以往前翻，屬性也不一一介紹了。</p>
<h2 class="para">初始化物件</h2>
<p>初始化這些物件，將每個要載入的物件及他的參數一一創建出來，</p>
<div>
<div id="highlighter_543699" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java comments">// 要觸發的圖片(ImageTarget)</code></div>
<div class="line number2 index1 alt1"><code class="java keyword">private</code> <code class="java keyword">static</code> <code class="java plain">List&lt;String&gt; SYMBOL = </code><code class="java keyword">new</code> <code class="java plain">ArrayList&lt;&gt;();</code></div>
<div class="line number3 index2 alt2"><code class="java comments">// 要呈現出來的 3D 模型</code></div>
<div class="line number4 index3 alt1"><code class="java keyword">private</code> <code class="java plain">List&lt;MyObjs&gt; objs = </code><code class="java keyword">new</code> <code class="java plain">ArrayList();</code></div>
<div class="line number5 index4 alt2"><code class="java keyword">private</code> <code class="java keyword">void</code> <code class="java plain">initObjs(){</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">SYMBOL = Arrays.asList(</code><code class="java string">"stones"</code><code class="java plain">, </code><code class="java string">"chips"</code><code class="java plain">, </code><code class="java string">"tarmac"</code><code class="java plain">);</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 木頭櫃子</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MyObjs m = </code><code class="java keyword">new</code> <code class="java plain">MyObjs();</code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.symbol = SYMBOL.get(</code><code class="java value">0</code><code class="java plain">);</code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.mtl = </code><code class="java string">"Bedside_Table_D.mtl"</code><code class="java plain">;</code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.obj = </code><code class="java string">"Bedside Table D.obj"</code><code class="java plain">;</code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.textures = Arrays.asList(</code><code class="java string">"Bedside_Table_D_default_1_1.png"</code><code class="java plain">);</code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.scale = </code><code class="java value">5</code><code class="java plain">;</code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.rotateX = -</code><code class="java value">1</code><code class="java plain">.5f;</code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.traslateX = -</code><code class="java value">110</code><code class="java plain">;</code></div>
<div class="line number16 index15 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.traslateY = -</code><code class="java value">160</code><code class="java plain">;</code></div>
<div class="line number17 index16 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">objs.add(m);</code></div>
<div class="line number18 index17 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 灰色櫃子</code></div>
<div class="line number19 index18 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MyObjs w = </code><code class="java keyword">new</code> <code class="java plain">MyObjs();</code></div>
<div class="line number20 index19 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.symbol = SYMBOL.get(</code><code class="java value">2</code><code class="java plain">);</code></div>
<div class="line number21 index20 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.mtl = </code><code class="java string">"Bedside_Table_B.mtl"</code><code class="java plain">;</code></div>
<div class="line number22 index21 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.obj = </code><code class="java string">"Bedside Table B.obj"</code><code class="java plain">;</code></div>
<div class="line number23 index22 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.textures = Arrays.asList(</code><code class="java string">"Bedside_Table_B_default_1_1.png"</code><code class="java plain">);</code></div>
<div class="line number24 index23 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.scale = </code><code class="java value">5</code><code class="java plain">;</code></div>
<div class="line number25 index24 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.rotateX = -</code><code class="java value">1</code><code class="java plain">.5f;</code></div>
<div class="line number26 index25 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.traslateX = -</code><code class="java value">110</code><code class="java plain">;</code></div>
<div class="line number27 index26 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">w.traslateY = -</code><code class="java value">160</code><code class="java plain">;</code></div>
<div class="line number28 index27 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">objs.add(w);</code></div>
<div class="line number29 index28 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 木桶</code></div>
<div class="line number30 index29 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MyObjs n = </code><code class="java keyword">new</code> <code class="java plain">MyObjs();</code></div>
<div class="line number31 index30 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.symbol = SYMBOL.get(</code><code class="java value">1</code><code class="java plain">);</code></div>
<div class="line number32 index31 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.mtl = </code><code class="java string">"MedievalBarrel_OBJ.mtl"</code><code class="java plain">;</code></div>
<div class="line number33 index32 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.obj = </code><code class="java string">"MedievalBarrel_OBJ.obj"</code><code class="java plain">;</code></div>
<div class="line number34 index33 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.textures = Arrays.asList(</code><code class="java string">"MedBarrelDiffuse.jpg"</code><code class="java plain">, </code><code class="java string">"MedBarrelNormal.jpg"</code><code class="java plain">);</code></div>
<div class="line number35 index34 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.scale = </code><code class="java value">20</code><code class="java plain">;</code></div>
<div class="line number36 index35 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.rotateX = -</code><code class="java value">1</code><code class="java plain">.5f;</code></div>
<div class="line number37 index36 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.traslateX = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number38 index37 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">n.traslateY = </code><code class="java value">0</code><code class="java plain">;</code></div>
<div class="line number39 index38 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">objs.add(n);</code></div>
<div class="line number40 index39 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>在載入 obj 的範例中我們知道需要同時載入 mtl 搭配 textures，不然載進來的模型沒有材質貼圖。上面的例子中將屬性一一設定好，並且加入 objs 中，我們透過 m.symbol 來得知當出現哪張影像的時候，載入這個模型 (m.mtl, m.obj, m.textures)， 並可設定縮放(scale)、翻轉(rotate)以及位移(traslate)，這邊可以自己把自己要設定的屬性加上去。</p>
<h2 class="para">載入物件</h2>
<p>當把所有的物件都設定好之後，在 ImageTargetRenderer 建構子中載入這些物件們</p>
<div>
<div id="highlighter_550427" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java plain">... 以上省略 ...</code></div>
<div class="line number2 index1 alt1"><code class="java plain">initObjs();</code></div>
<div class="line number3 index2 alt2"><code class="java keyword">try</code><code class="java plain">{</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">for</code><code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">i = </code><code class="java value">0</code><code class="java plain">; i &lt; objs.size(); i++){</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MyObjs m = objs.get(i);</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">for</code><code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">j = </code><code class="java value">0</code><code class="java plain">; j &lt; m.textures.size(); j++){</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">TextureManager.getInstance().addTexture(</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.textures.get(j),</code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">new</code> <code class="java plain">Texture(mActivity.getAssets().open(TXT_PATH + m.textures.get(j)))</code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">);</code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">Object3D[] tmp = Loader.loadOBJ(</code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mActivity.getAssets().open(OBJ_PATH + m.obj),</code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java string">""</code><code class="java plain">.equals(m.mtl) ? </code><code class="java keyword">null</code> <code class="java plain">: mActivity.getAssets().open(MTL_PATH + m.mtl),</code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.scale</code></div>
<div class="line number16 index15 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">);</code></div>
<div class="line number17 index16 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(tmp != </code><code class="java keyword">null</code> <code class="java plain">&amp;&amp; tmp.length &gt;= </code><code class="java value">1</code><code class="java plain">){</code></div>
<div class="line number18 index17 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target = tmp[</code><code class="java value">0</code><code class="java plain">];</code></div>
<div class="line number19 index18 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number20 index19 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.strip();</code></div>
<div class="line number21 index20 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.build();</code></div>
<div class="line number22 index21 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(m.rotateX != </code><code class="java value">0</code><code class="java plain">)</code></div>
<div class="line number23 index22 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.rotateX(m.rotateX);</code></div>
<div class="line number24 index23 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(m.rotateY != </code><code class="java value">0</code><code class="java plain">)</code></div>
<div class="line number25 index24 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.rotateY(m.rotateY);</code></div>
<div class="line number26 index25 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(m.rotateZ != </code><code class="java value">0</code><code class="java plain">)</code></div>
<div class="line number27 index26 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.rotateY(m.rotateZ);</code></div>
<div class="line number28 index27 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(m.traslateX != </code><code class="java value">0</code> <code class="java plain">|| m.traslateY != </code><code class="java value">0</code> <code class="java plain">|| m.traslateZ != </code><code class="java value">0</code><code class="java plain">)</code></div>
<div class="line number29 index28 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.translate(m.traslateX, m.traslateY, m.traslateZ);</code></div>
<div class="line number30 index29 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(m.postScale != </code><code class="java value">1</code><code class="java plain">)</code></div>
<div class="line number31 index30 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.scale(m.postScale);</code></div>
<div class="line number32 index31 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(</code><code class="java string">""</code><code class="java plain">.equals(m.mtl)) {</code></div>
<div class="line number33 index32 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">for</code><code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">z = </code><code class="java value">0</code><code class="java plain">; z &lt; m.textures.size(); z++)</code></div>
<div class="line number34 index33 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">m.target.setTexture(m.textures.get(z));</code></div>
<div class="line number35 index34 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number36 index35 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.addObject(m.target);</code></div>
<div class="line number37 index36 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cam = world.getCamera();</code></div>
<div class="line number38 index37 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">SimpleVector sv = </code><code class="java keyword">new</code> <code class="java plain">SimpleVector();</code></div>
<div class="line number39 index38 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.set(m.target.getTransformedCenter());</code></div>
<div class="line number40 index39 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.y -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number41 index40 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.z -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number42 index41 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun.setPosition(sv);</code></div>
<div class="line number43 index42 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number44 index43 alt1"><code class="java plain">}</code><code class="java keyword">catch</code><code class="java plain">(Exception e){</code></div>
<div class="line number45 index44 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number46 index45 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>將 objs 中的 MyObj 一一取出，並設定該物件之屬性，到這個階段，就可以依照不同影像載入不同模型，但，這還不夠。</p>
<h2 class="para">移除模型</h2>
<p>剩最後一個步驟，到上一個步驟會發現每個 render 出來的模型，他不會消失 &#8230; 不會消失 &#8230; 不會消失 &#8230; 加上這個步驟讓他消失吧！</p>
<div>
<div id="highlighter_563479" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java comments">// The render function.</code></div>
<div class="line number2 index1 alt1"><code class="java keyword">private</code> <code class="java keyword">void</code> <code class="java plain">renderFrame() {</code></div>
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// clear color and depth buffer</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// get the state, and mark the beginning of a rendering section</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">State state = mRenderer.begin();</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// explicitly render the video background</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mRenderer.drawVideoBackground();</code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">float</code><code class="java plain">[] modelviewArray = </code><code class="java keyword">new</code> <code class="java keyword">float</code><code class="java plain">[</code><code class="java value">16</code><code class="java plain">];</code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// did we find any trackables this frame?</code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">for</code> <code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">tIdx = </code><code class="java value">0</code><code class="java plain">; tIdx &lt; state.getNumTrackableResults(); tIdx++) {</code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// get the trackable</code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">TrackableResult result = state.getTrackableResult(tIdx);</code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">Trackable trackable = result.getTrackable();</code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">printUserData(trackable);</code></div>
<div class="line number16 index15 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">Matrix44F modelViewMatrix = Tool.convertPose2GLMatrix(result.getPose());</code></div>
<div class="line number17 index16 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">Matrix44F inverseMV = SampleMath.Matrix44FInverse(modelViewMatrix);</code></div>
<div class="line number18 index17 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">Matrix44F invTranspMV = SampleMath.Matrix44FTranspose(inverseMV);</code></div>
<div class="line number19 index18 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">try</code><code class="java plain">{world.removeAllObjects();}</code><code class="java keyword">catch</code> <code class="java plain">(Exception e){}</code></div>
<div class="line number20 index19 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">for</code><code class="java plain">(</code><code class="java keyword">int</code> <code class="java plain">i = </code><code class="java value">0</code><code class="java plain">; i &lt; objs.size(); i++){</code></div>
<div class="line number21 index20 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MyObjs m = objs.get(i);</code></div>
<div class="line number22 index21 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(m.symbol.equals(trackable.getName())){</code></div>
<div class="line number23 index22 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.addObject(m.target);</code></div>
<div class="line number24 index23 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">SimpleVector sv = </code><code class="java keyword">new</code> <code class="java plain">SimpleVector();</code></div>
<div class="line number25 index24 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.set(m.target.getTransformedCenter());</code></div>
<div class="line number26 index25 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.y -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number27 index26 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.z -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number28 index27 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun.setPosition(sv);</code></div>
<div class="line number29 index28 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number30 index29 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number31 index30 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">modelviewArray = invTranspMV.getData();</code></div>
<div class="line number32 index31 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">updateModelviewMatrix(modelviewArray);</code></div>
<div class="line number33 index32 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number34 index33 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// hide the objects when the targets are not detected</code></div>
<div class="line number35 index34 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code> <code class="java plain">(state.getNumTrackableResults() == </code><code class="java value">0</code><code class="java plain">) {</code></div>
<div class="line number36 index35 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">float</code> <code class="java plain">m [] = {</code></div>
<div class="line number37 index36 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java value">1</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code></div>
<div class="line number38 index37 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">1</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code></div>
<div class="line number39 index38 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">1</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,</code></div>
<div class="line number40 index39 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java value">0</code><code class="java plain">,</code><code class="java value">0</code><code class="java plain">,-</code><code class="java value">10000</code><code class="java plain">,</code><code class="java value">1</code></div>
<div class="line number41 index40 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">};</code></div>
<div class="line number42 index41 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">modelviewArray = m;</code></div>
<div class="line number43 index42 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">updateModelviewMatrix(modelviewArray);</code></div>
<div class="line number44 index43 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number45 index44 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mRenderer.end();</code></div>
<div class="line number46 index45 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>這個 function 小蛙已經忘記哪些是小蛙自己加的，哪些是原本的 code 了，就整個附上來試試看吧！<br>小蛙之前也遇過有網友詢問動畫的部份，經過這一段時間的研究發現 &#8230; 如果真的要用到會動的 3D model，就直接使用 Unity 吧！畢竟在 native code 中要讓做到動畫真的太麻煩了 &gt;&lt; 之前 survey 了好久，因為變數太大、複雜度也太高，直接放棄轉向 render 動畫原本就是強項的 Unity。祝各位好運囉！</p>


<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</title>
		<link>https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/</link>
					<comments>https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 06 Jul 2016 02:24:33 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[jPCT-AE]]></category>
		<category><![CDATA[texture]]></category>
		<category><![CDATA[loader]]></category>
		<category><![CDATA[3ds]]></category>
		<guid isPermaLink="false">https://wazai.net/?p=3737</guid>

					<description><![CDATA[<p>延續 jPCT-AE Loader 載入模型的部份，這篇要記錄載入 3ds 檔案格式的方法，基本上跟前面幾個 obj, md2 的方法差不多，只有一些小小的變化而已。 下載需要的檔案 到 這裡 下載需&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>延續 jPCT-AE Loader 載入模型的部份，這篇要記錄載入 3ds 檔案格式的方法，基本上跟前面幾個 obj, md2 的方法差不多，只有一些小小的變化而已。</p>



<span id="more-3737"></span>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/3d-glasses-1424688.jpg" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/3d-glasses-1424688-500x275.jpg" alt="圖片來源：http://tw.freeimages.com/photo/3d-glasses-1424688" class="wp-image-3754" title="Android Vuforia with jPCT-AE (4) – 載入 3DS 測試"></a><figcaption> 圖片來源：http://tw.freeimages.com/photo/3d-glasses-1424688</figcaption></figure></div>


<h2 class="para">下載需要的檔案</h2>
<p>到 <a href="http://tf3dm.com/search/?q=barrel&amp;format=All+Formats&amp;search=Search" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這裡<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 下載需要的檔案，要注意的是找有 3ds 格式的以及下載下來之後，texture 的圖片大小一定要是 2 的次方，否則載入 texture 的時候會出現錯誤。選桶子的原因是 texture 較為簡單，先試成功一個之後，再去載入複雜一點的模型。</p>
<h2 class="para">載入 3DS 模型</h2>
<p>附上載入程式碼，基本上沒有什麼不同，差別只有在於需不需要設定 texture，例如：載入 obj 跟 mtl 的時候，由於 mtl 已經有 texture 資訊，因此不需要呼叫 setTexture 方法，而 3DS 需要加入此方法，否則會看到赤裸裸的模型。另外有些模型太小，不放大會看不到 (就小小的)，但是放大之後偏差跟位移也會明顯放大，各位可以試試看 &#8230;</p>
<div>
<div id="highlighter_959124" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">public</code> <code class="java plain">ImageTargetRenderer(ImageTargets activity, SampleApplicationSession session) {</code></div>
<div class="line number2 index1 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mActivity = activity;</code></div>
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">vuforiaAppSession = session;</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world = </code><code class="java keyword">new</code> <code class="java plain">World();</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.setAmbientLight(</code><code class="java value">150</code><code class="java plain">, </code><code class="java value">150</code><code class="java plain">, </code><code class="java value">150</code><code class="java plain">);</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// set the following value according to your need, so the object won't be disappeared.</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.setClippingPlanes(</code><code class="java value">2</code><code class="java plain">.0f, </code><code class="java value">3000</code><code class="java plain">.0f);</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun = </code><code class="java keyword">new</code> <code class="java plain">Light(world);</code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun.setIntensity(</code><code class="java value">250</code><code class="java plain">, </code><code class="java value">250</code><code class="java plain">, </code><code class="java value">250</code><code class="java plain">);</code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">try</code><code class="java plain">{</code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 載入 texture 並且取名為 ton2.jpg，之後可以直接用 setTexture(name) 來設定 texture</code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">TextureManager.getInstance().addTexture(</code><code class="java string">"ton2.jpg"</code><code class="java plain">,</code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">new</code> <code class="java plain">Texture(mActivity.getAssets().open(</code><code class="java string">"ton2.jpg"</code><code class="java plain">))</code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">);</code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">try</code><code class="java plain">{</code></div>
<div class="line number16 index15 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 載入 3ds 模型，放大 100 倍</code></div>
<div class="line number17 index16 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">Object3D[] tmp = Loader.load3DS(mActivity.getAssets().open(</code><code class="java string">"ton3_low.3ds"</code><code class="java plain">), </code><code class="java value">100</code><code class="java plain">);</code></div>
<div class="line number18 index17 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">if</code><code class="java plain">(tmp != </code><code class="java keyword">null</code> <code class="java plain">&amp;&amp; tmp.length &gt;= </code><code class="java value">1</code><code class="java plain">){</code></div>
<div class="line number19 index18 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder = tmp[</code><code class="java value">0</code><code class="java plain">];</code></div>
<div class="line number20 index19 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number21 index20 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code><code class="java keyword">catch</code> <code class="java plain">(Exception e) {</code></div>
<div class="line number22 index21 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number23 index22 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number24 index23 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.strip();</code></div>
<div class="line number25 index24 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.build();</code></div>
<div class="line number26 index25 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 讓桶子躺下</code></div>
<div class="line number27 index26 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.rotateX(</code><code class="java value">1</code><code class="java plain">.5f);</code></div>
<div class="line number28 index27 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 設定 texture，讓桶子有衣服穿 XD</code></div>
<div class="line number29 index28 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.setTexture(</code><code class="java string">"ton2.jpg"</code><code class="java plain">);</code></div>
<div class="line number30 index29 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.translate(</code><code class="java value">0</code><code class="java plain">, </code><code class="java value">0</code><code class="java plain">, </code><code class="java value">0</code><code class="java plain">);</code></div>
<div class="line number31 index30 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.addObject(cylinder);</code></div>
<div class="line number32 index31 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cam = world.getCamera();</code></div>
<div class="line number33 index32 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">SimpleVector sv = </code><code class="java keyword">new</code> <code class="java plain">SimpleVector();</code></div>
<div class="line number34 index33 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.set(cylinder.getTransformedCenter());</code></div>
<div class="line number35 index34 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.y -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number36 index35 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.z -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number37 index36 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun.setPosition(sv);</code></div>
<div class="line number38 index37 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code><code class="java keyword">catch</code><code class="java plain">(Exception e){</code></div>
<div class="line number39 index38 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number40 index39 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number41 index40 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MemoryHelper.compact();</code></div>
<div class="line number42 index41 alt1"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h2 class="para">結果</h2>
<div id="attachment_3759" style="width: 310px" class="wp-caption aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/3ds.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" aria-describedby="caption-attachment-3759" class=" wp-image-3759 " src="https://sshfs.crazyall.net/wazai/2016/07/3ds-500x569.png" alt="載入 3ds 測試" width="300" height="341" title="Android Vuforia with jPCT-AE (4) – 載入 3DS 測試"></a><p id="caption-attachment-3759" class="wp-caption-text">載入 3ds 測試</p></div>
<p>Loader 部份文章就到這邊，下一篇將記錄如何遇到不同 image target 的時候可以動態載入不同的模型。</p>


<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a rel="noreferrer noopener nofollow external" aria-label="TF3DM (在新分頁中開啟)" href="http://tf3dm.com/" target="_blank" data-wpel-link="external" class="wpel-icon-right">TF3DM<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Android Vuforia with jPCT-AE (3) – 載入 md2 測試</title>
		<link>https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/</link>
					<comments>https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 06 Jul 2016 01:24:43 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[md2]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[jPCT-AE]]></category>
		<category><![CDATA[loader]]></category>
		<guid isPermaLink="false">https://wazai.net/?p=3735</guid>

					<description><![CDATA[<p>前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案，這邊繼續介紹 jPCT-AE 載入 md2 的方法，載入動作大致上類似，唯一不同的只有 texture 設定部份。 囉哩巴唆 &#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>前兩篇介紹如何直接透過 jPCT-AE 直接繪圖以及載入 .obj 檔案，這邊繼續介紹 jPCT-AE 載入 md2 的方法，載入動作大致上類似，唯一不同的只有 texture 設定部份。 </p>



<span id="more-3735"></span>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/3d-maze-2-1208096.jpg" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/3d-maze-2-1208096-500x375.jpg" alt="圖片來源：http://tw.freeimages.com/photo/3d-maze-2-1208096" class="wp-image-3752" title="Android Vuforia with jPCT-AE (3) – 載入 md2 測試"></a><figcaption> 圖片來源：http://tw.freeimages.com/photo/3d-maze-2-1208096</figcaption></figure></div>


<h2 class="para">囉哩巴唆</h2>
<p>這次沒有什麼好囉哩巴唆了，小蛙對於這些 3D model 的檔案類型是一知半解，只是看到 jPCT-AE 有這幾種 loader，一個一個測試過後把程式碼留下來。</p>
<h2 class="para">下載需要的檔案</h2>
<p>找了半天，要找到 md2 檔案真是有點困難，後來終於在 <a title="Enseignement C++ avancé en Master Informatique" href="https://www.lri.fr/~pa/progcxx.html" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這裡<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 找到可以下載的 md2 模型。</p>
<h2 class="para">載入 md2 模型</h2>
<p>附上以下程式碼</p>
<div>
<div id="highlighter_380268" class="syntaxhighlighter  java">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">01</div>
<div class="line number2 index1 alt1">02</div>
<div class="line number3 index2 alt2">03</div>
<div class="line number4 index3 alt1">04</div>
<div class="line number5 index4 alt2">05</div>
<div class="line number6 index5 alt1">06</div>
<div class="line number7 index6 alt2">07</div>
<div class="line number8 index7 alt1">08</div>
<div class="line number9 index8 alt2">09</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="java keyword">public</code> <code class="java plain">ImageTargetRenderer(ImageTargets activity, SampleApplicationSession session) {</code></div>
<div class="line number2 index1 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">mActivity = activity;</code></div>
<div class="line number3 index2 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">vuforiaAppSession = session;</code></div>
<div class="line number4 index3 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world = </code><code class="java keyword">new</code> <code class="java plain">World();</code></div>
<div class="line number5 index4 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.setAmbientLight(</code><code class="java value">150</code><code class="java plain">, </code><code class="java value">150</code><code class="java plain">, </code><code class="java value">150</code><code class="java plain">);</code></div>
<div class="line number6 index5 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// set the following value according to your need, so the object won't be disappeared.</code></div>
<div class="line number7 index6 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.setClippingPlanes(</code><code class="java value">2</code><code class="java plain">.0f, </code><code class="java value">3000</code><code class="java plain">.0f);</code></div>
<div class="line number8 index7 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun = </code><code class="java keyword">new</code> <code class="java plain">Light(world);</code></div>
<div class="line number9 index8 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun.setIntensity(</code><code class="java value">250</code><code class="java plain">, </code><code class="java value">250</code><code class="java plain">, </code><code class="java value">250</code><code class="java plain">);</code></div>
<div class="line number10 index9 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">try</code><code class="java plain">{</code></div>
<div class="line number11 index10 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// loadMD2(檔案, 縮放);</code></div>
<div class="line number12 index11 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder = Loader.loadMD2(mActivity.getAssets().open(</code><code class="java string">"Blade.md2"</code><code class="java plain">), </code><code class="java value">10</code><code class="java plain">);</code></div>
<div class="line number13 index12 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 載入材質，材質名稱直接設定為檔案名稱，也可以修改</code></div>
<div class="line number14 index13 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">TextureManager.getInstance().addTexture(</code><code class="java string">"Blade.jpg"</code><code class="java plain">,</code></div>
<div class="line number15 index14 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java keyword">new</code> <code class="java plain">Texture(mActivity.getAssets().open(</code><code class="java string">"Blade.jpg"</code><code class="java plain">)));</code></div>
<div class="line number16 index15 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 設定使用名為 Blade.jpg 的材質 (就是上面設定的名字)</code></div>
<div class="line number17 index16 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.setTexture(</code><code class="java string">"Blade.jpg"</code><code class="java plain">);</code></div>
<div class="line number18 index17 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.strip();</code></div>
<div class="line number19 index18 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.build();</code></div>
<div class="line number20 index19 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// X 軸方向翻轉</code></div>
<div class="line number21 index20 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.rotateX(</code><code class="java value">1</code><code class="java plain">.5f);</code></div>
<div class="line number22 index21 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java comments">// 位移 x, y, z</code></div>
<div class="line number23 index22 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cylinder.translate(-</code><code class="java value">100</code><code class="java plain">, </code><code class="java value">0</code><code class="java plain">, -</code><code class="java value">200</code><code class="java plain">);</code></div>
<div class="line number24 index23 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">world.addObject(cylinder);</code></div>
<div class="line number25 index24 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">cam = world.getCamera();</code></div>
<div class="line number26 index25 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">SimpleVector sv = </code><code class="java keyword">new</code> <code class="java plain">SimpleVector();</code></div>
<div class="line number27 index26 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.set(cylinder.getTransformedCenter());</code></div>
<div class="line number28 index27 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.y -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number29 index28 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sv.z -= </code><code class="java value">100</code><code class="java plain">;</code></div>
<div class="line number30 index29 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">sun.setPosition(sv);</code></div>
<div class="line number31 index30 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code><code class="java keyword">catch</code><code class="java plain">(Exception e){</code></div>
<div class="line number32 index31 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">e.printStackTrace();</code></div>
<div class="line number33 index32 alt2"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">}</code></div>
<div class="line number34 index33 alt1"><code class="java spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="java plain">MemoryHelper.compact();</code></div>
<div class="line number35 index34 alt2"><code class="java plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>快點試試看，是不是能如下圖載入刀鋒戰士呢？</p>
<div id="attachment_3763" style="width: 310px" class="wp-caption aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/md2.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" aria-describedby="caption-attachment-3763" class=" wp-image-3763 " src="https://sshfs.crazyall.net/wazai/2016/07/md2-500x632.png" alt="載入 md2 測試" width="300" height="379" title="Android Vuforia with jPCT-AE (3) – 載入 md2 測試"></a><p id="caption-attachment-3763" class="wp-caption-text">載入 md2 測試</p></div>


<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a rel="noreferrer noopener nofollow external" aria-label="Enseignement C++ avancé en Master Informatique (在新分頁中開啟)" href="https://www.lri.fr/~pa/progcxx.html" target="_blank" data-wpel-link="external" class="wpel-icon-right">Enseignement C++ avancé en Master Informatique<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Android Vuforia with jPCT-AE (2) – 載入 obj 測試</title>
		<link>https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/</link>
					<comments>https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 06 Jul 2016 00:24:55 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[.obj]]></category>
		<category><![CDATA[jPCT-AE]]></category>
		<category><![CDATA[mtl]]></category>
		<category><![CDATA[texture]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[Vuforia]]></category>
		<guid isPermaLink="false">https://wazai.net/?p=3688</guid>

					<description><![CDATA[<p>上一篇&#160;Android Vuforia with jPCT-AE (1) – 基本範例 我們已經把 Vuforia 與 jPCT-AE 的環境建立出來，也可以正常顯示 Vuforia + j&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>上一篇&nbsp;<a rel="noreferrer noopener" href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" target="_blank" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a> 我們已經把 Vuforia 與 jPCT-AE 的環境建立出來，也可以正常顯示 Vuforia + jPCT-AE 的範例─一個顏色有點昏暗的桶子，這篇繼續記錄怎麼直接載入一般常見的 .obj 檔案。 </p>



<span id="more-3688"></span>



<h2 class="para wp-block-heading">囉哩巴唆</h2>



<p>透過 <a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a> 是直接在 ImageTargetRenderer.java 的建構式中，將要畫出物件的座標以及一些參數設定好之後，透過 jPCT-AE 畫出來，聽起來不怎麼有彈性，加上一些複雜的模型要透過自己訂定座標點的方式畫出來，貌似非常不科學啊！因此，這篇要記錄如何透過 Loader 類別來載入 .obj 的檔案，而不是在程式中，自己把座標一一描繪出來。</p>



<h2 class="para wp-block-heading">到 TD3M 下載需要的檔案</h2>



<p>這篇小蛙使用&nbsp;<a href="http://tf3dm.com/3d-model/bedside-table-4-skins-96709.html" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Bedside Table (4 skins) @ TF3DM<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 當作範例，因為這個範例非常符合 jPCT-AE 載入的規則，後面會再提到這是什麼意思，總之先把這個範例下載下來，下載完解壓縮之後會看到如下圖</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/table.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/table.png" alt="Bedside table 3d model" class="wp-image-3732" title="Android Vuforia with jPCT-AE (2) – 載入 obj 測試"></a><figcaption>Bedside table 3d model</figcaption></figure></div>



<p>將這三個檔案通通複製到 Android Studio 專案中的 assets 目錄下</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/as_project.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/as_project.png" alt="將模型放入 assets 目錄下" class="wp-image-3731" title="Android Vuforia with jPCT-AE (2) – 載入 obj 測試"></a><figcaption>將模型放入 assets 目錄下</figcaption></figure></div>



<p>小蛙測試的時候用了很多模型，造成 assets 目錄下面亂七八糟，因此又在 assets 下新增了 obj、mtl、texture 等目錄，分別把上述「Bedside Table D.obj」、「Bedside_Table_D.mtl」、「Bedside_Table_D_default_1_1.png」依類別放入。</p>



<h2 class="para wp-block-heading">讓 jPCT-AE 載入 obj, mtl, texture</h2>



<p>建議可以先把 jPCT-AE 的 ImageTargetRenderer.java 的建構式注解起來，到時候如果改壞了，還可以還原回去，然後把以下建構式的程式碼貼上</p>



<pre class="wp-block-preformatted withcode">public ImageTargetRenderer(ImageTargets activity, SampleApplicationSession session) {
     mActivity = activity;
     vuforiaAppSession = session;
     world = new World();
     // 如果亮度太暗或是亮度怪怪的，可以調整這裡
     world.setAmbientLight(150, 150, 150);
     world.setClippingPlanes(2.0f, 3000.0f);
     sun = new Light(world);
     // 如果亮度太暗或是亮度怪怪的，可以調整這裡
     sun.setIntensity(250, 250, 250);
     try{
         // 載入材質，第一個參數是 texture 名稱，這邊使用原始檔名
         // 因為當載入 mtl 時，mtl 的檔名會自動對應到該 texture
         TextureManager.getInstance().addTexture(
                 "Bedside_Table_D_default_1_1.png",
                 new Texture(mActivity.getAssets().open("texture/Bedside_Table_D_default_1_1.png"))
         );
         // loadOBJ 參數分別是：.obj, .mtl, 縮放大小
         Object3D[] tmp = Loader.loadOBJ(
                 mActivity.getAssets().open("obj/Bedside Table D.obj"),
                 mActivity.getAssets().open("mtl/Bedside_Table_D.mtl"),
                 5
         );
         if(tmp != null &amp;&amp; tmp.length >= 1){
             cylinder = tmp[0];
         }
         cylinder.strip();
         cylinder.build();
         // 位移
         cylinder.translate(-110, -160, 0);
         // x 軸旋轉，不然載入的櫃子可能是趴著或是躺著的
         cylinder.rotateX(-1.5f);
         // 如果有 mtl 就可以不用 setTexture，mtl 內有 texture 名稱會自動載入
         //cylinder.setTexture("Bedside_Table_D_default_1_1.png");
         world.addObject(cylinder);
         cam = world.getCamera();
         SimpleVector sv = new SimpleVector();
         sv.set(cylinder.getTransformedCenter());
         sv.y -= 100;
         sv.z -= 100;
         sun.setPosition(sv);
     }catch(Exception e){
         e.printStackTrace();
     }
     MemoryHelper.compact();
 }</pre>



<p></p>



<p>執行看看是不是可以正常載入一個櫃子了呢？</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/obj.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/obj-500x599.png" alt="載入 .obj 測試" class="wp-image-3760" title="Android Vuforia with jPCT-AE (2) – 載入 obj 測試"></a><figcaption>載入 .obj 測試</figcaption></figure></div>



<h2 class="wp-block-heading">遭遇問題</h2>



<p>小蛙之前弄了半天，遇到一拖拉庫的錯誤，有些事情後來才釐清到底為什麼會發生錯誤，在 texture 的部份，<strong>圖片大小必須要是 2 的次方</strong>，像是：128, 256, 512, 1024, 2048 &#8230; 等，只要邊長不是 2 的次方，就會得到圖片大小錯誤的訊息，外加因為載不到圖片隨之而來的 javaNullPointer Exception。</p>



<p>render 出來沒有東西，這個要仔細看，有時候是<strong>模型太小</strong>，小蛙有一次 render 出來的東西，必須要放大 30000 倍，才符合使用大小 &#8230; 有時候是座標軸不對導致 redner 在 image target 下面 (被紙張遮住了)，有時候是沒有 mtl 也沒有材質，就會 render 出空的東西 (沒有東西) &#8230; 等，有時候是 mtl 裡面的 texture 有問題，像是根本沒有 texture 資訊，或是 texture 資訊還是錯誤的檔案路徑(如：C:\xxx\rrr\ccc\xx.png 但是實際上根本沒有這種路徑，此時就要手動修正他)，有時候其實根本也不知道為什麼就是沒有東西。</p>



<p>到 TD3M 多下載幾個範例檔試試看，再慢慢釐清為什麼不能載入的原因，這個範例應該是不需要做什麼調整就可以直接載入，因此使用這個當作範例。</p>



<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a rel="noreferrer noopener nofollow external" aria-label="Bedside Table (4 skins) @ TF3DM (在新分頁中開啟)" href="http://tf3dm.com/3d-model/bedside-table-4-skins-96709.html" target="_blank" data-wpel-link="external" class="wpel-icon-right">Bedside Table (4 skins) @ TF3DM<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Android Vuforia with jPCT-AE (1) &#8211; 基本範例</title>
		<link>https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/</link>
					<comments>https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Tue, 05 Jul 2016 23:57:58 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[AR]]></category>
		<category><![CDATA[Vuforia]]></category>
		<category><![CDATA[3d Model]]></category>
		<category><![CDATA[armeabi-v7a]]></category>
		<category><![CDATA[jPCT-AE]]></category>
		<guid isPermaLink="false">https://wazai.net/?p=3639</guid>

					<description><![CDATA[<p>說來慚愧，從 Google Adsense 被 ban 之後，就好久沒有發文了，站上 Vuforia 的文章也已經是好久以前的事情了 (遠目)，最近有專案要用到 Vuforia，爬以前的文回來看，蛙哩&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) &#8211; 基本範例</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>說來慚愧，從 Google Adsense 被 ban 之後，就好久沒有發文了，站上 Vuforia 的文章也已經是好久以前的事情了 (遠目)，最近有專案要用到 Vuforia，爬以前的文回來看，蛙哩咧 &#8230; 現在已經更新到 Vuforia 5 了 &#8230; 真的是好遙遠啊！這篇記錄怎麼讓 Vuforia 可以透過 jPCT-AE 這套工具把 3D 模型 render 出來，而不是透過之前&nbsp;<a rel="noreferrer noopener" aria-label=" (在新分頁中開啟)" href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" target="_blank" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&gt; .obj -&gt; .h</a> 這種轉換方式，系列文內會大概講解遭遇到的問題。 </p>



<span id="more-3639"></span>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://sshfs.crazyall.net/wazai/2016/07/WM2Small.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="https://sshfs.crazyall.net/wazai/2016/07/WM2Small.png" alt="圖片來源：https://developer.vuforia.com/library/articles/FAQ/Watermark" class="wp-image-3655" title="Android Vuforia with jPCT-AE (1) - 基本範例"></a><figcaption> 圖片來源：https://developer.vuforia.com/library/articles/FAQ/Watermark </figcaption></figure></div>


<h2 class="para wp-block-heading">囉哩巴唆</h2>



<p>在&nbsp;Zachary Marv 的<a rel="noreferrer noopener" aria-label=" (在新分頁中開啟)" href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h//comment-page-1#comment-32543" target="_blank" data-wpel-link="internal">這篇留言</a>中提到用這種方式產生出來的模型雖然是正確的，但是貼圖會變的怪怪的，沒有辦法像 Vuforia 的茶壺那樣好看，小蛙對 3D model 不怎麼了解 &#8230; 無法解答發生的原因以及要怎麼改善，但這的確是一個非常 OX 的問題 &#8230;</p>



<p>這次專案又要用到 AR 相關的技術，想說之前使用過 Vuforia，那就繼續用用看吧！對 Vuforia 的記憶根本就消失殆盡，還好之前有留系列文章下來： </p>



<p><strong>Qualcomm Vuforia&nbsp;</strong><strong>系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3320/qualcomm-vuforia-%e6%95%99%e5%ad%b8-1/" data-wpel-link="internal">Qualcomm Vuforia 教學 (1) – 安裝 Vuforia</a></li><li><a href="https://noter.tw/3347/qualcomm-vuforia-%e6%95%99%e5%ad%b8-2-create-image-target/" data-wpel-link="internal">Qualcomm Vuforia 教學 (2) – Create Image Target</a></li><li><a href="https://noter.tw/3360/qualcomm-vuforia-%e6%95%99%e5%ad%b8-3-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (3) – 替換茶壺 – Android 版本</a></li><li><a href="https://noter.tw/3371/qualcomm-vuforia-%e6%95%99%e5%ad%b8-4-%e4%bd%bf%e7%94%a8-android-ndk-%e7%89%88%e6%9c%ac%e4%b8%a6%e9%96%8b%e5%95%9f%e5%a4%9a%e9%87%8d%e5%81%b5%e6%b8%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (4) – 使用 Android NDK 版本並開啟多重偵測</a></li><li><a href="https://noter.tw/3392/qualcomm-vuforia-%e6%95%99%e5%ad%b8-5-%e6%9b%bf%e6%8f%9b%e8%8c%b6%e5%a3%ba-android-jni-%e7%89%88%e6%9c%ac/" data-wpel-link="internal">Qualcomm Vuforia 教學 (5) – 替換茶壺 – Android JNI 版本</a></li><li><a href="https://noter.tw/3403/qualcomm-vuforia-%e6%95%99%e5%ad%b8-6-3d-model-obj-h/" data-wpel-link="internal">Qualcomm Vuforia 教學 (6) – 3D model -&gt; .obj -&gt; .h</a></li></ul>


<p>but &#8230; 人生最大條的就是這個 but &#8230; 版本也差太多了吧！連套件名稱都不一樣了 &#8230; 上述紀錄文只能當作找回記憶碎片的&#8221;參考文&#8221;了，不過這六篇還是有一點參考價值啦！進主題　～</p>
<h2 class="para">Vuforia Android Sample</h2>
<p>簡單敘述一下整個流程：</p>
<ol>
<li>必須要有一個 Vuforia 的帳號，註冊這檔事應該沒什麼難的地方，就填填資料就好了。</li>
<li>註冊完之後，建立一個 License Key (以前 3 版的時候沒有的)，官網教學。</li>
<li><span style="line-height: 1.5em;">複製下來自己的 License Key (就是那一長串看不懂的東西)。</span></li>
<li><span style="line-height: 1.5em;">到</span><a style="line-height: 1.5em;" href="https://developer.vuforia.com/downloads/sdk" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這邊<span class="wpel-icon wpel-image wpel-icon-6"></span></a><span style="line-height: 1.5em;">下載 Vuforia SDK，解壓縮好放在一個容易找到的地方，例如：c:\vuforia\。</span></li>
<li><span style="line-height: 1.5em;">到</span><a style="line-height: 1.5em;" href="https://developer.vuforia.com/downloads/samples" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這邊<span class="wpel-icon wpel-image wpel-icon-6"></span></a><span style="line-height: 1.5em;">下載 Vuforia Sample (Core Features 這一組)，隨便解壓縮到一個地方，然後用 Android Studio 匯入。</span></li>
<li><span style="line-height: 1.5em;">打開之後看看缺少那些 jar，然後去上面的 SDK 裡面找，把缺少的 jar include 進來。</span></li>
<li><span style="line-height: 1.5em;">打開 com.vuforia.samples.SampleApplication.SampleApplicationSession.java，搜尋「Vuforia.setInitParameters」，把剛剛建立的 License Key 貼在這邊。</span></li>
<li>檢查看看還有沒有紅字，沒有的話應該就可以正常執行了 (不行別罵小蛙，感覺應該是這樣)。</li>
</ol>
<h2 class="para">Vuforia Android JNI Sample</h2>
<p>到這裡應該是不會有什麼問題才對，因為比較麻煩的是 Vuforia Sample Advanced Topics 這組，如果要使用 obj 轉 .h 的方法可以下載 Vuforia Sample Advanced Topics 這組，經過小蛙測試以及上面 Zachary Marv 提到的，texture 透過 JNI 的方式 render 出來會怪怪的，剛接觸的網友可以試試看上面教學的 (4) (5) (6)，也可以順便熟悉一下 JNI 的運作 (如果是使用 JNI 的朋友會比較麻煩，簡單一點的方法是把 Vuforia SDK 中的 build 目錄複製下來，丟進 ImageTargetsNative-5-5-9\app\src\main\ 下，接著修改 app/build.gradle</p>
<div>
<div id="highlighter_635106" class="syntaxhighlighter  shell">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="shell plain">def VUFORIA_SDK_DIR = </code><code class="shell string">'C:\\vuforia'</code>   <code class="shell plain">//</code> <code class="shell plain">改成你的 Vuforia SDK 位置</code></div>
<div class="line number2 index1 alt1"><code class="shell plain">def JAR_DIR = </code><code class="shell string">'build/java/vuforia'</code>    <code class="shell plain">//</code> <code class="shell plain">如果照著上面做的話，直接寫這樣</code></div>
<div class="line number3 index2 alt2"><code class="shell plain">sourceSets.main {</code></div>
<div class="line number4 index3 alt1"><code class="shell spaces">    </code><code class="shell plain">jni.srcDirs = []</code></div>
<div class="line number5 index4 alt2"><code class="shell spaces">    </code><code class="shell plain">jniLibs.srcDir </code><code class="shell string">"src/main/libs/"</code></div>
<div class="line number6 index5 alt1"><code class="shell spaces">    </code><code class="shell plain">//</code> <code class="shell plain">檢查裡面要有 armeabi-v7a 資料夾，如果沒有就去 Vuforia SDK 下複製</code></div>
<div class="line number7 index6 alt2"><code class="shell plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p><span style="line-height: 1.5em;">第二個要修改的部份是 ImageTargetsNative-5-5-9\app\src\main\jni\Android.mk</span></p>
<div>
<div id="highlighter_330442" class="syntaxhighlighter  shell">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="shell plain">//</code> <code class="shell plain">如果是照著上面步驟的話，改成這樣，不然就自己 trace 路徑看看</code></div>
<div class="line number2 index1 alt1"><code class="shell plain">LOCAL_SRC_FILES = ..</code><code class="shell plain">/build/lib/</code><code class="shell plain">$(TARGET_ARCH_ABI)</code><code class="shell plain">/libVuforia</code><code class="shell plain">.so</code></div>
<div class="line number3 index2 alt2"><code class="shell plain">//</code> <code class="shell plain">如果是照著上面步驟的話，改成這樣，不然就自己 trace 路徑看看</code></div>
<div class="line number4 index3 alt1"><code class="shell plain">LOCAL_EXPORT_C_INCLUDES := ..</code><code class="shell plain">/build/include</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>完成之後點擊選單列 Build -&gt; Make Project，如果沒有錯誤，直接執行就可以了！</p>
<h2 class="para">Vuforia Android Sample With jPCT-AE</h2>
<p>要使用 jPCT-AE 把 3D 模型呈現出來很簡單，只要幾個步驟就可以了：</p>
<ol>
<li>到 <a href="https://github.com/TheMaggieSimpson/Vuforia559_jPCT-AE" target="_blank" rel="noopener noreferrer nofollow external" data-wpel-link="external" class="wpel-icon-right">這裡<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 下載整個 project。</li>
<li>直接匯入 Android Studio，跟上面一樣搜尋「Vuforia.setInitParameters」，把 Vuforia License Key 貼進去。</li>
<li>這時候應該很多紅字，到 Vuforia SDK 中 (如小蛙的位置在 C:\vuforia\build\java\vuforia) 把 Vuforia.jar 複製到 Vuforia559_jPCT-AE-master\app\libs 中。</li>
<li>找到 build.gradle 新增 Vuforia.jar
<div>
<div id="highlighter_693566" class="syntaxhighlighter  text">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="text plain">dependencies {</code></div>
<div class="line number2 index1 alt1"><code class="text spaces">    </code><code class="text plain">compile files('libs/jpct_ae.jar')</code></div>
<div class="line number3 index2 alt2"><code class="text spaces">    </code><code class="text plain">compile files('libs/Vuforia.jar')  // 新增這行</code></div>
<div class="line number4 index3 alt1"><code class="text plain">}</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</li>
<li>直接 run 專案，就可以看到結果了！</li>
</ol>
<p>啥？那麼簡單？沒錯，就是這麼簡單 &#8230; 如果直接運行這個範例的話，會看到一個桶子，然後桶子看起來還有點昏暗，不過可以看到桶子表示已經成功了，下一篇將介紹怎麼載入其他 jPCT-AE 支援的 3D 模型。</p>


<p><strong>Android Vuforia 系列：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) – 基本範例</a></li><li><a href="https://noter.tw/3688/android-vuforia-with-jpct-ae-2-%e8%bc%89%e5%85%a5-obj-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (2) – 載入 obj 測試</a></li><li><a href="https://noter.tw/3735/android-vuforia-with-jpct-ae-3-%e8%bc%89%e5%85%a5-md2-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (3) – 載入 md2 測試</a></li><li><a href="https://noter.tw/3737/android-vuforia-with-jpct-ae-4-%e8%bc%89%e5%85%a5-3ds-%e6%b8%ac%e8%a9%a6/" data-wpel-link="internal">Android Vuforia with jPCT-AE (4) – 載入 3DS 測試</a></li><li><a href="https://noter.tw/3739/android-vuforia-with-jpct-ae-5-%e5%a4%9a%e9%87%8d%e6%a8%a1%e5%9e%8b%e8%bc%89%e5%85%a5%ef%bc%8c%e4%bb%a5-obj-%e7%82%ba%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (5) – 多重模型載入，以 obj 為例</a></li></ul>



<h2 class="para wp-block-heading">參考資料</h2>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://developer.vuforia.com/" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external" class="wpel-icon-right">Vuforia<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li><li><a href="https://github.com/TheMaggieSimpson/Vuforia559_jPCT-AE" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Vuforia559_jPCT-AE<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/" data-wpel-link="internal">Android Vuforia with jPCT-AE (1) &#8211; 基本範例</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3639/android-vuforia-with-jpct-ae-1-%e5%9f%ba%e6%9c%ac%e7%af%84%e4%be%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>ClickForce (MobiForce) 當機問題</title>
		<link>https://noter.tw/3588/clickforce-mobiforce-%e7%95%b6%e6%a9%9f%e5%95%8f%e9%a1%8c/</link>
					<comments>https://noter.tw/3588/clickforce-mobiforce-%e7%95%b6%e6%a9%9f%e5%95%8f%e9%a1%8c/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 02 Sep 2015 02:32:51 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[ads]]></category>
		<category><![CDATA[clickforce]]></category>
		<category><![CDATA[mobiforce]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3588</guid>

					<description><![CDATA[<p>這真是個浪費時間又漫長的過程，CF 推出新版後台以及新版 SDK 的時候，小蛙就下載來測試，一開始小蛙直接套在「我的股票精算師」上，但只要一套上去就當機 &#8230; 我的股票精算師的架構比較舊，想&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3588/clickforce-mobiforce-%e7%95%b6%e6%a9%9f%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">ClickForce (MobiForce) 當機問題</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>這真是個浪費時間又漫長的過程，CF 推出新版後台以及新版 SDK 的時候，小蛙就下載來測試，一開始小蛙直接套在「我的股票精算師」上，但只要一套上去就當機 &#8230;<br />
<span id="more-3588"></span><br />
我的股票精算師的架構比較舊，想說可能是因為這樣才當機，試了好多方法，SDK 說明文件看了又看，還是一樣的狀況 &#8230;<br />
不要太固執，先跑跑看 CF 自己的 Sample Code 吧！一跑，喵的咧！一樣只要點選「展示」，立馬當機！怎麼可能有公司直接釋出有問題的 SDK 呢？把原本用來測試的 Nexus 7 二代換成自己的手機 HTC M7 來做測試，登愣 ~ 手機可以，至於 Nexus 7 二代為什麼不行呢？看了一下 logcat 的 error</p>
<pre>09-02 10:03:23.655    3775-3954/com.clickforce.MFAD E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-7730
    Process: com.clickforce.MFAD, PID: 3775
    java.lang.NullPointerException: Attempt to invoke interface method 'void com.android.internal.telephony.Phone.updateServiceLocation()' on a null object reference
            at android.os.Parcel.readException(Parcel.java:1552)
            at android.os.Parcel.readException(Parcel.java:1499)
            at com.android.internal.telephony.ITelephony$Stub$Proxy.updateServiceLocation(ITelephony.java:1900)
            at android.telephony.CellLocation.requestLocationUpdate(CellLocation.java:42)
            at com.adcustom.sdk.utils.lbs.a.a(Unknown Source)
            at com.adcustom.sdk.utils.lbs.a.&lt;init&gt;(Unknown Source)
            at com.adcustom.sdk.utils.lbs.b.run(Unknown Source)</pre>
<p>錯誤在 com.clickforce.MFAD 裡面呼叫到 null 物件造成 java.lang.NullPointerException 例外 &#8230;  好吧！看來是 ClickForce SDK 呼叫造成，小蛙想改也沒辦法，不過為什麼手機可以，Nexus 7 二代卻不行呢？看了上面的訊息跟 internal.telephony.Phone.updateServiceLocation()，剛好 Nexus 7 二代沒有通話模組，就往這個方面去猜了！<br />
<span style="line-height: 1.5em;">也許他們的 SDK 只是 beta 版，寫信去跟 CF 反應好了，並且把小蛙的猜測告訴對方，</span>得到的結果是，我們的 SDK 應該沒有問題喔，工程師使用另一台沒有通話模組的平版測試也是沒有問題的，請小蛙再看看哪裡有問題，球又丟回來了 &#8230; SDK 是 CF 的，Sample Code 是 CF 的，小蛙只是直接執行 &#8230; 會是哪裡有問題呢？<br />
上網查了一下，似乎 Lollipop (5.x) 以上有不少人回報這個問題 &#8230; 但 &#8230; 這應該也不是小蛙要去解決的吧！大膽假設棒棒糖(Lollipop)版本對於沒有通話模組的平板可能會造成的問題 &#8230; maybe &#8230; 小蛙手邊沒有其他可以升上 5.x 且沒有通話模組的平板可以測試了，不過至少測試過 3 台 Nexus 7 二代確定是不行。<br />
看著 CF 後台流量跟點擊數越來越少，新版的 SDK 又面臨當機的問題 &#8230; 難不成要先過濾如果使用者是 Nexus 7 二代就不顯示廣告 &#8230; 哀 ~ 有空再來弄了！</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3588/clickforce-mobiforce-%e7%95%b6%e6%a9%9f%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">ClickForce (MobiForce) 當機問題</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3588/clickforce-mobiforce-%e7%95%b6%e6%a9%9f%e5%95%8f%e9%a1%8c/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>我的股票精算師備份功能</title>
		<link>https://noter.tw/3552/%e6%88%91%e7%9a%84%e8%82%a1%e7%a5%a8%e7%b2%be%e7%ae%97%e5%b8%ab%e5%82%99%e4%bb%bd%e5%8a%9f%e8%83%bd/</link>
					<comments>https://noter.tw/3552/%e6%88%91%e7%9a%84%e8%82%a1%e7%a5%a8%e7%b2%be%e7%ae%97%e5%b8%ab%e5%82%99%e4%bb%bd%e5%8a%9f%e8%83%bd/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 06 Feb 2015 10:32:07 +0000</pubDate>
				<category><![CDATA[手機 App]]></category>
		<category><![CDATA[備份]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[我的股票精算師]]></category>
		<category><![CDATA[教學]]></category>
		<category><![CDATA[換手機]]></category>
		<category><![CDATA[還原]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=3552</guid>

					<description><![CDATA[<p>常遇到使用者詢問「我的股票精算師」要怎麼備份，這篇記錄一下，需要寫怎麼備份表示軟體設計上有很大的問題，造成使用者使用上的困難，但小蛙最近沒有時間去做修改 &#8230; 只好委屈精算師的使用者了 &#038;g&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3552/%e6%88%91%e7%9a%84%e8%82%a1%e7%a5%a8%e7%b2%be%e7%ae%97%e5%b8%ab%e5%82%99%e4%bb%bd%e5%8a%9f%e8%83%bd/" data-wpel-link="internal">我的股票精算師備份功能</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p>常遇到使用者詢問「我的股票精算師」要怎麼備份，這篇記錄一下，需要寫怎麼備份表示軟體設計上有很大的問題，造成使用者使用上的困難，但小蛙最近沒有時間去做修改 &#8230; 只好委屈精算師的使用者了 &gt;&lt;<br /><span id="more-3552"></span><br />我的股票精算師這 app 屬於比較早期製作，當 Android 版本持續更新，有新的元件出現之後，小蛙一直沒有時間去做更新 (除權息功能也根本沒有實作上去)，操作上可能對於沒有使用過舊版本的 Android 使用者來說會覺得很不人性化 (I&#8217;m sorry &#8230;)<br />選單的部分由於上述原因，使得這功能不容易被發現，在庫存頁面點選「選單」按鈕 (手機上的)，會出現「備份」、「還原」、「版本」這些選項，在歷史頁面中則會出現「匯出」的功能。以小蛙的 HTC New One (M7) 為例，手機上沒有選單按鍵，小蛙把他設定成長按 Home 鍵當作選單按鈕，以此方法呼叫出選單。<br />另一個 bug 尚未修正的是，有時候即使按了選單鈕，卻還是無法出現選單，這時候需要先切換到別的頁籤再切回來就可以看到選單 (I&#8217;m sorry &gt;&lt;) 以下圖解。</p>
<h2 class="para">備份</h2>
<p>真的有備份的選項！<br /><a title="Screenshot_2015-02-06-18-09-06.png" href="http://lh6.ggpht.com/-jGj5IF5KTYs/VNSTQcGcNaI/AAAAAAAAKso/muc3rgK-asM/s0/Screenshot_2015-02-06-18-09-06.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="Screenshot_2015-02-06-18-09-06.png" src="//lh6.ggpht.com/-jGj5IF5KTYs/VNSTQcGcNaI/AAAAAAAAKso/muc3rgK-asM/w500-o/Screenshot_2015-02-06-18-09-06.png" alt="Screenshot_2015-02-06-18-09-06.png" width="300" height="533" /></a><br />點選備份之後會把檔案儲存在 /sdcard/StockCal/ 資料夾中。</p>
<p style="text-align: center;"><a title="Screenshot_2015-02-06-18-09-16.png" href="http://lh4.ggpht.com/-eKu5MLSSb14/VNSTQBVL2xI/AAAAAAAAKsk/J7JqepeonCw/s0/Screenshot_2015-02-06-18-09-16.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo alignnone" title="Screenshot_2015-02-06-18-09-16.png" src="//lh4.ggpht.com/-eKu5MLSSb14/VNSTQBVL2xI/AAAAAAAAKsk/J7JqepeonCw/w500-o/Screenshot_2015-02-06-18-09-16.png" alt="Screenshot_2015-02-06-18-09-16.png" width="300" height="533" /></a>      <a title="Screenshot_2015-02-06-18-09-27.png" href="http://lh6.ggpht.com/-pI2EC3n7VHw/VNSTQ4vCbrI/AAAAAAAAKsw/UKyJrcJOlVw/s0/Screenshot_2015-02-06-18-09-27.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo alignnone" title="Screenshot_2015-02-06-18-09-27.png" src="//lh6.ggpht.com/-pI2EC3n7VHw/VNSTQ4vCbrI/AAAAAAAAKsw/UKyJrcJOlVw/w500-o/Screenshot_2015-02-06-18-09-27.png" alt="Screenshot_2015-02-06-18-09-27.png" width="300" height="533" /></a></p>
<h2 class="para">還原</h2>
<p>還原也是一樣，點了之後提示說要把備份的兩個檔案放在 /sdcard/StockCal/ 路徑下。<br /><a title="Screenshot_2015-02-06-18-09-43.png" href="http://lh5.ggpht.com/-qrjvDzZoE8I/VNSTR2wtIKI/AAAAAAAAKs0/j7TgOIc-EaQ/s0/Screenshot_2015-02-06-18-09-43.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="pe2-photo aligncenter" title="Screenshot_2015-02-06-18-09-43.png" src="//lh5.ggpht.com/-qrjvDzZoE8I/VNSTR2wtIKI/AAAAAAAAKs0/j7TgOIc-EaQ/w500-o/Screenshot_2015-02-06-18-09-43.png" alt="Screenshot_2015-02-06-18-09-43.png" width="300" height="533" /></a></p>
<h2 class="para">更換手機 (還原)</h2>
<p>如果是更換手機的話，先在原先手機上面執行備份的功能，接著把 /sdcard/StockCal/ 資料夾下的所有東西，複製到新手機的 /sdcard/StockCal/ (這邊可能要在新手機建立該資料夾)，放好之後點選還原選單即可！</p>
<p style="text-align: center;"><a title="Screenshot_2015-02-06-18-13-27.png" href="http://lh6.ggpht.com/-LZ3ZrMF93OM/VNST63HqL-I/AAAAAAAAKtA/o7OlxNwhhi4/s0/Screenshot_2015-02-06-18-13-27.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="Screenshot_2015-02-06-18-13-27.png" src="//lh6.ggpht.com/-LZ3ZrMF93OM/VNST63HqL-I/AAAAAAAAKtA/o7OlxNwhhi4/w500-o/Screenshot_2015-02-06-18-13-27.png" alt="Screenshot_2015-02-06-18-13-27.png" width="300" height="533" /></a>      <a style="line-height: 1.5em;" title="Screenshot_2015-02-06-18-13-35.png" href="http://lh3.ggpht.com/-kRFjIXhECac/VNST663DJ8I/AAAAAAAAKtE/Sw1HDhSgAck/s0/Screenshot_2015-02-06-18-13-35.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" class="alignnone pe2-photo" title="Screenshot_2015-02-06-18-13-35.png" src="//lh3.ggpht.com/-kRFjIXhECac/VNST663DJ8I/AAAAAAAAKtE/Sw1HDhSgAck/w500-o/Screenshot_2015-02-06-18-13-35.png" alt="Screenshot_2015-02-06-18-13-35.png" width="300" height="533" /></a></p>
<p>那麼多 bug 沒有修正還敢上架給人用 &#8230; 快逃 &gt;..&lt;</p>


<script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"VideoObject","name":"我的股票精算師備份方式 | 計算及記錄股票投資損益的 app | 我的股票精算師 Ep1 | 記下來","description":"#我的股票精算師 有三種備份方式：\n1. 備份到手機 \n2. 備份到雲端硬碟\n3. 備份到 Gmail\n\n音樂資訊：\nTrack: ROY KNOX x WTCHOUT - Shadows (Feat. Sviivan) [NCS Release]\nMusic provided by NoCopyrightSounds.\nWatch: https:\/\/youtu.be\/o8Y_uR6ZDxo\nFree Download \/ Stream: http:\/\/ncs.io\/Shadows","thumbnailUrl":"https:\/\/i.ytimg.com\/vi\/f8srXALLC58\/maxresdefault.jpg","uploadDate":"2020-02-23T05:56:18Z","duration":"PT2M29S","embedUrl":"https:\/\/www.youtube.com\/watch?v=f8srXALLC58"}</script>



<p>影片操作</p>



<figure class="wp-block-embed-youtube aligncenter wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="video-container"><iframe title="我的股票精算師備份方式 | 計算及記錄股票投資損益的 app | 我的股票精算師 Ep1 | 記下來" width="500" height="281" src="https://www.youtube.com/embed/f8srXALLC58?feature=oembed&#038;wmode=opaque" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/3552/%e6%88%91%e7%9a%84%e8%82%a1%e7%a5%a8%e7%b2%be%e7%ae%97%e5%b8%ab%e5%82%99%e4%bb%bd%e5%8a%9f%e8%83%bd/" data-wpel-link="internal">我的股票精算師備份功能</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/3552/%e6%88%91%e7%9a%84%e8%82%a1%e7%a5%a8%e7%b2%be%e7%ae%97%e5%b8%ab%e5%82%99%e4%bb%bd%e5%8a%9f%e8%83%bd/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
