通过AndroidManifest中的meta-data标签来设置log开关
一般来说,我们在APP项目中可以通过BuildConfig.DEBUG来控制Log的开关,这样在调试的版本有log,release版本没有log。如果我们在sdk(或lib)中需要调试代码怎么办?我们可以通过在AndroidManifest.xml中定义一个标签,通过获取标签来控制log打开和关闭。
代码如下:
sdk(或lib)中代码:
LogManager类
public class LogManager {
private static boolean logSwitch = false;
//在APP的初始化的时候调用
public static void init(Context c) {
c = c.getApplicationContext();
try {
PackageManager packageManager = c.getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(c.getPackageName(), PackageManager.GET_META_DATA);
Bundle metaData = applicationInfo.metaData;
LogManager.logSwitch = metaData.getBoolean("log_switch");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void e(String tag, String message) {
if (logSwitch) {
Log.e(tag, message);
}
}
}
APP的代码:
App类:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
LogManager.init(getApplicationContext());
}
}
MainActivity类
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LogManager.e("zhang", "测试OK");
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yundoku.demo201708">
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--lib中的log开关控制,关闭log可以将value的值设为false或者删除该标签信息-->
<meta-data android:name="log_switch" android:value="true"/>
</application>
</manifest>