python ide_创建不带IDE的基本Android应用

python ide

python ide

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。

几乎每个Android教程都使用Android Studio创建和开发应用程序。 这对学习不是很好,因为您看不到事物的工作原理,即

  • 组成Android Studio项目的组件
  • 如何设置和配置构建
  • 哪些部分构成了来源

软件开发是关于文件的,在本教程中,我们将遍历基本Android项目中的每个文件-首先检查Android Studio输出什么,然后从头开始构建Android项目。 我们不会假定以前有任何Android经验,只需要一点Java。

注意:我将在Windows上执行此操作,但大多数说明应在其他平台上有效。

分解您的Android Studio项目

这是当您启动一个完全裸项目时Android Studio所创建的。

Android应用程式

首先要注意的是,大多数文件都涉及Gradle(用于配置和执行构建的系统)。 没有Gradle文件,我们将拥有什么?

Android应用程式

只有三个文件夹和三个文件。 显然,Android项目的主要复杂性是构建系统。

让我们看看.gitignore,看看哪些文件不包含在源代码管理中。

Android应用程式

因此MyApplication.iml并不重要。 如果您使用的是Google的iml文件,则会看到它们已被Android Studio使用,并且可以从.idea/的配置重新生成。

另外, local.propertiesbuild/也不重要。 那给我们留下了什么? 只是app/文件夹和.idea/一些文件,这是IntelliJ(基于Android Studio构建)存储配置文件的位置。

app文件夹中,您将找到两个目录和三个文件:

  • libs/ ,为空
  • src/ ,不是
  • .gitignore
  • build.gradle
  • ProGuard

ProGuard通过删除未使用的库来帮助缩小最终的APK。 您不需要此文件(实际上已全部注释掉了)。 .gitignore用于源代码管理(如果您还不知道的话)。 因此重要的只是src/build.gradle

src/包含您的Java源代码,您使用的资源(如布局和配置文件)以及可告诉Android您的应用程序是什么的AndroidManifest 。 然后build.gradle告诉Gradle如何使用Gradle Android插件将您的源转换为APK。

为了看到所有这些效果,让我们从头开始构建代码库,首先安装SDK,然后初始化gradle,然后转换为Android版本,最后编写应用程序代码。

Android SDK入门

对于此项目,您需要下载Android SDK。 这只是一个ZIP文件。 转到常规安装页面,然后在“命令行工具”中向右滚动至底部。 在那里,您会找到仅150MB左右的压缩文件。 提取并将您的ANDROID_SDK_ROOT环境变量设置为提取的位置。

就是这样! Gradle应该会自动将其拾取。 (注意:Gradle将SDK位置存储在local.properties文件中,正如我们之前看到的local.properties ,该位置未保存到源代码管理中)。

初始化Gradle

为了从头开始我们的项目,我们使用Gradle初始化一个文件夹。 首先安装Gradle。 我从“手册”部分下载了仅二进制版本,并将bin文件夹添加到了PATH

gradle命令现在应该可以从您的命令行运行。 注意:您还需要安装Java 7或更高版本。 这是使用gradle init初始化空文件夹时gradle init

看看这些文件在Android Studio项目输出中如何显示? 有关这些文件的详细说明,请参见Gradle创建构建指南

创建一个Android版本

接下来,我们需要设置我们的项目以构建Android。 第一步是将settings.gradle更改为仅包含应用程序模块(只是一个文件夹)。

include ':app'

接下来,将以下内容放入根目录build.gradle

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

这主要定义了从何处下载Gradle库。

接下来,创建/app目录,并将以下内容放入app/build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    defaultConfig {
        applicationId "com.example.karl.myapplication"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    implementation 'com.android.support:appcompat-v7:253.1'
}

这使用了Android Gradle插件(com.android.application)并设置了一些值,例如SDK版本和Proguard(优化了我们的输出大小)。 此外,在“依赖项”部分中,它提供了我们要导入的任何库(此处我们导入两个,都将在以后构建接口时使用)。

现在创建app/src/main/res/values/styles.xml ,我们将使用它来设置应用程序的主题。

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
    </style>

</resources>

最后将以下内容放入app/src/main/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.karl.myapplication">

    <application
        android:label="Demo App"
        android:theme="@styles/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这定义了我们应用的程序包,标签和主要活动。

现在,当您运行gradlew build您应该会看到BUILD SUCCESSFUL。 在app/build/outputs/apk/debug您应该看到app-debug.apk 。 您刚刚从头开始设置了Android版本!

要部署此功能,只需在插入手机的情况下说出gradlew installDebug (然后[启用USB调试[(https://www.howtogeek.com/129728/how-to-access-the-developer-options-menu-and-enable- usb-debugging-on-android-4.2 /))。 然后,您应该看到一个名为Demo App的新应用。 当您运行它时,它会崩溃,因为您尚未编写任何Java代码!

编写Java应用程序

接下来建立您的构建,我们需要编写Java。 为此,我们只需要两个文件:主活动Java文件和布局XML。

将以下内容放入app/src/main/java/com/example/karl/myapplication/MainActivity.java

package com.example.karl.myapplication;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

它只是创建一个新的Activity(在Android中是类似于流程的核心思想),并将视图设置为Resources文件夹中的布局。

将其放入app/src/main/res/layout/activity_main.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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

这只会创建一个“ Hello World!” 消息中心屏幕。

现在运行gradlew build ,您应该再次看到BUILD SUCCESSFUL。 使用gradlew installDebug安装到手机上,您应该看到以下内容:

Android应用程式

您刚刚制作了一个工作正常的Android应用程序,仅带了一个文本编辑器:)。

使用Okta添加身份验证

大多数现代应用程序都需要一定程度的安全性,因此有必要知道如何简单轻松地构建身份验证。 为此,我们将使用OktaAppAuth包装器库。

为什么选择Okta?

在Okta,我们的目标是使身份管理比您以往更加轻松,安全和可扩展。 Okta是一项云服务,允许开发人员创建,编辑和安全地存储用户帐户和用户帐户数据,并将它们与一个或多个应用程序连接。 我们的API使您能够:

你卖了吗注册一个永久免费的开发人员帐户,当您完成后,请回来查看我们,以便我们详细了解如何构建安全的移动应用程序!

Java身份验证

创建一个名为LoginActivity.java的新Activity,并将其放置在与MainActivity相同的文件夹中。

package com.example.karl.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.util.Log;

import com.okta.appauth.android.OktaAppAuth;
import net.openid.appauth.AuthorizationException;

public class LoginActivity extends Activity {

    private OktaAppAuth mOktaAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mOktaAuth = OktaAppAuth.getInstance(this);

        // Do any of your own setup of the Activity

        mOktaAuth.init(
            this,
            new OktaAppAuth.OktaAuthListener() {
                @Override
                public void onSuccess() {
                    // Handle a successful initialization (e.g. display login button)
                }

                @Override
                public void onTokenFailure(@NonNull AuthorizationException ex) {
                    // Handle a failed initialization
                }
            }
        );
    }
}

这将初始化OktaAppAuth对象并处理成功或失败条件。 接下来,将AndroidManifest.xml更改为指向LoginActivity而不是MainActivity

现在,将以下内容添加到app/build.configdefaultConfig部分。

android.defaultConfig.manifestPlaceholders = [
            "appAuthRedirectScheme": "com.okta.example"
        ]

最后,将以下内容添加到同一文件的依赖项中:

implementation 'com.okta.android:appauth-android:0.1.0'

那应该建立和部署。 您可以使用logcat查看后台发生的情况。 查看主库类源代码,我们看到我们需要使用的标签是“ OktaAppAuth”。

Android应用程式

尝试创建服务后,我们立即收到“ Configuration was invalid错误。 我们需要将我们的应用程序连接到Okta帐户。

连接到Okta进行身份验证

由于您已经拥有Okta开发人员帐户,因此可以直接进行配置。 在开发人员控制台中,选择“应用程序”选项卡,然后选择“新建应用程序”。 选择本机,然后单击下一步。 这些字段应正确自动填充。 最重要的部分是重定向URL。 单击完成。

在“分配”选项卡上,单击“分配”下拉列表,然后选择“分配给组”。 单击“所有人”组旁边的“分配”。 现在,您的Okta组织中的任何人都可以对应用程序进行身份验证。

现在,您应该有足够的填充app/src/main/res/raw/okta_app_auth_config.json

{
  "client_id": "{clientId}",
  "redirect_uri": "{redirectUriValue}",
  "scopes": ["openid", "profile", "offline_access"],
  "issuer_uri": "https://{yourOktaDomain}/oauth2/default"
}

app/build.gradleappAuthRedirectScheme字段更改为重定向URI的基础,例如"appAuthRedirectScheme": "{yourOktaScheme}"

配置现在应该完成! 如果您像以前一样gradlew installDebug并执行logcat,则在打开应用程序时不再应该看到错误,并且应该看到一条消息,提示Warming up browser instance for auth request

设置您的登录页面

让我们在登录页面中添加一个按钮和进度条。 创建app / src / main / res / layout / activity_login.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"
    tools:context=".LoginActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:gravity="center">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingBottom="8pt"
                android:text="Demo App"
                style="@style/Base.TextAppearance.AppCompat.Title"/>

            <ProgressBar
                    android:id="@+id/progress_bar"
                    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:indeterminate="true"/>

            <Button
                android:id="@+id/auth_button"
                style="@style/Widget.AppCompat.Button.Colored"
                android:text="Login"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:visibility="gone" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

最初,该按钮是隐藏的。 Okta完成初始化后,我们将显示(并隐藏进度栏)。 为此,将以下内容放入LoginActivity.java的onSuccess()方法中。

findViewById(R.id.auth_button).setVisibility(View.VISIBLE);
    findViewById(R.id.progress_bar).setVisibility(View.GONE);

最后,在Okta初始化之前,将布局设置为我们刚刚创建的XML。

setContentView(R.layout.activity_login);

当您installDebug调试并运行应用程序时,您应该会看到带有登录按钮的标题。

Android应用程式

连线登录

要捕获登录详细信息,即用户名/密码,我们可以使用默认页面。 首先在AuthorizedActivity.java中获得AuthorizedActivity.java时创建登录页面:

package com.example.karl.myapplication;

import android.content.Intent;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.view.View;

import com.okta.appauth.android.OktaAppAuth;
import static com.okta.appauth.android.OktaAppAuth.getInstance;
import net.openid.appauth.AuthorizationException;

public class AuthorizedActivity extends Activity {

    private OktaAppAuth mOktaAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mOktaAuth = getInstance(this);

        setContentView(R.layout.activity_authorized);

        Button button = (Button) findViewById(R.id.sign_out);
        button.setOnClickListener(new View.OnClickListener()
{
		@Override
		public void onClick(View v)
		{
			mOktaAuth.logout();

			Intent mainIntent = new Intent(v.getContext(), LoginActivity.class);
			mainIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
			startActivity(mainIntent);
			finish();
		}
	}
      );
    }
}

我们在按钮上附加了一个侦听器,以注销我们并带我们回到登录页面。 现在放在activity_authorized.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"
    tools:context=".LoginActivity">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:gravity="center">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:paddingBottom="8pt"
                android:text="Authorized"
                style="@style/Base.TextAppearance.AppCompat.Title"/>

            <Button
                android:id="@+id/sign_out"
                style="@style/Widget.AppCompat.Button.Colored"
                android:text="Logout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

与登录页面一样,它只是带有按钮的标题。 通过在onCreate方法的末尾放置以下内容来连接LoginActivity.java的登录按钮。

Button button = (Button) findViewById(R.id.auth_button);
button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Intent completionIntent = new Intent(v.getContext(), AuthorizedActivity.class);
            Intent cancelIntent = new Intent(v.getContext(), LoginActivity.class);

            cancelIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            mOktaAuth.login(
                v.getContext(),
                PendingIntent.getActivity(v.getContext(), 0, completionIntent, 0),
                PendingIntent.getActivity(v.getContext(), 0, cancelIntent, 0)
            );
        }
    }
);

现在,当您单击登录按钮时,您应该会看到一个Okta登录页面,询问您的详细信息。

Android应用程式

如果您输入的用户详细信息与我们之前制作的应用程序是正确的(您的Okta门户凭据应可用),您将进入授权页面。

Android应用程式

单击注销按钮将带您回到我们的第一个屏幕。

这就是授权!

大多数人认为您需要Android Studio才能制作Android应用。 在本文中,您粉碎了这一概念,并从头开始构建了一个Android应用程序。 通过一些配置和少量代码,您就可以使用OktaAppAuth库将身份验证集成到您的应用程序中。 然后,您创建了一个只有经过身份验证的用户才能看到的视图。 借助Okta,您可以从此处安全地构建应用程序的其余部分,因为它知道身份验证已得到处理。

了解有关Java和安全应用程序开发的更多信息

希望您喜欢本教程,该教程介绍如何在没有IDE的情况下构建基本的Android应用。 您可以在GitHub上的https://github.com/oktadeveloper/okta-android-example上找到本教程中创建的示例。

我们还编写了其他一些很棒的Spring Boot和React教程,如果您有兴趣的话可以查看它们。

如有任何疑问,请随时在下面发表评论,或在我们的Okta开发者论坛上向我们提问。 如果您想查看更多类似的教程,请在Twitter @oktadev上关注我们!

最初在Okta开发人员博客上于2018年8月10日发布了``创建不具有IDE的基本Android应用程序''

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。

翻译自: https://www.javacodegeeks.com/2018/09/create-basic-android-app-without-ide.html

python ide

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值