2019年2月28日 星期四

Android-無法更新 Kotlin 1.3.21

不知道各位大大在更新到 Kotlin 時
是否有發現最新本版本是 : 1.3.21
但是更新 Gradle 始終無法正常更新
一直出現以下錯誤訊息:

ERROR: Failed to resolve: org.jetbrains.kotlin:kotlin-stdlib-jre7:1.3.21


原來發現自從 Kotlin : 1.2.71 之後就不在更新了
而是改用 "jdk" 這字取代 :
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"








資料來源:https://stackoverflow.com/questions/53448450/how-to-resolve-error-failed-to-resolve-org-jetbrains-kotlinkotlin-stdlib-jre7

歡迎轉載,請註明出處。

2019年2月24日 星期日

Android-AndroidStudio mac 無法抓到 Git 指定路徑

各位大大在幫 AndroidStudio 安裝 Git 時
是否會發現明明安裝完 Git
卻一直出現

xcrun: error: invalid active developer path, missing xcrun

這字樣

首先我們先按照步驟
1 . xcode-select --install
2 . sudo xcode-select -switch /

參考資料:https://www.jianshu.com/p/50b6771eb853


2018年10月18日 星期四

Android-使用API取得資料出現org.apache.http.ProtocolVersion

尚未整理

隨著資安意識抬頭
在網路連線的功能也需更加的強化
在最近開發的過程中
直接使用 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年9月28日 星期五

Android-Android Console 隱私權政策

20190316 新增隱私權規章來源:
(部分收費) 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退出动画无效问题的解决

2018年9月15日 星期六

Android-如何用Kotlin簡易設定與監聽按鈕(Button)

想必各位大大從 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)















看起來並不單純了
東翻西找後
結果發現直接把 Style 修改成
Base.Theme.AppCompat.Light.DarkActionBar













這樣就能順利進行下面的開發了

歡迎轉載,請記得註明出處。