Android Studio
Android Studio
一、Android APK文件结构
1.Andriod APK文件结构
2.AS生成的apk的目录
二、Android四大组件与权限??
三、AS使用ndk-build生成.so文件
1.下载并配置好ndk:下载地址https://dl.google.com/android/repository/android-ndk-r15c-windows-x86_64.zip
2.新建一个AS工程Android00;新建一个MyJni.java文件
3.然后点击Make Project会在build目录下生成.class文件
4.在app\src\main文件夹下新建一个jni文件夹,使用External Tools生成.h文件
5.生成.h文件内容如下:
6.在jni目录下新建一个C/C++source file,取名test.c,用来实现上面.h中的方法
7.在jni文件夹下新建Android.mk和Application.mk文件
8.关联下载好的ndk包
9.使用AS终端进入到jni目录,输入指令ndk-build就会生成相应的so文件(ndk-build需要自行配置)
10.添加的文件及生成的文件
??Error解决
??参考文档
一、Android APK文件结构
1.Andriod APK文件结构
2.AS生成的apk的目录
二、Android四大组件与权限??
三、AS使用ndk-build生成.so文件
1.下载并配置好ndk:下载地址https://dl.google.com/android/repository/android-ndk-r15c-windows-x86_64.zip
2.新建一个AS工程Android00;新建一个MyJni.java文件
3.然后点击Make Project会在build目录下生成.class文件
4.在app\src\main文件夹下新建一个jni文件夹,使用External Tools生成.h文件
5.生成.h文件内容如下:
6.在jni目录下新建一个C/C++source file,取名test.c,用来实现上面.h中的方法
7.在jni文件夹下新建Android.mk和Application.mk文件
8.关联下载好的ndk包
9.使用AS终端进入到jni目录,输入指令ndk-build就会生成相应的so文件(ndk-build需要自行配置)
10.添加的文件及生成的文件
??Error解决
??参考文档
一、Android APK文件结构
1.Andriod APK文件结构
packagecom.bluelesson.a23android;
// 包名,相当于C++中的命令空间
// 相当于导入头文件,现在是导入一个类名(完整类名包含包名)
// (因为java中一个类文件一般存一个类)
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
// 继承自AppCompatActivity类
public class MainActivity extends AppCompatActivity {
// 相当于C++的虚函数
@Override
protected void onCreate(Bundle savedInstanceState) {
// 调用父类的方法
super.onCreate(savedInstanceState);
// 设置当前类依赖的资源文件
// 参数是资源文件
// 和窗口绑定的资源文件叫布局文件
setContentView(R.layout.activity_main);
}
}
2.AS生成的apk的目录
- 基本的APK是一个压缩包,其中包含:
- META-INF:签名信息,包括公司信息、文件的HASH值
- Res:资源信息,包括图片、xml(布局文件、字符串、风格样式等)
- AndroidMainfest.xml:清单文件,包括APK包名、四大组件的一些申明定义、权限、程序的入口
- Classes.dex:可执行文件,包括java的类信息、方法信息、字段信息、虚拟机指令
- Resources.arsc:资源序号文件,包括资源里的所有ID、名称。
- 资源ID对应文件是R.class
- dex文件的生成流程是从java源码 -> class文件 -> dex文件
- Lib动态库,扩展名是
.so
,包括C++代码,各种平台:x86、arm
二、Android四大组件与权限??
1.Activity:界面,窗口
2.Service:服务,后台处理线程
3.BroadcastReceicer:广播接收者,消息hook
4.ContentProvider:内容提供者,为数据访问封装接口
三、AS使用ndk-build生成.so文件
1.下载并配置好ndk:下载地址https://dl.google.com/android/repository/android-ndk-r15c-windows-x86_64.zip
2.新建一个AS工程Android00;新建一个MyJni.java文件
- MyJni.java
package com.example.ynag.android00;
public class MyJni {
static {
System.loadLibrary("MyJni");
}
public native static String getString();
}
3.然后点击Make Project
会在build目录下生成.class文件
4.在app\src\main
文件夹下新建一个jni文件夹,使用External Tools生成.h文件
- 1.点击设置,找到Tools->External Tools->add->Create Tool
-
2.具体配置如下:
Name:javah
Description:javah
Program:$JDKPath$\bin\javah.exe
Parameters:-classpath . -jni -d $ModuleFileDir$\src\main\jni $FileClass$
Working directory:$ModuleFileDir$\src\main\Java
- classpath classes指明类所在的位置
- -d 产生的.h文件放到指定目录下
5.生成.h文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_ynag_android00_MyJni */
#ifndef _Included_com_example_ynag_android00_MyJni
#define _Included_com_example_ynag_android00_MyJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_ynag_android00_MyJni
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_ynag_android00_MyJni_getString
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
6.在jni目录下新建一个C/C++source file,取名test.c,用来实现上面.h中的方法
#include "jni.h"
#include "com_example_ynag_android00_MyJni.h"
JNIEXPORT jstring JNICALL Java_com_example_ynag_android00_MyJni_getString
(JNIEnv *env, jclass jz){
return (*env)->NewStringUTF(env,"this is the first time for me to use jni");
}
7.在jni文件夹下新建Android.mk
和Application.mk
文件
- Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyJni
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)
- Application.mk
APP_ABI := all
8.关联下载好的ndk包
9.使用AS终端进入到jni目录,输入指令ndk-build
就会生成相应的so文件(ndk-build需要自行配置)
10.添加的文件及生成的文件
??Error解决
- 忘记在那处会报错:# Error: Your project contains C++ files but it is not using a supported native build system.
- 解决方案:
在app的build.gredle
中添加如下代码即可:
sourceSets{
main {
jni.srcDirs = []
}
}
??参考文档
1.生成.so文件:
- https://blog.csdn.net/leilifengxingmw/article/details/71598687
- https://www.jianshu.com/p/faa3eebbd401
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">