安卓app开发笔记

目标:写一个能够通过jni操控硬件,用于测试安卓硬件驱动是否Ok的安卓app。

一、界面布局layout的关键修改点

在这里插入图片描述
二、对控件添加监听方法
在mainactivity的onCreat()方法中调用findViewById(),获得控件(如:Button)的对象,调用其中的setOnClickListener()方法,设置控件被点击时对应的操作。

public class MainActivity extends AppCompatActivity {
    private Button button = null;
    boolean ledsAllOn = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button =(Button) findViewById(R.id.BUTTON);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                if (ledsAllOn) {
                    ledsAllOn = false;
                    //turn off all leds
                    button.setText("click to turn on all leds");
                } else {
                    ledsAllOn = true;
                    //turn on all leds
                    button.setText("click to  turn off all leds");
                }
            }
        });
    }

也可以在acticity_main.xml文件中在控件的配置项里添加android:onClick=“method name”,来指定控件被点击时调用的方法,在MainActivity.java里实现这个方法。

在这里插入图片描述
在这里插入图片描述
三、使用oast.makeText().show()在界面上打印信息


```java
public void checkbox_click(View view) {
        CheckBox c = (CheckBox) findViewById(view.getId());
        int which_led = view.getId() - R.id.LED1 + 1;
        if (c.isChecked())
            Toast.makeText(getApplicationContext(), "LED" + which_led + " on!", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(getApplicationContext(), "LED" + which_led + " off!", Toast.LENGTH_SHORT).show();
    }

``
四、添加硬件控制
1.实现java层的硬件控制接口文件LedControl.java
在这里插入图片描述
在静态块里调用System.loadlibrary(“ledcontrol”)加载对于的c库文件libledcontrol.so
并将接口方法申明为static native方法;
2.在Main_activity.java中添加对硬件控制接口的调用

在这里插入图片描述
3.实现c库的文件
3.1将LedControl.java中的native方法与c库中的函数建立联系,可以使用隐式建立。
在这里插入图片描述
先用javac和javah -jni命令生成对应的.h文件,这个.h文件里就有c接口函数的类型声明,要使用隐式建立java于c这间的连接,就不能改这个函数的名字和参数类型。
在这里插入图片描述
3.2在ledcontrol.c中实现这些接口函数

//android系统中用于打印log的接口__android_log_print(ANDROID_LOG_INFO,...),可用logcat捕获
//需要包含android/log.h,依赖于liblog.so
#include <android/log.h>
#include <jni.h>
#define TAG "ledcontrol"
/*
 * Class:     com_example_mypc_app01_leddemo_LedControl
 * Method:    led_ctl
 * Signature: (IZ)I
 */
JNIEXPORT jint JNICALL Java_com_example_mypc_app01_1leddemo_LedControl_led_1ctl
  (JNIEnv *env, jclass cls, jint id, jboolean on) {
  __android_log_print(ANDROID_LOG_INFO, TAG, "led_1ctl:%d,%s\n", id, (on?"on":"off"));
  }

/*
 * Class:     com_example_mypc_app01_leddemo_LedControl
 * Method:    led_open
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_example_mypc_app01_1leddemo_LedControl_led_1open
  (JNIEnv *env, jclass cls) {
  __android_log_print(ANDROID_LOG_INFO, TAG, "led_1open succeed\n");
  return 0;
  }

/*
 * Class:     com_example_mypc_app01_leddemo_LedControl
 * Method:    led_close
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_example_mypc_app01_1leddemo_LedControl_led_1close
  (JNIEnv *env , jclass cls) {
  __android_log_print(ANDROID_LOG_INFO, TAG, "led_1close succeed\n");
  }

3.3编译成libledcontrol.so

``Makefile
C_SRC := ( s h e l l f i n d . − n a m e ∗ . c ) O B J : = (shell find . -name *.c) OBJ := (shellfind.name.c)OBJ:=(patsubst %.c,%.o,$(C_SRC))
MAKE = arm-linux-gcc
TARGET = libledcontrol.so
INC =-I /work/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/include/
INC +=-I /usr/lib/jvm/java-1.7.0-openjdk-amd64/include/
LIBS =/work/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/libc.so
LIBS +=/work/android-5.0.2/prebuilts/ndk/9/platforms/android-19/arch-arm/usr/lib/liblog.so

all:$(OBJ) $(LIBS)
$(MAKE) -shared -nostdlib -o $(TARGET) $^
%.o:%.c
$(MAKE) $(INC) -fPIC -c -o $@ $<
clean:
rm libledcontrol.so *.o

五、把liledcontrol.so 用adb push到/vendor/lib目录下,然后就可以测试,app调用到对应的c函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Android笔记App开发教程 Android平台提供了丰富的开发工具和API,使得开发一个基于Android笔记App变得非常容易和便捷。下面是一个简单的教程,帮助你快速入门。 1. 设计界面:首先,你需要设计App的用户界面。使用Android的布局文件来定义屏幕上的各个元素和排列方式。你可以使用Android Studio提供的可视化编辑器来简化这个过程。 2. 创建数据模型:考虑到笔记的特性,你需要创建一个数据模型来存储笔记的内容、日期和其他相关信息。可以使用SQLite数据库或者Room Persistence Library来保存和管理数据。 3. 实现基本功能:为你的App添加一些基本功能,比如创建新笔记、编辑、删除、保存和分享笔记等。可以创建适当的按钮和菜单项,然后编写相关的代码来实现这些功能。 4. 添加搜索功能:一个好的笔记App应该具备搜索功能。你可以使用Android的搜索框小部件,结合数据库查询,实现根据关键词搜索笔记的功能。 5. 加入云同步功能:为了方便用户在不同设备上访问和同步笔记,你可以考虑加入云同步功能。可以使用Firebase或者其他第三方服务来实现数据的备份和同步功能。 6. 优化体验:为了提升用户体验,你可以考虑对App做一些优化,比如添加提醒功能、增加标签分类、支持手写输入或者添加图片等。 7. 测试和调试:在开发过程中,要进行频繁的测试和调试,以确保App的正常运行和用户友好性。可以使用Android Studio提供的调试工具进行测试和调试。 8. 发布App:最后,你可以使用Android Studio打包App,并将其发布到Google Play商店或其他应用商店中。 希望这个简单的教程能够帮助你入门Android笔记App的开发。随着你的深入学习和探索,你可以进一步完善和扩展你的App。祝你好运!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值