尚未整理
隨著資安意識抬頭
在網路連線的功能也需更加的強化
在最近開發的過程中
直接使用 SDK 28 版本
在開發的過程中竟然發生以下的錯誤
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/ProtocolVersion;
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:109)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.ProtocolVersion" .......]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:109)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:97)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
Suppressed: java.io.IOException: No original dex files found for dex location /data/app/.....split_lib_resources_apk.apk
at dalvik.system.DexFile.openDexFileNative(Native Method)
at dalvik.system.DexFile.openDexFile(DexFile.java:354)
這看似已經存在的竟然找不到(張大眼睛
那如果直接跳過?
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
竟然又出現錯誤
java.io.IOException: Cleartext HTTP traffic to -.- not permitted
看起來有進展
但是看似不被允許
結果去官方找答案 : 網路安全性設定
原來是有關安全性的問題,解法 :
非常的不建議此方法
因為有可能連到您不知道的位址
結果遭受到攻擊
<application
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
<activity android:name=".LinePermissionActivity">
.
.
.
</application>
參考資料:Android 8: Cleartext HTTP traffic not permitted
2018年10月18日 星期四
2018年9月28日 星期五
Android-Android Console 隱私權政策
20190316 新增隱私權規章來源:
(部分收費) FreePrivacyPolicy 如果有GPS、adMob...就需要額外加錢
(免費) 簡易版本
(免費) termly
(免費) getterms
除了 FreePrivacyPolicy 有憑證連結,其餘需自行找地方存放
這幾天收到 Google 通知信
如下:
簡單來說
辛辛苦苦做出來的應用程式暫時不會出現在商店了
問題是以下到底是?
違反 Android 廣告 ID 的使用方式政策和開發人員發佈協議第 4.8 條的規定
可能有的問題 :
1 . 有新的問券調查
2 . 那就和我一樣沒有設定隱私政策連結
(os : 目前不提交隱私權政策網址這選項是...?)
請到此連結創立關於您應用軟體對應憑證( 免費版本皆可 ):privacypolicies
填完內容後回出現此,並且將並且將此路徑貼至隱私政策連結即可
請務必好好保留此資料
參考資料:Privacypolicies
(部分收費) FreePrivacyPolicy 如果有GPS、adMob...就需要額外加錢
(免費) 簡易版本
(免費) termly
(免費) getterms
除了 FreePrivacyPolicy 有憑證連結,其餘需自行找地方存放
這幾天收到 Google 通知信
如下:
簡單來說
辛辛苦苦做出來的應用程式暫時不會出現在商店了
問題是以下到底是?
違反 Android 廣告 ID 的使用方式政策和開發人員發佈協議第 4.8 條的規定
可能有的問題 :
1 . 有新的問券調查
2 . 那就和我一樣沒有設定隱私政策連結
(os : 目前不提交隱私權政策網址這選項是...?)
請到此連結創立關於您應用軟體對應憑證( 免費版本皆可 ):privacypolicies
填完內容後回出現此,並且將並且將此路徑貼至隱私政策連結即可
請務必好好保留此資料
參考資料:Privacypolicies
2018年9月16日 星期日
Android-換頁特效
各位在開發頁面過程中
一定多多少少聽到換頁、轉頁這樣的抱怨
能有啥麼特效可以呈現 ?
這是什麼使用者體驗 ?
一堆讓人滿頭問號的 What...
今天就來寫簡單的範例讓大家秒懂
此篇以左右滑動特效為例子
公式圖表 :
先想 A 頁面位移量為多少
再想 B 頁面位移量為多少
1 . 先創立 res/anim folder
2 . 建立特效
A頁面主頁滑至左底<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
</set>
B頁面右底滑至主頁
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0%p" />
</set>
3 . 立即將此風格套用在 Style.xml 上吧
<style name="transitionPage" style="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/open_in_from_right</item>
<item name="android:activityOpenExitAnimation">@anim/open_out_from_left</item>
<item name="android:activityCloseEnterAnimation">@anim/close_in_from_left</item>
<item name="android:activityCloseExitAnimation">@anim/close_out_from_right</item>
</style>
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> .
.
<item name="android:windowAnimationStyle">@style/transitionPage</item> .
</style>
參考資料:设置Activity退出动画无效问题的解决
一定多多少少聽到換頁、轉頁這樣的抱怨
能有啥麼特效可以呈現 ?
這是什麼使用者體驗 ?
一堆讓人滿頭問號的 What...
今天就來寫簡單的範例讓大家秒懂
此篇以左右滑動特效為例子
公式圖表 :
先想 A 頁面位移量為多少
再想 B 頁面位移量為多少
1 . 先創立 res/anim folder
2 . 建立特效
A頁面主頁滑至左底<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0%p"
android:toXDelta="-100%p" />
</set>
B頁面右底滑至主頁
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0%p" />
</set>
3 . 立即將此風格套用在 Style.xml 上吧
<style name="transitionPage" style="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/open_in_from_right</item>
<item name="android:activityOpenExitAnimation">@anim/open_out_from_left</item>
<item name="android:activityCloseEnterAnimation">@anim/close_in_from_left</item>
<item name="android:activityCloseExitAnimation">@anim/close_out_from_right</item>
</style>
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> .
.
<item name="android:windowAnimationStyle">@style/transitionPage</item> .
</style>
參考資料:设置Activity退出动画无效问题的解决
2018年9月15日 星期六
Android-如何用Kotlin簡易設定與監聽按鈕(Button)
想必各位大大從 Java 轉到 Kotlin 有極大的痛楚
此篇就以現在常遇到的狀況下做簡易的介紹
首先我們先把一般情況下的
先把頁面畫出來
1 . activity_button.xml
重點來了
以下是 Java 寫法 :
以下是 Kotlin 寫法 :
此篇就以現在常遇到的狀況下做簡易的介紹
首先我們先把一般情況下的
先把頁面畫出來
1 . activity_button.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/buttonTest"
android:layout_width="88dp"
android:layout_height="48dp"
android:layout_marginBottom="232dp"
android:layout_marginEnd="148dp"
android:layout_marginStart="148dp"
android:layout_marginTop="231dp"
android:text="我是按鈕"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
重點來了
以下是 Java 寫法 :
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class ButtonJavaActivity extends AppCompatActivity implements View.OnClickListener {
private Button btnTest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnTest = findViewById(R.id.buttonTest);
btnTest.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.buttonTest:
Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
以下是 Kotlin 寫法 :
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import android.view.View
import android.widget.Button
import android.widget.Toast
class ButtonActivity : AppCompatActivity(), View.OnClickListener {
private lateinit var btnTest: Button;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_button)
btnTest = findViewById(R.id.buttonTest);
btnTest.setOnClickListener(this);
}
override fun onClick(v: View?) {
when (v?.id) {
R.id.buttonTest -> {
Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show();
}
else -> {
}
}
}
}
Android-新建專案畫面佈局確有問題
在新建專案時想必第一個想法是
直接執行就可以跑在模擬器上了阿
剛開始我也是這樣想
但是自從換電腦後
又是另一回事了
一開啟畫面時馬上出現
Render problem
-Failed to load AppCompat ActionBar with unknown error.
The following classes could not be instantiated:
- android.support.v7.widget.ActionBarContainer (Open Class, Show Exception, Clear Cache)
- android.support.v7.widget.ActionBarContextView (Open Class, Show Exception, Clear Cache)
- android.support.v7.app.WindowDecorActionBar (Open Class, Show Exception, Clear Cache)
Render problem
-Failed to load AppCompat ActionBar with unknown error.
The following classes could not be instantiated:
- android.support.v7.widget.ActionBarContainer (Open Class, Show Exception, Clear Cache)
- android.support.v7.widget.ActionBarContextView (Open Class, Show Exception, Clear Cache)
- android.support.v7.app.WindowDecorActionBar (Open Class, Show Exception, Clear Cache)
看起來並不單純了
東翻西找後
結果發現直接把 Style 修改成
Base.Theme.AppCompat.Light.DarkActionBar
這樣就能順利進行下面的開發了
歡迎轉載,請記得註明出處。
Android-無法開啟 AndroidStudio 模擬器
不知道各位大大是否有在新的電腦安裝 AndroidStudio
卻無法開啟模擬器的尷尬情況
錯誤訊息為 :
Emulator: emulator:
ERROR: x86 emulation currently requires hardware acceleration!
然後依照以下的步驟卻一樣的情況發生 :
1 . SDK Tool 下載 Intel X86 Emulator Accelerator(HAXM installer)
2 . 然後去 Sdk -> extras -> intel -> Hardware_Accelerated_Execution_Manager
安裝 intelhaxm-android.exe
然後沒有動靜,也一樣會出現一樣的錯誤...
上網查才發現
這是 Intel 針對虛擬機的一個設定
Intel VT-d(Intel Virtualization Technology for Directed I/O)
提供虛擬機一個強大的平台
為了避免使用者沒真正的在使用
所以預設都是為關閉的狀態
所以開發者必須要自己去 BIOS 自行該改
歡迎轉載,請註明出處。
2018年7月29日 星期日
生活實作-真假小米 LED 隨身燈 差很多?
各位米粉好
想必大家對小米隨身燈不陌生嗎
對呀!對呀!
一個燈就要快 100 元那個,沒錯
但是網路上也有出現一個只要 10 元?
對,你沒聽錯!!!
都是燈那有啥差別?
來看接下來的圖吧
2018年7月22日 星期日
Kotlin-變數初始值 lateinit 與 ?= 與 lazy
不曉得個外大大在用 Kotlin 開發 Android 時候
是否有發現為啥無法想 Java 定義一個變數就好
反而還要在定義其他的屬性
我們先來看有哪幾種
1 . lateinit
此宣告是指,晚一點初始化
但此變數是不可為 Null 的
2 . ?=
雖然可以為空值
但是審查的條件也變得相對嚴格
要使用底下功能時
都必須要檢查
不然直接報錯
3 .
參考資料:Kotlin — lateinit vs lazy
參考資料:[android]活动-lateinit VS 任何?= null
參考資料:Kotlin: Lazy 和 Lateinit 的使用
參考資料:Kotlin: When to Use Lazy or Lateinit
是否有發現為啥無法想 Java 定義一個變數就好
反而還要在定義其他的屬性
我們先來看有哪幾種
1 . lateinit
此宣告是指,晚一點初始化
但此變數是不可為 Null 的
2 . ?=
雖然可以為空值
但是審查的條件也變得相對嚴格
要使用底下功能時
都必須要檢查
不然直接報錯
3 .
參考資料:Kotlin — lateinit vs lazy
參考資料:[android]活动-lateinit VS 任何?= null
參考資料:Kotlin: Lazy 和 Lateinit 的使用
參考資料:Kotlin: When to Use Lazy or Lateinit
2018年6月20日 星期三
2018年6月2日 星期六
2018年5月26日 星期六
Java - 實作 Interface
希望各位大大看到上一篇的簡述能有些希望
至少能從生活中感覺出來那道光芒
接下來就是 Interface( 接口 )
什麼是 Interface ?
我該怎麼用?
我們先模擬情境吧
現在如果你要開派對
你希望是開聖誕趴?制服趴?
派對必備用品?
所以參加你的派對都必須要遵守( 實作 )!
1 . 制定規範
2 . 只要參加都要有此配件才可參加
歡迎轉載,請註明出處。
至少能從生活中感覺出來那道光芒
接下來就是 Interface( 接口 )
什麼是 Interface ?
我該怎麼用?
我們先模擬情境吧
現在如果你要開派對
你希望是開聖誕趴?制服趴?
派對必備用品?
所以參加你的派對都必須要遵守( 實作 )!
1 . 制定規範
/**
* 派對必要裝扮
* @author brian
*/
public interface DressUp {
/** 耳環 */
String earring();
/** 上衣 */
String clothes();
/** 褲子 */
String pants();
/** 通關密語 */
void password();
}
2 . 只要參加都要有此配件才可參加
/**
* 主題:我家派對
* @author brian
*/
public class MyParty implements DressUp {
@Override
public String earring() {
// 閃亮配飾
return "diamond";
}
@Override
public String clothes() {
// 紅色上衣
return "redTShirt";
}
@Override
public String pants() {
// 短褲
return "shortPants";
}
@Override
public void password() {
// 心裏通關密語
System.out.println("內心的通關密語:Cool");
}
public static void main(String[] args) {
MyParty Peter = new MyParty();
System.out.println("Peter的配飾 : " + Peter.earring());
System.out.println("Peter的上衣 : " + Peter.clothes());
System.out.println("Peter的褲子 : " + Peter.pants());
Peter.password();
}
}
Peter的配飾 : diamond
Peter的上衣 : redTShirt
Peter的褲子 : shortPants
內心的通關密語:Cool
歡迎轉載,請註明出處。
2018年5月24日 星期四
Java - 繼承 Extends
想必有時候剛入行的大大不知道繼承
剛開始也是讓人挺頭痛的
但是以生活動的例子來說
可能就直接排出掉很多學習障礙囉
我們就拿簡單的範例來說說吧
請依照順序觀看
1 . 父母有啥外觀與您相同?(頭髮、臉蛋、身高、體重)
2 . 我自己外觀長得怎樣?(頭髮、臉蛋、身高、體重)
3 . 長大後我會有哪些轉變?(頭髮、臉蛋、身高、體重)
首先,因為會繼承我父母的基因
所以我因該會是
剛開始也是讓人挺頭痛的
但是以生活動的例子來說
可能就直接排出掉很多學習障礙囉
我們就拿簡單的範例來說說吧
請依照順序觀看
1 . 父母有啥外觀與您相同?(頭髮、臉蛋、身高、體重)
2 . 我自己外觀長得怎樣?(頭髮、臉蛋、身高、體重)
3 . 長大後我會有哪些轉變?(頭髮、臉蛋、身高、體重)
首先,因為會繼承我父母的基因
public class ParentBody {
public String hairColor() {
// 黑頭髮
return "Black";
}
public int height() {
// 身高
return 170;
}
public boolean glasses() {
// 戴眼鏡
return false;
}
public String language(String language) {
// 家人聽能辨別這兩種語言
if ("English".equals(language)) {
return "英文";
} else {
return "中文";
}
}
}
所以我因該會是
public class MyBody extends ParentBody {
public static void main(String[] arg) {
ParentBody peter = new MyBody();
System.out.println("Peter 髮色是 " + peter.hairColor() + " 色");
System.out.println("Peter 身高是 " + peter.height() + " 公分");
System.out.println("Peter 戴眼鏡 " + peter.glasses());
System.out.println("Peter 是說 " + peter.language("Chinese"));
}
}
Peter 髮色是 Black 色
Peter 身高是 170 公分
Peter 戴眼鏡 false
Peter 是說 中文
但是因為環境改變,我認定是(@override )
public class MyBody extends ParentBody {
@Override
public String hairColor() {
// 因為潮流我就染白髮
return "white";
}
@Override
public String language(String language) {
// 但我決定是這樣
if ("English".equals(language)) {
return "英文";
} else if ("Chinese".equals(language)) {
return "台語";
} else {
return "聽不懂";
}
}
public static void main(String[] arg) {
ParentBody peter = new MyBody();
System.out.println("Peter 髮色是 " + peter.hairColor() + " 色");
System.out.println("Peter 身高是 " + peter.height() + " 公分");
System.out.println("Peter 戴眼鏡 " + peter.glasses());
System.out.println("Peter 是說 " + peter.language("Chinese"));
}
}
Peter 髮色是 white 色
Peter 身高是 170 公分
Peter 戴眼鏡 false
Peter 是說 台語
歡迎轉載,請註明出處。
2018年4月15日 星期日
AndroidStudio-AndroidStudio Gradle 版本升級問題
各位大大再升級 Gradle 版本超級順利
但是只要切換成不同專案時不然爆出
Gradle 'XXX' project refresh failed ...
簡單的說專案版本與連結對應版本不符
需要再調整設定
Example :
Caused by: java.lang.RuntimeException: Minimum supported Gradle version is 4.4. Current version is 4.1.
1 . 確定為以上敘述之問題
2 . 確定掛載版本(Version : 4.4)
3 . 更新專案設定
參考資料:Gradle version 3.3 does not support forTask() method on BuildActionExecuter
但是只要切換成不同專案時不然爆出
Gradle 'XXX' project refresh failed ...
簡單的說專案版本與連結對應版本不符
需要再調整設定
Example :
Caused by: java.lang.RuntimeException: Minimum supported Gradle version is 4.4. Current version is 4.1.
1 . 確定為以上敘述之問題
2 . 確定掛載版本(Version : 4.4)
3 . 更新專案設定
參考資料:Gradle version 3.3 does not support forTask() method on BuildActionExecuter
2018年3月13日 星期二
2018年1月18日 星期四
Eclipse-如何在編寫時自動帶入方法
常常在用 Eclipse 開發的各問大大
是否會因為編寫時候
沒有自動產生出可以使用的方法列表
Intelli-sense
•Windows -> Preferences -> Java -> Editor -> Content Assist
•Auto Activation -> Auto Activation Trigger for Java
•Change "." to ".(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
是否會因為編寫時候
沒有自動產生出可以使用的方法列表
Intelli-sense
•Windows -> Preferences -> Java -> Editor -> Content Assist
•Auto Activation -> Auto Activation Trigger for Java
•Change "." to ".(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
Eclipse-自動添加
2018年1月14日 星期日
Linux-如何在 Window 下安裝 VirtualBox 執行 Linux
2 . 官網下載 Linux 的 Ubuntu 版本 : 官方網站
3 . 執行 VirtualBox ,並且安裝程序步驟
4 . 設定主機參數
5 . 點選確定後,執行啟動
6 . 成功畫面
歡迎轉載,請註明出處。
訂閱:
文章 (Atom)