C++学习之打车软件—Android基础UI开发

目录

 

01 17-android环境

02 1-项目演示

03 2-创建TextView控件

04 3-创建一个button控件

05 4-日志的调试

06 5-editText控件

07 6-checkBox控件和登陆界面布局

01 7-中午回顾

02 8-登陆界面的布局实现

03 9-界面的跳转

04 10-注册界面的实现

05 11-Activity的生命周期

06 12-autoCompleteTextView控件


 

01 17-android环境

02 1-项目演示

03 2-创建TextView控件

app/src/main/ AndroidMainifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 
package="com.itcast.ace.obo_23">
 
<application
 
android:allowBackup="true"
 
android:icon="@mipmap/ic_launcher"
 
android:label="@string/app_name"
 
android:supportsRtl="true"
 
android:theme="@style/AppTheme">
 
<activity android:name=".LoginActivity">
 
</activity>
 
<activity android:name=".Login1Activity">
 
<intent-filter>
 
<action android:name="android.intent.action.MAIN" />
 
<category android:name="android.intent.category.LAUNCHER" />
 
</intent-filter>
 
</activity>
 
</application>
</manifest>

04 3-创建一个button控件

1 需要创建一个java类 专门调用JNI接口的一个java类
   类的路径应该和Activity平级


在类中写如下代码

/*是专门为java提供调用c++jni接口的类*/
public class OBOJNI {


    public static OBOJNI getInstance() {
        if (instance == null) {
            instance = new OBOJNI();
        }

        return instance;
    }

    private static OBOJNI instance = null;


    //给java提供一个jni接口
    public native void hello_jni();


    //加载cpp给提供的 动态库
    static {
        System.loadLibrary("OBOJni"); //libOBOJni.so
    }

}

05 4-日志的调试


2 将native方法 转换成C++对应的声明函数

javah工具 

打开powershell终端

cd到
C:\Users\Ace\Documents\GitHub\OBO\OBO_23\app\src\main\java

javah -jni com.itcast.ace.obo_23.OBOJNI


3 得到一个native函数的c++语法声明 和.h文件

06 5-editText控件

4 将函数声明实现 在test.cpp中实现

一定要写在extern "C"{} 中


#include <jni.h>
#include <android/log.h>

void hello_test_jni()
{
    __android_log_print(ANDROID_LOG_ERROR, "JNI", "hello JNI test!!!");
}

extern  "C"
{

/*
 * Class:     com_itcast_ace_obo_23_OBOJNI
 * Method:    hello_jni
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_itcast_ace_obo_123_OBOJNI_hello_1jni
        (JNIEnv * env, jobject obj)
{
    hello_test_jni();
}

07 6-checkBox控件和登陆界面布局


/*
 * Class:     com_itcast_ace_obo_23_OBOJNI
 * Method:    hello_jni2
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_itcast_ace_obo_123_OBOJNI_hello_1jni2
        (JNIEnv *env, jobject obj)
{
    __android_log_print(ANDROID_LOG_ERROR, "JNI", "hello JNI test222!!!");

}

}

5 cd jni路径 执行 ndk-build.cmd 重新生成一个新的so

6 在java中调用jni接口

01 7-中午回顾

1  在项目根路径中创建一个jni文件夹

2 在jni文件夹中创建一个 Android.mk文件(相当于jni路径中的makefile)

3 在jni路径中创建一个cpp文件 test.cpp

4 在Android.mk文件中 

LOCAL_PATH:=$(call my-dir)

include $(CLEAR_VARS)

#libOBOJni.so
LOCAL_MODULE := OBOJni
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -llog 

02 8-登陆界面的布局实现


#要生成的是一个so动态库
include $(BUILD_SHARED_LIBRARY)

5 在test.cpp随便定义一个函数

void hello_test_jni()
{

}

6 在app/build.gradle中 的android{}标签中添加

   sourceSets {
        main.jniLibs {
            source {
                srcDirs = ['../libs']
            }
        }
    }

    externalNativeBuild {
        ndkBuild {
            path '../jni/Android.mk'
        }

    }

03 9-界面的跳转


7 点击sync Now 同步配置

8 打开powershell 找到 jni路径 cd进去

执行 ndk-build.cmd 

如果能够成功生成 so文件 表示 jni环境配置成功。

04 10-注册界面的实现

1 将对应Android手机平台的libcurl.a和头文件curl/ 拷贝到jni路径下。
2 将jni生成的so文件 联通libcurl.a一起编译
需要修改Android.mk文件
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
# libcurl.a
LOCAL_MODULE := libcurl
LOCAL_SRC_FILES := libcurl.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
#libOBOJni.so
LOCAL_MODULE := OBOJni
LOCAL_SRC_FILES := test.cpp Login.cpp cJSON.cpp
LOCAL_LDLIBS := -llog -lz
LOCAL_STATIC_LIBRARIES := libcurl
#要生成的是一个so动态库
include $(BUILD_SHARED_LIBRARY)
3 因为目前jni中只有一个libcurl.a 需要在build的时候 只编译一个平台的so
在jni路径中 创建Application.mk
添加
APP_ABI = armeabi
4 配置AndroidStudio的平台版本 只编译armeabi平台
在项目/app/build.gradle
A

05 11-Activity的生命周期

在里面的 android{}-->defaultConfit {} 作用范围内添加
 
// 不声明ndk标签,项目默认会创建一个libapp.so的文件
 
ndk {
 
// 声明创建so库的文件名,会自动添加lib前缀, 添加了前缀,不会自动添加
 
moduleName "OBOjni"
 
//声明启用Android日志, 在c/c++的源文件中使用的#include <android/log.h> 日志
将得到输出
 
//这里我们关联了两个库 一个是liblog 和 libz
 
ldLibs "log","z"
 
// 声明创建指定cpu架构的so库, 不声明的话, 默认(gradle 1.5.0)会生成7中架构,如果
你的libcurl没有提供别的平台,那么就会链接失败,
 
//所以此条配置很重要,这里我们只生成一个平台
 
abiFilters "armeabi"
 
}
5 点击Sync Now

06 12-autoCompleteTextView控件

5 点击Sync Now
6 ndk-build
7 修改Login.cpp
#include <curl/curl.h>
在代码实现中 测试接口
CURL *curl = NULL;
curl = curl_easy_init();
8 ndk-build 如果能够成功生成so 说明编译没有问题
 
分区 移动打车项目2 的第 2 页
9 将应用程序部署在android手机上, 点击登录按钮 触发刚才的curl的接口,如果不崩
溃,就表示curl的环境部署成功

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值