android ide
“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。
几乎每个Android教程都使用Android Studio创建和开发应用程序。 这对学习不利,因为您看不到事物的工作原理,即
- 组成Android Studio项目的组件
- 如何设置和配置构建
- 哪些部分构成了来源
软件开发是关于文件的,在本教程中,我们将遍历基本Android项目中的每个文件-首先检查Android Studio输出什么,然后从头开始构建Android项目。 我们不会假定以前有任何Android经验,只需要一点Java。
注意:我将在Windows上执行此操作,但大多数说明应在其他平台上有效。
分解您的Android Studio项目
这是当您启动一个完全裸项目时Android Studio所创建的。
首先要注意的是,大多数文件都涉及Gradle(用于配置和执行构建的系统)。 没有任何Gradle文件,我们将拥有什么?
只有三个文件夹和三个文件。 显然,Android项目的主要复杂性是构建系统。
让我们看看.gitignore,看看哪些文件不包含在源代码管理中。
因此MyApplication.iml
并不重要。 如果您使用的是Google的iml文件,则会看到它们已被Android Studio使用,并且可以从.idea/
的配置重新生成。
另外, local.properties
和build/
也不重要。 那给我们留下了什么? 只是app/
文件夹和.idea/
一些文件,这是IntelliJ(基于Android Studio构建)存储配置文件的位置。
在app
文件夹中,您将找到两个目录和三个文件:
-
libs/
,为空 -
src/
,不是 -
.gitignore
-
build.gradle
-
ProGuard
ProGuard通过删除未使用的库来帮助缩小最终的APK。 您不需要此文件(实际上所有文件都已注释掉)。 .gitignore
用于源代码管理(如果您还不知道的话)。 因此重要的只是src/
和build.gradle
。
src/
包含您的Java源代码,您使用的资源(如布局和配置文件)以及AndroidManifest
可告诉Android您的应用是什么)。 然后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
,我们将使用它来设置应用程序的主题。
最后将以下内容放入app/src/main/AndroidManifest.xml
:
这定义了我们应用的程序包,标签和主要活动。
现在,当您运行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
。
这只会创建一个“ Hello World!” 消息中心屏幕。
现在运行gradlew build
,您应该再次看到BUILD SUCCESSFUL。 使用gradlew installDebug
安装到手机上,您应该看到以下内容:
您刚刚制作了一个正常工作的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.config
的defaultConfig
部分。
android.defaultConfig.manifestPlaceholders = [
"appAuthRedirectScheme": "com.okta.example"
]
最后,将以下内容添加到同一文件的依赖项中:
implementation 'com.okta.android:appauth-android:0.1.0'
那应该建立和部署。 您可以使用logcat
查看后台发生的情况。 查看主库类的源代码,我们看到我们需要使用的标签是“ OktaAppAuth”。
尝试创建服务后,我们立即收到“ Configuration was invalid
错误。 我们需要将我们的应用程序连接到Okta帐户。
连接到Okta进行身份验证
由于您已经拥有Okta开发人员帐户 ,因此可以直接进行配置。 在开发人员控制台中,选择“应用程序”选项卡,然后选择“新建应用程序”。 选择本机,然后单击下一步。 该字段应正确自动填充。 最重要的部分是重定向URL。 单击完成。
在“分配”选项卡上,单击“分配”下拉列表,然后选择“分配给组”。 单击“所有人”组旁边的“分配”。 现在,您的Okta组织中的任何人都可以对应用程序进行身份验证。
现在,您应该有足够的app/src/main/res/raw/okta_app_auth_config.json
来填充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.gradle
的appAuthRedirectScheme
字段更改为重定向URI的基础,例如"appAuthRedirectScheme": "{yourOktaScheme}"
。
配置现在应该完成! 如果您像以前一样gradlew installDebug
并执行logcat,则在打开应用程序时不再应该看到错误,并且应该看到一条消息,提示Warming up browser instance for auth request
。
设置您的登录页面
让我们在登录页面中添加一个按钮和进度条。 创建app / src / main / res / layout / activity_login.xml。
最初,该按钮是隐藏的。 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
调试并运行应用程序时,您应该会看到带有登录按钮的标题。
连线登录
要捕获登录详细信息,即用户名/密码,我们可以使用默认页面。 首先在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
与登录页面一样,它只是带有按钮的标题。 通过在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登录页面,询问您的详细信息。
如果您输入的用户详细信息与我们之前创建的应用程序是正确的(您的Okta门户凭据应可用),您将进入授权页面。
单击注销按钮将带您回到我们的第一个屏幕。
这就是授权!
大多数人认为您需要Android Studio才能制作Android应用。 在本文中,您粉碎了这一概念,并从头开始构建了一个Android应用程序。 通过一些配置和少量代码,您就可以使用OktaAppAuth库将身份验证集成到您的应用程序中。 然后,您创建了一个只有经过身份验证的用户才能看到的视图。 借助Okta,您可以从此处安全地构建应用程序的其余部分,因为它知道身份验证已得到处理。
了解有关Java和安全应用程序开发的更多信息
希望您喜欢本教程,该教程介绍如何在没有IDE的情况下构建基本的Android应用。 您可以在GitHub上的https://github.com/oktadeveloper/okta-android-example上找到本教程中创建的示例。
我们还编写了其他一些很棒的Spring Boot和React教程,如果您有兴趣的话可以查看它们。
- 在10分钟内将身份验证添加到任何网页
- 使用Spring Boot和React进行Bootiful开发
- 构建一个React Native应用程序并使用OAuth 2.0进行身份验证
如有任何疑问,请随时在下面发表评论,或在我们的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
android ide